以下参数可用于调整SQL注入技术。
3.7.1 SQL注入测试技术
参数 –technique
使用该参数可以指定sql注入测试技术,默认情况下,sqlmap会尝试所有类型的注入。
参数后面跟一个大写字母,有B,E,U,S,T和Q,每个字母代表一种注入技术:
- B: Boolean-based blind,基于bool的盲注
- E: Error-based,基于报错的注入
- U: Union query-based,联合查询注入
- S: Stacked queries,堆查询注入
- T: Time-based blind,基于时间的盲注
- Q: Inline queries,嵌套查询注入
如果你想要仅基于报错注入和堆栈的查询注入,可以指定–technique SE
。
注意:当你想要访问文件系统,控制操作系统或访问windows注册表时,注入技术必须包含堆查询注入,即-S
。
3.7.2 指定基于时间盲注的延迟时间
参数 –time-sec
在测试基于时间的盲注时,可以设置延迟响应的秒数,方法是使用--time-sec
,后跟一个整数。默认情况下是5秒。
3.7.3 指定联合查询注入中列数
参数 –union-cols
默认情况下,sqlmap会针对使用1到10列的UNION查询技术进行测试。但是,通过提供更高的–level值,该范围可以增加到50列。
你可以通过参数 --union-cols
后跟整数范围来指定测试的列范围。例如,12-16意味着使用12到16列的UNION查询注入技术。
3.7.4 指定联合查询注入的字符
参数 –union-char
默认情况下,sqlmap在UNION联合查询注入中使用的是NULL字符,指定更高的level值,sqlmap将使用随机数执行测试,因为在某些情况下使用NULL字符测试失败,而使用随机整数成功。
你可以通过使用--union-char
选项(例如–union-char 123)手动告诉sqlmap使用的字符。
例如一个union联合查询的payload是
Payload: type_id=129 UNION ALL SELECT NULL,NULL,NULL,NULL,CONCAT(0x717a7a7171,0x637a73474b77574b4b76556274626c5051726a556d674368716948575979417750496867686b4562,0x7170767871),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL-- bnBy
当我们指定–union-char’001′,payloadj就会变成
Payload: type_id=129 UNION ALL SELECT 001,001,001,001,CONCAT(0x717a7a7171,0x637a73474b77574b4b76556274626c5051726a556d674368716948575979417750496867686b4562,0x7170767871),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL-- bnBy
3.7.5 联合查询注入中表名
参数 –union-from
在一些联合查询注入中,需要在FROM字段提供有效的表名(例如–union-from=users),例如,Microsoft Access就需要使用这种表格。如果不提供,SQL注入将无法正确执行。
3.7.6 DNS漏洞攻击
参数 –dns-domain
关于SQL注入中的DNS漏洞攻击可参考Data Retrieval over DNS in SQL Injection Attacks,关于它在sqlmap里面的实现可参考DNS exfiltration using sqlmap
如果用户控制了目标url的DNS服务器(例如attacker.com),则可以使用此选项(例如–dns-domain attacker.com)启用此攻击。它工作的先决条件是运行带有Administrator权限的sqlmap (使用特权端口53),这样做的唯一目的就是加速数据检索过程。
3.7.7 二阶攻击
参数 –second-order
二阶攻击一般发生于一个易攻击页面中的有效payload的在另一个页面上显示。通常发生这种情况的原因是数据库存储用户在原页面上提供的输入。
你可以通过使用--second-order
后接一个URL地址,来手动告诉sqlmap以测试此类SQL注入。