小洛神 發表於 2014-7-29 10:15:13

Sqlmap注入技巧集锦

<p><font style="BACKGROUND-COLOR: #c0c0c0"><div class="arc_down"><img src="https://img.jbzj.com/do/uploads/litimg/121016/21552012321.gif"><p class="arc_down_title">sqlmap 一个自动SQL 射入工具(sqlmap.py)汉化直接可用版</p><ul><li><span>类型:</span>扫瞄攻击</li><li><span>大小:</span>14MB</li><li><span>语言:</span>英文软件</li><li><span>时间:</span>2015-01-04</li></ul>查看详情</div></font></p>
<p><font style="BACKGROUND-COLOR: #c0c0c0">TIP1</font></p>
<p>当我们注射的时候,判断注入</p>
<p>http://site/script?id=10 http://site/script?id=11-1 # 相当于 id=10</p>
<p>http://site/script?id=(select 10) # 相当于 id=10</p>
<p>http://site/script?id=10 and 1=1 #失败</p>
<p>通过判断可发现and和or被过滤</p>
<p>http://site/script?id=10&ndash; # 失败</p>
<p>http://site/script?id=10;&ndash; #失败</p>
<p>http://site/script?id=10);&ndash; #失败</p>
<p>http://site/script?id=10)subquery;&ndash; #失败</p>
<p>你可以用burp的intruder的字典跑,但是仍然失败。</p>
<p>这里可以用到SQL语句的case when &hellip;then &hellip; else &hellip; end语句</p>
<p>CASE WHEN语句在DB2,ORACLE,SQL SERVER系列,SYBASE等大型数据库都受到支持,是标准的SQL语句。 可以这样子理解:CASE&hellip; WHEN&hellip; THEN &hellip;ELSE &hellip;END</p>
<p>CASE WHEN 语法有两种情况: 第一种是CASE 后面不带表达式的;</p>
<p>CASE WHEN expression THEN 操作1<br />WHEN expression THEN 操作2<br />.......<br />ELSE 操作n<br />END</p>
<p>第二种是CASE 后面带表达式的(而此时WHEN 后面的则是该表达式可能的值),通用。</p>
<p>CASE expression<br />WHEN expression值1 THEN 操作1<br />WHEN expression值2 THEN 操作2<br />.......<br />ELSE 操作n<br />END</p>
<p>http://host/script?id=11-(case when 1=1 then 1 else 0 end) 用1=1跟1=2测试http://host/script?id=10 # 当条件为真的时候 http://host/script?id=11 # 当条件为假的时候</p>
<p>可以很明显的看到返回不同,然后可以判断注入。那么怎么能让sqlmap去识别呢? Sqlmap默认是自己寻找注入点的,但是你加上一个*,可以引导他。 语句</p>
<p>sqlmap.py -u http://host/script?id=11-(case when 1=1星号 then 1)<br />&nbsp;</p>
<p>注入最头痛的就是遇到过滤,sqlmap提供了字符转换的功能</p>
<p>&ldquo;&ndash;tamper=between&rdquo;当然自己可以改写转换内容,文件在/tamper目录下。</p>
<p>关于post注入 sqlmap可以用-r参数 加载数据包</p>
<p>sqlmap.py -r post.txt<br />&nbsp;<br />继续补充一点: having xor等逻辑符号也可以判断注入。</p>
<p><font style="BACKGROUND-COLOR: #c0c0c0">TIP2</font></p>
<p>POST注入</p>
<p>有两种方法来进行post注入,一种是使用</p>
<p>&ndash;data<br />参数,将post的key和value用类似GET方式来提交。二是使用</p>
<p>-r<br />参数,sqlmap读取用户抓到的POST请求包,来进行POST注入检测。</p>
<p>查看payload</p>
<p>之前一直是加本地代理,然后用burpsuit来看sqlmap的payload,到现在才发现用</p>
<p>-v<br />参数就可以实现。一直认为</p>
<p>-v<br />实现的只是控制警告,debug信息级别。实际上使用</p>
<p>-v 3<br />就可以显示注入的payload,4,5,6还可以显示HTTP请求,HTTP响应头和页面。</p>
<p>使用google搜索</p>
<p>sqlmap可以测试google搜索结果中的sql注入,很强大的功能吧。使用方法是参数</p>
<p>-g<br />。不过感觉实际使用中这个用的还是很少的。</p>
<p>请求延时</p>
<p>在注入过程中请求太频繁的话可能会被防火墙拦截,这时候</p>
<p>&ndash;delay<br />参数就起作用了。可以设定两次HTTP请求间的延时。有的web程序会在多次错误访问后屏蔽所有请求,这样就导致之后所有的测试无法进行,绕过这个策略可以使用</p>
<p>&ndash;safe-url<br />,每隔一段时间去访问一个正常的页面。</p>
<p>伪静态页面</p>
<p>有些web服务器进行了url rewrite或者网站是伪静态的,无法直接提供测试参数,这样子可以使用</p>
<p>*<br />来代替要测试的参数。</p>
<p>执行系统命令</p>
<p>当数据库支持,并且当前用户有权限的时候,可以执行系统命令,使用</p>
<p>&ndash;os-cmd<br />或者</p>
<p>&ndash;os-shell<br />,具体的讲,当可以执行多语句的时候,会尝试用UDF(MySQL,PostgrepSQL)或者xp_cmdshell(MSSQL)来执行系统命令。不能执行多语句时,仍然会尝试创建一个webshell来执行语句,这时候就需要web的绝对路径了。总体来说,成功率偏低,不过个人也有成功的经验~</p>
<p>测试等级</p>
<p>sqlmap使用</p>
<p>&ndash;level<br />参数来进行不同全面性的测试,默认为1,不同的参数影响了使用哪些payload,2时会进行cookie注入检测,3时会进行</p>
<p>useragent<br />检测。</p>
<p><font style="BACKGROUND-COLOR: #c0c0c0">TIP3</font></p>
<p>SQLMAP 项目官方WIKI(详尽) 地址</p>
<p>相关文章链接《Sqlmap Tamper大全(1)》《SqlMap用户手册》</p>
頁: [1]
查看完整版本: Sqlmap注入技巧集锦