我一直在阅读关于SQL注入的PDF(以及一般的网络),并希望确定我的理解(如果有人想知道的话,那就在这里:http://www.imperva.com/docs/WP_SQL_Injection_Protection_LK.pdf)。
如果网站需要用户名和密码,则会根据查询选择并显示列:
" SELECT * FROM users WHERE user =' "。$ userlogin。" '和密码=' "。$ password。" '"
那么可能的SQL注入是什么以及它们会做什么?
1)例如,以下注入是否会获得所有用户的所有列?
" SELECT * FROM users WHERE user =' 任何名称'和密码='的任何'或者'测试' =测试'"
2)如果有的话,以下注射会做什么吗?
" SELECT * FROM users WHERE user ='的名称'或1 = 1#'和密码=' 任何'"
答案 0 :(得分:3)
1)将用户身份验证为' =' =' test'因此总会返回真实的
2)无论密码为# starts a comment same with --
,都会授权用户 SELECT * FROM users WHERE user=' name' OR 1=1-- AND password = 'any'
这个想法是恶意用户可以在你离开的地方继续查询,然后做他/她希望的任何事情,当然这可能只是绕过身份验证而且:
LOAD_FILE(允许读取远程主机上的文件)
INTO OUTFILE(允许在远程主机上编写文件,通常可以轻松获得RCE的目标)。
UNION SELECT(通常在从数据库转储信息时使用)
如果没有正确的权限,这些都不会有效这就是为什么不将root / dba帐户用于本地管理之外的任何事情并为每个用户创建帐户以及为该用途量身定制的权限&#非常重要的原因&# 39; s需要这样,就像计算机上的用户一样,一个用户可能不会触及另一个用户的东西。