前言

挖掘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注入,其他数据包分析类似

image-20211217143658914

如果传输的是json格式的数据,在使用双引号闭合时,记得使用\来防止破坏json数据结构,如下,其他特殊格式数据类似

{"username":"test\""}

注入检测

检测是否存在注入一般通过两种方式来判断:

  1. 输入特殊字符是否抛出相关的异常
  2. 输入一些语句运行后是否达到我们预期的结果(返回内容、响应时间等)

此处只是举例,抛砖引玉,多尝试构造

类型 语句和结果
特殊字符 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秒甚至更久,需要根据特定的数据库函数来判断
Copyright © d4m1ts 2023 all right reserved,powered by Gitbook该文章修订时间: 2022-01-25 15:14:07

results matching ""

    No results matching ""