前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >工具 | sqlmap系列(三)进阶篇

工具 | sqlmap系列(三)进阶篇

作者头像
漏斗社区
发布2018-03-28 14:10:27
5.9K1
发布2018-03-28 14:10:27
举报
文章被收录于专栏:漏斗社区漏斗社区

SQLMAP系列(二)介绍了sqlmap的基本注入流程,登陆注入和POST注入以及一个小技巧,本期斗哥将带来sqlmap的进阶使用,希望通过本期的学习能够帮助大家熟练使用sqlmap。

一. 指定sqlmap的探测技术

默认的情况下,sqlmap会选择所有的探测技术来进行探测,如下图,是使用sqlmap得出了当前的注入点有4种。

在sqlmap可以选择如下命令选择一种探测技术:

--technique=TECH SQL injection techniques to use (default "BEUSTQ")

TECH的值可以是"BEUSTQ"中的一种。

B: Boolean-based blind SQL injection(布尔型注入)

E: Error-based SQL injection(报错型注入)

U: UNION query SQL injection(可联合查询注入)

S: Stacked queries SQL injection(可多语句查询注入)

T: Time-based blind SQL injection(基于时间延迟注入)

二. 指定注入参数

默认的情况下,sqlmap会默认测试所有GET和POST。我们可以使用-p来指定想要测试的参数,甚至可以是HTTP cookie头的值,或者是User-Agent等参数,如:

sqlmap -u "url" -p "id,user-anget"

三. 设置代理

设置代理有2个好处:

1.方便测试某些网站(如国外的站)

2.代理关联上Burp,方便我们学习sqlmap的发包规则

如关联上burp代理:

sqlmap -u "url" --proxy="http://127.0.0.1:8080"

设置好burp,可以在代理界面看到sqlmap发送的数据包,sqlmap的请求包User-Agent字段默认值为:sqlmap/1.1.6.15#dev (http://sqlmap.org)

四. 三种级别:详细程度/探测/风险

详细程度级别:指注入时sqlmap的界面显示的内容的详细程度,级别程度为0-6,默认为1,指定参数用-v来表示。

sqlmap -u "url" -v 级别

详细等级介绍:

0:只显示python错误以及严重的信息。

1:同时显示基本信息和警告信息。(默认)

2:同时显示debug信息。

3:同时显示注入的payload。

4:同时显示HTTP请求。

5:同时显示HTTP响应头。

6:同时显示HTTP响应页面。

探测等级:指注入的payload语句的复杂程度,级别为1-5,默认为1。

sqlmap -u "url" --level=LEVEL

1.使用哪些payload也影响注入点的选择。

2.GET/POST都会测试,level 2时,会测试cookie,level 3时,会测试User-Agent和Referer。

建议:确定使用那个payload和那个参数作为注入点时,为了保证全面性,建议使用高的level值。

风险等级:指是否要使用具有不同级别风险的测试语句,级别为1-3,默认为1。

sqlmap -u "url" --risk=RISK

默认是1会测试大部分的测试语句,2会增加基于事件的测试语句,3会增加OR语句的QL注入测试。在有些时候,例如在UPDATE的语句中,注入一个OR的测试语句,可能导致更新的整个表,可能造成很大的风险。

五. 跳过某些参数

01.跳过注入参数

比如使用了很大的level等级,但是有些参数并不需要测试,就可以使用--skip参数。如:

--skip="user-angetn.referer"

02.跳过URL编码

注入的测试语句不经过url编码发送到服务器上。

--skip-urlencode

03.绕过URL重写规则

在有些时候web服务器使用了URL重写,导致无法直接使用sqlmap测试参数,如:http://xxxxx/info/1018/2347.html,这种格式的网址。在想测试的参数后面加*

例如:

sqlmap.py -u "http://xxxxx/info/1018*/2347.html"

六. 闭合注入Payload

在有些环境中,需要在注入的payload的前面或者后面加一些字符来闭合符号,以保证payload的正常执行。

如:代码中是这样调用数据库的:

$query = "SELECT * FROM users WHERE id=(’" . $_GET[’id’] . "’) LIMIT 0, 1";

这时你就需要--prefix和--suffix参数了,来进行闭合:

sqlmap.py -u "http://192.168.136.131/sqlmap/mysql/get_str_brackets.php?id=1" -p id --prefix "’)" --suffix "AND (’abc’=’abc"

这样执行的SQL语句变成:

$query = "SELECT * FROM users WHERE id=(’1’) <PAYLOAD> AND (’abc’=’abc’) LIMIT 0, 1";

七. 绕过WAF等设备

sqlmap除了使用CHAR()函数来防止出现单引号之外没有对注入的数据修改,也可以使用--tamper参数对数据做修改来绕过WAF等设备。

--tamper=TAMPER

可以查看 tamper/ 目录下的有哪些可用的脚本。

八. 结合Burp使用

前面已经有讲到一点,使用burp来探索sqlmap的发包规则,下面介绍使用burp来快速建立注入扫描。

1.复制burp拦截的http请求包,保存为1.txt。

sqlmap -r 1.txt

总结

进阶使用就介绍到这里啦。关于sqlmap的使用还有很多没有给大家介绍,上面的几点仍然可以进行拓展。我们会在splmap高级篇里介绍吧。有隐藏才能的小伙伴们,快来微信公众号与斗哥进行互动吧!

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-07-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 漏斗社区 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档