最近来了个新人妹纸小小,大家总是色眯眯盯着她,搞得阿布一阵无语,对于妹纸,阿布早就看淡了,他说这些都是要看缘分的,缘分到了,啪啪啪自然就到了,所以阿布自然不会像他们一样围上去跟妹汁套近乎,只是在工位上继续探究如何搞定上面给的任务。
 “听说你叫阿布?你好,我叫小小,很高兴认识你。”,在阿布在思考的时候小小突然走过来伸出手微笑着对阿布说道,这不是职场那种做戏的笑,是出自内心最真挚的笑,可能是因为刚从学校毕业的缘故,那份笑容很纯真。看到小小,阿布也只是礼貌性的跟小小握了握手,:“你好,我是阿布,欢迎来到这里。”,也许是因为曾经那段往事,让阿布从此多了一份宠辱不惊。
 清新的空气总是在雨后,美丽的爱情总是在不经意间就出现。“阿布,上面说有什么不懂的就来问你呢。你能不能教教我怎么用SQLmap吖?我发现自己用的总是没有别人好,别人那些人挖洞怎么这么厉害呢?”,“哦,好的。你有翻看过《SQLMap用户手册》了的吧?一定要好好看看,我下面给你讲一下心得吧。”虽说阿布也很久没有用这个工具了,不过还是教了小小。

一、提高SQLMap测试等级

--risk 3
这个参数就是把测试等级提高到最高,这样SQLMap会测试更加多的注入语句。
举个栗子
没有加--risk 3的情况下,SQLMap 就测试
5hoanqu' and 789=789 and 'hcme'='hcme,但是如果加了--risk 3参数,就会增加测试语句,5hoanqu') and 789=789 and ('hcme'='hcme,对比起来,虽然只是加了2个字符,但是意义却相差很多了的哦。

二、增加被测试的参数

--level 3
假设存在注入的URL为:http://google.com/new.php?nid=5haoanqu,在GET请求中,我们目前看得到的参数就一个:nid.但是当我们访问过一个网站之后,我们都会得到一个cookie,当我们继续访问网站的时候,浏览器就会加载我们的cookie,又因为cookie存在我们本地,我们又是可以控制这个cookie的,所以我们就可以在cookie上面加入我们注入测试语句。而像User-Agent头也是一样的,具体你可以看看以下文章:

https://www.oschina.net/question/243681_48522 通过HTTP Headers 进行SQL注入
http://wps2015.org/2014/09/10/sql-injection-in-http-headers/ HTTP请求头信息的注入
http://www.91ri.org/4714.html 利用SQLMap进行cookie注入

三、找到整正的请求页面

通常情况下我们直接在浏览器看到的URL上面的参数就是被带入数据库查询的参数,但是事实上并不是全部的东西都如我们眼睛看到的样子。
实战栗子
阿布前些日子在对某机构的渗透测试时,发现其中一个站点有个搜索框,他带着怀疑在搜索框中加入了个'号(英文状态下的单引号),并点击了“搜索”按钮,发现并没有什么异常,通过爬行也没有发现其他带有参数的页面,通过在网址后面加上/admin,来到了后台,并且测试了该后台是否存在注入或者bypass,但是最后无果。

然而在后台页面有一传送门,是传送刀另外一个网站的,估计是该网站系统的开发者的网站,点过去之后,阿布看到了与目标网站类似的布局,搜索框的地方和底色都一样,认为是同一套网站系统的可能行非常大,在加了一个'号之后就出现了MSSQL的报错。既然报错了,那么此为注入点的可能性就增加了许多,却不能定为诸如点,阿布通过用SQLMap的进行注入测试后,发现该处确实是存在POST的Boolean-based blind SQL injection,也就是传说中的布尔型(布尔值)盲注。那么这个网站都是存在注入的,目标站点正常来说也是存在注入的,当然不排除目标站点的管理员修改过了网站源码,修补了搜索框处的注入。

