SQL注入: 我的理解很简单,能代入到数据库查询,且没有过滤,或过滤不严谨,就可以造成SQL注入 演示环境:linux+apache+mysql+php DVWA 首先还是从低级开始:
可以看到不管输入 and 1=1 还是 and 1=2都是返回正常的.
通过代码可以看到id是字符型代入到数据库中查询的,而mysql就有自动转换类型的这个特性. 所以你输入的 1 and 1=1 or 1 and 1=2,他只解析了1. 解决方案: 闭合单引号,注释后面的单引号 这样sql语句就变成了:SELECT first_name, last_name FROM users WHERE user_id = ‘1’ and 1=1 #’
这里如过你吧执行的sql语句输出出来,就会发现#并没有被解析.解决方法:# 的url转码是 %23,用%23替换#就可以了
成功注入
中级:
这里值得注意的就是:mysqli_real_escape_string函数
可以看到他会转义字符.但是在sql语句里面,变量$id并没有被单引号扩起来,这个函数也就形同虚设了
直接将他提交的值做了一个修改,完美
高级:
提交的那个页面代码我没看,不过我想应该是吧输入的id的值保存到session里面,到注入页面里面去使用,有空的可以自己研究研究 代码层面又变成了一个字符型的注入,和GET基本上就没差别了,只是构造语句的地方不一样了而已
这里就不需要转码了哈,他不是走url的,你转码了反而报错 成功注入:完美的操作