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

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高级篇里介绍吧。有隐藏才能的小伙伴们,快来微信公众号与斗哥进行互动吧!

原文发布于微信公众号 - 漏斗社区(newdooneSec)

原文发表时间:2017-07-14

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏数据库

游戏用户中心开发

用户中心最主要的功能就是管理用户的注册和登陆,登陆成功之后生成对应的token,并负责token的验证。当一个用户注册或登陆成功之后,它的信息会在用户中心服务中...

21080
来自专栏架构师之路

InnoDB并发如此高,原因竟然在这?

《InnoDB行锁,如何锁住一条不存在的记录?》埋了一个坑,没想到评论反响剧烈,大家都希望深挖下去。原计划写写InnoDB的锁结束这个case,既然呼声这么高,...

17630
来自专栏杨建荣的学习笔记

MySQL 8.0初体验

从决定安装MySQL 8.0到开始行动,也就不到一个小时的时间,一个小时的时间能干些啥呢,来简单体验下8.0,官网上能看到这个丰富的表情包。

16640
来自专栏性能与架构

Mysql 正式发布高可用方案 InnoDB Cluster

1. 简介 前几天 Mysql 团队愉快的发布了 InnoDB Cluster 的 GA(General Availability 正式发布) 版本 InnoD...

33040
来自专栏做全栈攻城狮

Python教程:连接数据库,对数据进行增删改查操作

本文章内容是基于上次课程Python教程:操作数据库,MySql的安装详解和python基础知识之上进行的。如想学习python基础请移步:Python开发实战...

14120
来自专栏流浪猫的golang

go 数据库框架xorm 的使用

golang 连接mysql 的博客可以看我前面的文章。这片文章主要讲xorm,我试过golang 的orm 框架 有beego自带的数据库orm框架htt...

41810
来自专栏idba

MySQL常见slave延迟原因以及解决方法

一 序言 在运维线上M-M 架构的MySQL数据库时,接收的比较多关于主备延时的报警:

14630
来自专栏文渊之博

SQL Server中的锁的简单学习

简介     在SQL Server中,每一个查询都会找到最短路径实现自己的目标。如果数据库只接受一个连接一次只执行一个查询。那么查询当然是要多快好省的完成工作...

29350
来自专栏C/C++基础

ERROR 126 (HY000) at line 1: Incorrect key file for table '/tmp/#sql_7b09_0.MYI'; try to repair it

我在slelect一个数据量很大的merge表时,并同时将select结果集insert到另外一张表中,报了如下错误:

11020
来自专栏Netkiller

数据库进程间通信解决方案之MQ

数据库进程间通信解决方案之MQ 摘要 你是否想过当数据库中的数据发生变化的时候出发某种操作?但因数据无法与其他进程通信(传递信号)让你放弃,而改用每隔一段时间查...

44150

扫码关注云+社区

领取腾讯云代金券