前言
挖掘SQL注入漏洞的第一步,就是发现SQL注入漏洞,只有发现了注入点才能够继续深入利用。
可以通过多种方式来检测是否存在注入,最简单的就是直接在参数后加上'
或者"
等特殊字符让web应用程序抛出异常;但这种情况已经很少见了,比较好的方法是通过盲注来进行判断;
注入点位置
之前也提到过,所有和数据库有交互的地方均可能存在SQL注入,因此我们在分析数据包的时候,可以关注一下哪些数据可能会和数据库交互,从而进行测试是否存在SQL注入漏洞。
举例
POST /?id=homePage HTTP/1.1
Host: www.netspi.com
Connection: close
Cache-Control: max-age=0
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36
Upgrade-Insecure-Requests: 1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.9
X-Server-Name: PROD
Cookie: user=harold;
Content-Type: application/x-www-form-urlencoded
username=harold&email=harold@netspi.com
分析上面这个数据包,红框中的内容都可能会和数据库交互,因此都可能存在SQL注入,其他数据包分析类似
如果传输的是json格式的数据,在使用双引号闭合时,记得使用
\
来防止破坏json数据结构,如下,其他特殊格式数据类似``` {“username”:”test\””}
```
注入检测
检测是否存在注入一般通过两种方式来判断:
- 输入特殊字符是否抛出相关的异常
- 输入一些语句运行后是否达到我们预期的结果(返回内容、响应时间等)
此处只是举例,抛砖引玉,多尝试构造
| 类型 | 语句和结果 | | —- | —- |
|
特殊字符
| id=')")
==> 抛出异常
|
|
逻辑算数测试
| id=' and 2*3 = 6 --
==> True
id=' and 2*3 = 5 --
==> False
id=2*3
==> 是否返回id=6
相关的内容
id=1/1
==> True
id=1/0
==> False或者异常
|
|
返回延时
| id=' and sleep(5)
==> 延时5秒甚至更久,需要根据特定的数据库函数来判断
|