一、sqlmap性能优化
1.1 sqlmap设置持久HTTP连接(长连接)
sqlmap中可以设置连接为持久连接。HTTP报文中设置 connection:keep-alive
命令行:
python sqlmap.py -u "http://127.0.0.1/sqli/Less-1/?id=1" --keep-alive --banner
1.2 sqlmap设置不接收HTTP Body
参数 --null-connection
sqlmap中设置空连接,表示不接受HTTP当中的Body。 可以直接获得HTTP响应的大小而不用获得HTTP响应体,常用在盲注过程中
1.3 sqlmap设置多线程
参数 --thread
sqlmap中设置同时发送多少个HTTP请求的多线程
一键优化
-o 添加此参数相当于同时添加下列三个优化参数
- –keep-alive
- –null-connection
- –threads=3
二、sqlmap自定义检测参数
2.1 sqlmap设置探测等级: --level
- 此参数用于指定检测级别,有1~5共5级。默认为1,表示做最少的检测,相应的,5级表示 做最多的检测
python sqlmap.py -u "http://127.0.0.1/sqli/Less-1/?id=1" --banner --level 2 -v 5
2.2 sqlmap设置风险等级:–risk
- 此参数用于指定风险等级,有1~3共3级。默认风险等级为1,此等级在大多数情况下对测试目标无害。
- 风险等级2添加了基于时间的注入测试,等级3添加了OR测试。
三、sqlmap指定位置注入
3.1 sqlmap设置指定注入参数
- 默认情况下Sqlmap会测试所有GET参数和POST参数,当level大于等于2时会测试cookie参数,
当level大于等于3时会测试User-Agent和Referer。实际上还可以手动指定一个以逗号分隔的、
Referer是跳转的,反爬的
要测试的参数列表,该列表中的参数不受level限制。这就是“-p”的作用 - 如果不想测试某一参数则可以使用 –skip。
3.2 Sqlmap设置URI注入位置
-
当注入点位于URI本身内部时,会出现一些特殊情况。除非手动指向URI路径,否则sqlmap不会对URI路径
-
执行任何自动测试。必须在命令行中添加星号(*)来指定这些注入点。
python sqlmap.py -u "http://127.0.0.1/sqli/Less-1/?id=1*&us=1&uname=admin" --banner
四、sqlmap注入参数
4.1 sqlmap强制设置DBMS
默认情况下sqlmap会自动识别探测目标web应用程序的后端数据库管理系统(DBMS),sqlmap支持 的DBMS种类
- MySQL
- Oracle
- PostgreSQL
- Microsoft SQL Server
- Microsoft Access
- Firebird
- SQLite
- Sybase
- SAP MaxDB
- DB2
可以指定数据库来进行探测
参数 --dbms 数据库类型
python sqlmap.py -u "http://127.0.0.1/sqli/Less-1/?id=1" --dbms mysql --banner
4.2 sqlmap强制设置OS系统
默认情况下sqlmap会自动探测目标web应用程序的后端操作系统,sqlmap完全支持的OS种类Linux、 Windows
参数 --os 系统类型
python sqlmap.py -u "http://127.0.0.1/sqli/Less-1/?id=1" --dbms mysql --os linux --banner
4.3 Sqlmap强制设置无效值替换
参数:–invalid-bignum
在sqlmap需要使原始参数值无效(例如id=13)时,它使用经典的否定(例如id=-13)。
有了这个参数,就可以强制使用大整数值来实现相同的目标(例如id=99999999)。
python sqlmap.py -u "http://127.0.0.1/sqli/Less-1/?id=1" --invalid-bignum --banner
参数:–invalid-logical
有了这个参数,就可以强制使用布尔操作来实现相同的目标(例如id=13 and18=19)。
参数:–invalid-string
有了这个参数,就可以强制使用随机字符串来实现相同的目标(例如id=akewmc)。
五、Sqlmap自定义注入负载位置
在某些情况下,只有当用户提供要附加到注入负载的特定后缀时,易受攻击的参数才可被利用。当用户已经知道查询语法并希望通过直接提供注入有效负载前缀和后缀来检测和利用SQL注入时,这些选项就派上用场了。
-
–prefix 设置SQL注入Payload前缀
-
–suffix 设置SQL注入Payload后缀
$query = "SELECT * FROM users WHERE id=('.$_GET['id'].') LIMIT 0, 1"; .$_GET['id']. ==> ')AND ('abc'='abc python sqlmap.py -u "http://ip/sqlmap/mysql/get_str_brackets.php\ ?id=1" -p id --prefix "')" --suffix " AND ('abc'='abc" $query = "SELECT * FROM users WHERE id=('1') <PAYLOAD> AND ('abc'='abc') LIMIT 0, 1";
六、Sqlmap设置Tamper脚本
sqlmap本身不会混淆发送的有效负载,除了单引号之间的字符串被CHAR()类似的表示形式所取代之外。sqlmap通过Tamper脚本来绕过WAF等防御措施,可以在tamper文件夹下找到所有sqlmap自带的tamper脚本。
python sqlmap.py -u "http://ip/sqlmap/mysql/get_int.php?id=1" --tamper "between.py,randomcase.py,space2comment.py" -v 3
七、Sqlmap设置DBMS认证
设置DBMS认证方式通过以下命令:
--dbms-cred = username:password
python sqlmap.py -u "http://127.0.0.1/sqli/Less-3/?id=1" --dbms-cred = "root:root" --banner
八、sqlmap注入技术参数
8.1 sqlmap设置具体SQL注入技术
参数 --technique
此参数用于指定检测注入时所用技术。默认情况下Sqlmap会使用自己支持的全部技术进行 检测。 此参数后跟表示检测技术的大写字母,其值为B、E、U、S、T或Q,含义如下:
- B:Boolean-based blind(布尔型注入)
- E:Error-based(报错型注入)
- U:Union query-based(可联合查询注入)
- S:Stacked queries(可多语句查询注入)
- T:Time-based blind(基于时间延迟注入)
- Q:Inline queries(嵌套查询注入)
–technique ES指定使用两种检测技术。
“–technique BEUSTQ”与默认情况等效。
8.2 sqlmap设置时间盲注延迟时间
参数:–time-sec
用此参数设置基于时间延迟注入中延时时长,默认为5秒
8.3 sqlmap设置union字段数
-
在进行联合查询注入时,Sqlmap会自动检测列数,范围是1到10。当level值较高时列数检测范 围的上限会扩大到50。
-
可以用此参数指定列数检测范围,如==–union-cols 12-16==就会让Sqlmap的列数检测范围变成 12到16。
python sqlmap.py -u "http://127.0.0.1/sqli/Less-3/?id=1" --technique U --current-db -v 3 --union-cols 12-18
8.4 sqlmap设置union字符
参数:–union-char
默认情况下Sqlmap进行联合查询注入时使用空字符(NULL)。但当level值较高时Sqlmap会生 成随机数用于联合查询注入。 因为有时使用空字符注入会失败而使用随机数会成功。
python sqlmap.py -u "http://127.0.0.1/sqli/Less-3/?id=1" --technique U --current-db -v 3 --union-cols 12-18 --union-char 123
8.5 sqlmap设置union查询表
参数:–union-from
有些情况下在联合查询中必须指定一个有效和可访问的表名,否则联合查询会执行失败
8.6 sqlmap识别指纹
探测目标指纹信息:参数 -f或者–fingerprint
跟 –banner 差不多