目录
漏洞原理
Web程序代码中对于用户提交的参数未做过滤就直接放到SQL语句中执行,导致参数中的特殊字符打破了SQL语句原有逻辑,黑客可以利用该漏洞执行任意SQL语句,如查询数据、下载数据、写入webshell、执行系统命令以及绕过登录限制等。
Low
渗透思路
无防护直接注入
9'union select user(),database()-- #
Medium
渗透思路
注入参数类型为数字,而且 ' 会被转义
逻辑表达式绕过引号转义
burpsuit 抓包 paylaod 修改如下
1+or+1=1--+
源码对比
Low 源码
Medium 源码
对比小结
与 Low 源码比较,Medium增加了特殊字符转义的函数 mysqli_real_escape_string
High
渗透思路
和 Low 没什么太大区别,只是 SQL 注入和获得结果需要分两次请求
SQL注入请求
1'or+1=1--+
注入结果获得请求
再请求 /vulnerabilities/sqli/ 路径获得结果
源码对比
Medium 源码
High 源码
对比小结
High 比 Medium 的防护措施更少,唯一不同的是 High 对返回结果做了限制,只有一条,但实际 SQL 注入中可以用注释符将 limit 限制去掉
Impossible
源码对比
high 源码
Impossible 源码
对比小结
与 High 相比,Impossible 的措施更多更有效:
- 校验请求 CSRF Token
- 校验参数类型是否为数字
- 预编译参数化查询
绕过
- 各种编码绕过
- URL编码
- 十六进制
- ASCII
- 字母大小写转换绕过
- 空格过滤绕过
- 09,0A,0B,0C,0D,A0,20,+
- 注释
- 关键字双写
- 内联注释绕过
- 请求方式差异规则松懈性绕过
- GET,POST,HEAD
- http,https
- 关键字加 % 绕过
- %00截断
- 利用分块编码传输绕过
- 冷门函数/字符/运算符绕过
- 参数污染绕过
- HTTP 走私请求绕过
防御
- 对输入参数中特殊字符和关键字进行过滤、转义
- 后端编程采用 SQL 预编译
- 引入安全库函数
- 添加 WAF 防护
- 规范前后端编码字符集
- 普通用户与系统管理员用户的权限要有严格区分