检测

    下面的相关选项可用于自定义检测环节。

    选项:

    使用这个选项需要给出一个参数用于指定即将进行检测的级别。总共有个级别。默认的级别是 1,该级别只会进行简单的检测(请求)。与之不同的是,级别 5 会更详细地对更大范围 payloads 和 boundaries(作为 SQL payload 的前缀和后缀)进行检测。sqlmap 使用的 payloads 直接从文本文件 xml/payloads.xml 中载入。根据该文件顶部的相关指导说明进行设置,如果 sqlmap 漏过了特定的注入,你可以选择自己修改指定的 payload 用于检测。

    这个选项设置不止会影响 sqlmap 使用的 payload,还会影响到相关的测试注入点:总是测试 GET 和 POST 的相关参数,级别大于等于 2 则会测试 HTTP Cookie 头部,级别大于等于 3 则会测试 HTTP UserAgent/Referer 头部值。

    总而言之, 如果 SQL 注入检测的难度越高,则需要设定越高的 --level 值。

    选项:--risk

    这个选项需要给出一个参数用于指定即将进行检测的风险程度。总共有个风险级别。默认的级别是 1,对大多数 SQL 注入点而言是没有任何风险的。风险级别 2 则会在默认的检测上添加大量时间型盲注(Time-based blind)语句测试,级别 3 则会在原基础上添加OR 类型的布尔型盲注(Boolean-based blind)测试。

    在某些场景下,例如对 UPDATE 语句进行 SQL 注入,注入一个 OR 类型的 payload 会导致目标数据表的所有记录进行更新,显然这个不是攻击者想要的结果。针对这个场景及其他相关场景,sqlmap 引入了 --risk 这个选项。通过这个选项:用户可以指定检测特定的 payload,同时用户可任意选择使用可能比较危险的操作。正如上面的选项提及到的,sqlmap 使用的 payloads 是直接在文本文件 xml/payloads.xml 载入的,该文件支持用户自定义编辑添加。

    选线:--string--not-string--regexp

    默认区分一个 True 查询和 False 查询(布尔型盲注背后的相关理念概念)是通过对比注入前后返回的结果页面是否一致进行判断的。

    通过对相关的参数注入非法值并手动对比原页面(未经过注入)和注入结果页面的不同,就可以轻易地得到目标字符串。通过这种方式的定义,页面不同的判定则会是基于用户指定的字符串或者正则表达式的匹配。

    如果用户知道可以通过 HTTP 状态码区分 True 查询和 False 查询(例如:200 对应 ,401 对应 False),那么可以向 sqlmap 提供对应的信息。(例如:--code=200)。

    开关:--text-only--titles

    如果用户知道可以通过 HTML 标题区分 True 查询和 False 查询(例如:Welcome 对应 TrueForbidden 对应 False),那么可以使用 --titles 开启基于标题对比的开关。

    如果 HTTP 响应报文中存在无效信息(例如:脚本、嵌套元素等),可以通过过滤页面的内容(开关 )而只获取文本内容。通过这种方式,大多数情况下,这样会自动调优检测引擎。