我试图检查一个网站上的sql注入攻击,并惊讶地看到它不是很简单,因为下面是简单的代码。
$sql="select * from user_acount where login_id='".$username."' and password='".$password."' and status='1' ";
我不能做任何sql注入来测试它。我写了以下
第一次尝试检查sql注入
Login: admin'--
Password:'i typed nothing here '
结果您无法登录的密码错误。
第二名:
Login: admin or 1=1 --'
Password:''
结果您无法登录的密码错误。
第3名:
Login: admin' or 1=1
Password:''
第四: 登录:admin或1 = 1' - 密码: ''
结果您无法登录的密码错误。
任何人都可以解释阻止我的是什么吗?我没有使用预处理语句,我也没有使用任何过滤器类,我没有real_escape_string?
答案 0 :(得分:5)
$_REQUEST['username']
或相关而不是$username
)。admin'--
无法存储在$username
中(例如,表单元素名称与变量名称不匹配)。答案 1 :(得分:4)
两种可能性:
login_id
没有admin
,因此查询如下:
select * from user_acount where login_id='admin'
magic_quotes
已启用,会产生以下查询:
select * from user_acount where login_id='admin\'--' and password='' and status='1'
select * from user_acount where login_id='admin or 1=1 --\'' and password='' and status='1'
即使关闭了魔术引号,最后一个查询也会失败:
select * from user_acount where login_id='admin or 1=1 --'' and password='' and status='1'
由于字符串中的--
条评论不起作用,因此查询解释为:
select * from user_acount where login_id='STRING'' and password='' and status='1'
如您所见,这会导致'STRING'
答案 2 :(得分:1)
您输入的密码包含报价。这会破坏您的SQL查询,并且可能是代码无法区分错误和合法的“无此类用户”结果,因此您收到错误的密码消息。
尝试将密码留空。
答案 3 :(得分:1)
您实际上并未调用real_escape_string()
方法,但我认为magic_quotes_gpc
设置为true。
当magic_quotes开启时,所有' (单引号),“(双引号),\ (反斜杠)和NUL的逃脱 自动反斜杠。
答案 4 :(得分:1)
您是否尝试过:
Login: admin' or '1=1
Password: admin' or '1=1
同时检查魔法引号是否已打开