如何解决为什么我不能使用mysql和php进行sql注入测试
| 我试图检查一个网站是否存在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:\'\'
结果密码错误,无法登录。
第三名:
Login: admin\' or 1=1
Password:\'\'
第四名:
登录名:admin或1 = 1 \'-
密码:\'\'
结果密码错误,无法登录。
谁能解释一下阻止我的原因吗?我没有使用准备好的语句,也没有使用任何过滤器类,也没有real_escape_string?
解决方法
两种可能性:
没有ѭ4no和
admin
,因此查询如下:
select * from user_acount where login_id=\'admin\'
已启用“ 7”,导致查询如下:
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\'
由于字符串中的“ 10”个注释不起作用,因此查询解释如下:
select * from user_acount where login_id=\'STRING\'\' and password=\'\' and status=\'1\'
如您所见,这将导致ѭ12之后的语法错误
,
魔术引号可能已打开(因此将自动处理用户输入,使其更适合组成数据库查询)。
Register Globals可能已关闭(因此,您必须使用$_REQUEST[\'username\']
或相关名称而不是$username
)。
您的程序中可能存在一个错误,该错误会阻止将输入“ 15”存储在“ 14”中(例如,表单元素名称与变量名称不匹配)。
, 您正在输入一个包含引号的密码。这会中断您的SQL查询,并且可能代码无法区分错误和合法的“没有这样的用户”结果,因此您会收到错误的密码消息。
尝试将密码留空。
, 您实际上并未调用real_escape_string()
方法,但是我认为magic_quotes_gpc
设置为true。
当magic_quotes启用时,所有\'
(单引号),\“(双引号),\\
(反斜杠)和NUL \
自动反斜杠。
运行时配置-magic_quotes_gpc
, 您是否尝试过:
Login: admin\' or \'1=1
Password: admin\' or \'1=1
还要检查魔术引号是否已打开
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。