MySQL-注入点检测
注入点检测
前言
在挖掘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 protected]

上面的红框就是可能存在和数据库交互,因此有可能存在SQL注入,大家在这方面可以多下功夫判断,有些参数有的时候看不出来存在数据库交互,但是在多次的漏洞挖掘积累的经验你知道了这个地方的数据会被写入的数据库或者是在数据库中查询
如果传递的是json数据,也可以用上面的方式去做测试,特殊符号什么的,注意在使用双引号闭合时,记得用反引号转义,防止破坏json的数据结构
{"username":"test\""}
注入检测
检测是否存在注入,一般通过两种方式来判断:
- 输入特殊字符观察是否抛出相关的异常
- 输入一些语句运行是否能够达到我们预期的结果(返回内容和响应时间等)
这里简单举例,抛砖引玉,相信大家能够构造出更多的payload
| 类型 | 语句和结果 |
|---|---|
| 特殊字符 | id=')") ==> 抛出异常 |
| 逻辑算数测试 | id=' and 2*3 = 6 --==> Trueid= ' and 2*3 = 5 --==> Falseid= 2*3==> 查看是否返回和id=6相关的内容id= 1/1==> Trueid= 1/0==> False或者异常 |
| 返回延时 | id=' and sleep(5)'==>延时5秒甚至更久,需要配合特定的数据库函数来判断 |