首页>文档>sqlmap>sqlmap自定义检测阶段

sqlmap自定义检测阶段

一、检测级别

参数 –level

该参数用来指定要执行的测试级别。有1-5五个级别,默认级别为1,级别越高将对更多的payload和边界进行测试。

sqlmap使用的payload在xml/payloads.xml文件中指定。按照文件顶部的说明,如果sqlmap错过了一次注入,你应该也可以添加你自己的payload来进行测试!
打开xml/payloads.xml便可以看到默认的payload。比如:

    <test>
        <title>OR boolean-based blind - WHERE or HAVING clause (Generic comment) (NOT)</title>
        <stype>1</stype>
        <level>4</level>
        <risk>3</risk>
        <clause>1</clause>
        <where>1</where>
        <vector>OR NOT [INFERENCE]</vector>
        <request>
            <payload>OR NOT [RANDNUM]=[RANDNUM]</payload>
            <comment>[GENERIC_SQL_COMMENT]</comment>
        </request>
        <response>
            <comparison>OR NOT [RANDNUM]=[RANDNUM1]</comparison>
        </response>
    </test>

可以看到上述检测时bool盲注的payload,在lever等于4的时候使用。

此选项不仅会影响payload,还会影响注入点:任何级别都会测试GET和POST参数,大于等于级别2时测试HTTP Cookie标头值,大于等于3级时测试HTTP User-Agent / Referer头的值。

总而言之,检测SQL注入越困难,–level必须设置的越高,建议在无法检测到某个注入点时将此值提高。

二、风险级别

参数 –risk

该参数用于指定测试执行的风险,有三个风险值。默认值是1,这对大多数SQL注入点无害。风险值2添加了大量基于时间盲注的检测。风险值3增加了基于OR的盲注测试。

在某些update情况下,基于OR注入可能会导致数据库表的更新,这当然不是攻击者想要的,通过这个参数我们可以控制测试哪些payload。

三、页面对比

参数 –string,–not-string,–regexp和–code

默认情况下,sqlmap判断true还是false的方法是比较注入的请求页面内容与原始未注入页面内容。但是这个方法并不总是有效,因为有的页面只要刷新就会发生变化,即使你没有注入任何payload,比如页面中含有动态广告。遇到这样的情况,slqmap会尽力判断响应体的片段并处理。

但是sqlmap于是并不能正确处理,我们可以用--string参数提供一个字符串,该字符串存在于ture页面中,而不在false页面中,也可以使用--regexp参数指定一个正则表达式而不是字符串。使用--not-string参数可以指定一个字符串,该字符串只存在于false页面中

这些数据对我们来说很容易获取,指定一个错误的测试参数来返回false页面,然后比较ture页面赫尔false页面,查找出一个字符串或者正则表达式即可。

如果我们知道ture和false的http状态码不同(例如ture的状态码为200,false为401),我们还可以使用--code参数将其提供给sqlmap,例如--code=200

如果我们知道ture和false页面的标题存在不同,例如ture的标题为hello,flase的标题为hello,world,我们可以使用参数--titles将其提供给sqlmap。

在HTTP响应正文中包含大量其他内容(例如js脚本)的情况下,我们可以使用开关--text-only来让slqmap只关注text文件。

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索