Sqlmap性能优化设置
-
Sqlmap设置持久HTTP连接,sqlmap默认是一次连接成功后马上关闭。
HTTP报文中相当于Connection: Close(一次连接马上关闭)
要扫描站点的URL比较多时,这样比较耗费性能,所以需要将HTTP连接持久化来提高扫描性能。
HTTP报文相当于Connection: Keep-Alive
如果在Sqlmap中设置的话,只需要加上--keep-alive参数
sqlmap -u "目标URL" --keep-alive
-
Sqlmap设置不接收Http Body(响应体)部分
Body部分内容太大会增加HTTP响应延迟,如果只关心响应头部分内容,则可以设置空连接
设置参数--null-connection
sqlmap -u "目标URL" --null-connection
-
Sqlmap设置多线程
Sqlmap默认是单线程访问的,扫描的顺序串行执行,必须要等到上一次请求成功后才会执行后面的扫描,这样以来,扫描的效率就会低很多。因为网络连接是耗时操作,等待服务端响应的这段时间,Sqlmap就什么都做不了,本地的CPU、内存资源得不到有利的利用。而多个线程并行处理请求则可以有效的利用本地系统资源。
但是设置线程太多也不好,因为线程越多,服务端的压力越大,可能会导致响应速度大幅度降低甚至出现丢包现象,导致请求无响应。所以Sqlmap最大只能设置10个线程。
通过设置--thread参数设置线程数量
sqlmap -u "目标URL" --thread=10
-
Sqlmap设置预测输出
用于检索并统计字符出现的次数
参数:--predict-output
与--thread相互冲突,它们不能同时被设置,比如同时指定--predict-output和--thread
sqlmap -u "http://test.dvwa.com/login.php" --predict-output --thread=3
将会报以下错误
[23:10:15] [CRITICAL] switch '--predict-output' is incompatible with option '--threads' and switch '-o'
通过-o可以开启所有性能优化的参数
Sqlmap指定位置注入
-
指定参数进行扫描,而不是扫描所有参数,这样可以避免浪费时间到非注入点参数上,从而提高扫描效率。比如扫描以下URL,已知Submit是静态参数,id是动态的,那么在扫描的时候只需要指定id就行了,指定多个参数时用双引号包起来,并以逗号分隔。也可以指定HTTP请求头中的参数,如User-Agent
sqlmap -u "http://test.dvwa.com/vulnerabilities/sqli/?id=1&Submit=Submit#" -p id
-
设置--skip跳过指定参数扫描,和-p作用相反,它用来跳过需要扫描的参数。如果不想扫描HTTP头的Referfer和HOST参数
sqlmap -u "http://test.dvwa.com/vulnerabilities/sqli/?id=1&Submit=Submit#" --skip "Referfer,HOST"
-
设置--param-exclude不对包含具体内容参数的请求进行探测,如不对包含token和session参数的请求进行探测
sqlmap -u "http://test.dvwa.com/vulnerabilities/sqli/?id=1&Submit=Submit#" --param-exclude="token,session"
设置--skip-static扫描时忽略非动态参数
-
指定URI位置进行注入
当注入点在URI上时,除非手动将注入点指向URI上,否则Sqlmap不会对URI路径执行任何自动测试,必须要在扫描时在URI上加星号(*)来指定这些注入点
sqlmap -u "http://test.dvwa.com/vulnerabilities/sqli*/?id=1&Submit=Submit#"