阿布通过手工判断,确定目标站点也是存在注入的,就想SQLmap代替人工注入,遂把URL复制到SQLMap上面,语句为:sqlmap -u "http://www.google.com/search.aspx?sid=1*&page=1",然而无论如何SQLMap都识别不出来这个sid参数是有问题的。阿布再次进行手工判断,通过两次浏览器页面是大不相同的,以此判断还是确定为注入。那么既然SQLMap判断不出来,阿布就人为的添加一个字符串,在正常的页面找一个错误页面没的字符串,用SQLmap的--string xxxx参数,这个可以让SQLMap识别判断出哪个是正常页面,哪个是非常正常页面。然而在找这个特征字符串时发现,无论是正常的页面还是非正常的页面,HTML代码大小都是一样的,除开一些时间上面变化外,并没有发现浏览器看到的字符串,此时就明白了为什么SQLMap识别不出来,因为无论是正常页面还是非正常页面,HTML都是一样的,SQLMap是肯定判断不出来的。这个的发现是非常有利的,既然工具判断不出来,那我们我们就手工注入吧?可阿布坦言:“我实在是做不到向Silic的大牛那样,可以两天一夜的手工注入一个网站”。“哇,Silic的人这么厉害!两天一夜连续手工注入一个网站,是铁打 的嘛!” 小小简直不敢相信自己的耳朵。
那就用Burp suite抓包看看情况先吧:
1. 在搜索框填入1
2. 设置好浏览器代理为burp suite的端口 (不会使用burp suite的请自行找资料哦)
3. 点击“搜索”按钮后,burp suite拦截到了包,这包是的请求包,
4. 我们点击“Forward”把拦截到的包放行后,收到了“Response”的返回包。
5. 网站在接收到这个“Response”之后又会继续发送一个请求包,我们拦截到之后,看到是GET的,继续放行。
6. 当网站再次接收到“Response”之后,又一次发起请求,用Burp suite拦截到之后看到是POST的请求。
7. 当看到是POST的请求之后,我们就先把包发送到Burp suite的“Repeater”标签,然后点击“forward”。
8. 点击“Forward”之后网站又发起了一次请求,依然是POST请求,我们依然按照步骤7一样操作。

以上截取到POST请求之后就发送到“Repeater”标签是为了记录该请求,以便我们对那个请求进行修改。
如下图:

 

 

 

 

注意点:
1. 我们在填写搜索关键词的时候,一定要找出那些能够搜索出内容的关键词,比如你在实战中搜索dark5,但是网站没有关于dark5的文章内容,就不会出现正常的搜索结果,这样我们把注入语句加在dark5的后面时,是没有办法判断我们的SQL语句是否成功执行,就没有办法达到我们想要的结果了。
2. 有些网站不一定存在这么多个GET或者POST的请求包的,比如某个网站,你填写好搜索关键词后,就先请求一个GET再请求一个POST包就完事了,但是大多数情况是要么请求一个GET,要么请求一个POST包。主要是看网站是否采用ajax。

那么阿言这个网站的注入点就是第3个的POST和第4个的POST请求,因为从这个2个“Response”就能反应出SQL语句执行的结果。
如下图:

 

 

可以清晰看到我们在填入:2') AND 1=1 AND ('dark5' LIKE 'dark52') AND 1=21 AND ('dark5' LIKE 'dark5后,两次返回的页面的长度相差非常大,这样我们基本就可以判断这个页面是存在注入的,这是在第3个POST请求包填入的注入语句,实战时为了更加确定注入的情况,我们还可以在第4个请求包中填入注入测试语句哦。
最后:这种点的注入,很多情况都是布尔型盲注或者延时盲注(基于时间的盲注)。

四、增加--prefix,--suffix参数

这个参数的实例讲解后面遇到实际案例再增加。

“这就是SQLMap在实际情况中要注意的使用点了,你自己以后要多加细心,最好配合浏览器的抓包工具或者配合Burp suite来审计网站的请求。这样能够更加清晰明了地看出网站做出的每一个动作,还有就是把《SQLMap手册》认认真真仔仔细细学习一遍,这是手册链接:http://www.cnblogs.com/hongfei/p/3872156.html。”“嗯,谢谢阿言哥!”

发表评论

电子邮件地址不会被公开。 必填项已用*标注