sqlmap平时使用得非常的多,但命令也是十分的多。每次用的时候,都要去网上搜索。于是决定自己总结一下sqlmap常见的用法,方便自己使用。
特殊参数
-v
-v表示显示sqlmap在进行注入时的详细信息,一共有七个等级,默认为1
- 0,只显示python错误以及严重的信息
- 1,同时显示基本信息和警告信息
- 2,同时显示debug信息
- 3,同时显示注入的payload
- 4,同时显示HTTP请求
- 5,同时显示HTTP响应头
- 6,同时显示HTTP响应页面
–level
默认情况下SQLMAP只支持GET/POST参数的注入测试,但是当使用–level参数且数值>=2的时候会进行cookie注入测试;当>=3时,会进行User-Agent和Referer的注入测试。
–risk
risk设定风险等级,默认是1会测试大部分的测试语句,2会增加基于事件的测试语句,3会增加OR测试语句。
-f或者–fingerprint
执行检查广泛的DBMS版本指纹,这个参数用得不多。
获取URL
-u或者–url
-u是最常见、常用的用法1
python sqlmap.py -u "http://www.example.com/index.php?id=1"
-l
从burpsuite或者WebScarab代理日志中去测试每个URL是否存在SQL注入
-r
从文本文件中获取HTTP请求(这就要求此文本文件保存的信息是HTTP请求的),这样HTTP就可以利用HTTP请求中的参数。
例如文本文件中的内容为:1
2
3
4
5POST /index.php HTTP/1.1
Hos: www.example.com
User-Agent: Mozilla/4.0
id=1
那么使用sqlmap进行注入时,sqlmap自动将HOST和User-Agent设置为文本文件中的值
当处理的请求是HTTPS的时候,则需要使用–forc-ssl参数来使用,或者在HOST头后面加上:443
。
请求
POST请求
参数:–data
–data主要适用于POST方式提交。用法如下:1
python sqlmap.py -u "http://www.example.com/index.php" --data="id=1"
cookie相关
参数:-cookie,–load-cookies,–drops-set-cookie
cookie参数在sqlmap中的应用主要是有2个方面:
- Web应用需要进行登陆的时候
- 测试cookie注入
如果需要使用cookie进行登陆,则需要通过–cookie将cookie进行赋值。在HTTP请求中,遇到Set-cookie时,sqlmap会自动获取并且在以后的请求中加入,并且会尝试SQL注入。
当–level>=2时,则会尝试进行cookie的注入测试。
User-Agent相关
参数:–user-agent,–random-agent
默认情况下sqlmap的HTTP请求头中的User-Agent是:1
sqlmap/1.0-dev-xxxxxxx (http://sqlmap.org)
可以使用–user-agent参数来进行修改,同时也可以使用–random-agent参数来随机化的从./txt/user-agents.txt中获取。
当–level参数设定为3或者是3以上时,会尝试对User-Agent进行注入测试。
Referer头
参数:–referer
sqlmap可以在请求中伪造HTTP中的referer,用法与user-agent的用法相同。当–level参数设定为3或者3以上的时候会尝试对referer注入。
请求设置
设定请求间隔
参数:–delay
设定两次请求间的时间间隔。若设定为0.5则表示间隔时间是半秒,默认是没有延迟
设定超时时间
参数:–tiemout
设定超时时间,主要是设定一个请求超过多久被判定为超市。弱设定为10.5表示是10.5秒,默认是30秒。
设定超时重试
参数:–retries
当请求超时时,设定重新尝试连接次数,默认是3次。
关掉URL参数编码
参数:–skip-urlencode
关闭URL编码,这个参数一般用得比较少。目前几乎所有的web服务器都支持RFC标准。
执行自定义Python代码
参数:–eval
在有些时候,需要根据一个参数的变化而修改另一个参数,才能形成正常的请求。此时就需要使用到--eval
。例子如下1
python sqlmap.py -u "http://www.example.com?id=1&hash=c4ca4238a0b923820dcc509a6f75849b" --eval="import hashlib;hash=hashlib.md5(id).hexdigest()"
上面的请求参数中的hash值就是id值的md5,这时就需要使用到自定义Python代码了。
注入
测试参数
参数:-p,–skip
-p,表示的就是需要进行注入测试的参数。例如,-p “id,user-agent”
–skip,表示不不需要进行测试的参数,例如–skip=”user-agent”
伪静态注入
很多框架会使用URL重写技术,此时sqlmap就无法使用参数注入,但是可以在需要测试的参数后面加上*
例子如下1
python sqlmap.py -u "http://blog.spoock.com/2016/09/04*/sqli-bypass/"
绕WAF
参数:–tamper
很多时候有WAF设备会拦截sqlmap的注入,此时就需要使用--tamper
对注入的SQL语句进行变形来进行绕过。所有的tamper脚本都是在sqlmap中的tamper中的脚本有定义的,可以进入到tamper目录下进行查看。1
python sqlmap.py - u"http://www.example.com?id=1" --tamper tamper/between.py,tamper/randomcase.py
提取数据
标志
参数:-b,–banner
检索数据库管理系统的标识
用户
参数:–current-user
返回当前数据库的管理用户
当前数据库
参数:–current-db
返回当前连接的数据库
DBA检测
参数:–is-dba
检测当前的管理用户是否是DBA
数据库枚举
参数:–dbs
如果当前的用户可以读取所有的数据库的信息,即可列出所有的数据库
数据库表枚举
参数:–tables -D someDatabase
列出某个数据库(someDatabase)中所有的表名,例子如下:1
python sqlmap.py -u "http://www.example.com?id=1" --tables -D cms
字段枚举
参数:–columns -D someDatabase -T someTable
列出someDatabase数据库中的someTable表中的所有的字段信息。如果没有使用-D
参数指定某个数据库的时候,则默认使用当前数据库1
Python sqlamp.py -u "http://www.example.com?id=1" --columns -D cms -T users
获取表中数据的数目
参数:–count
使用–count就可以获取表中数据的个数1
python sqlmap.py -u"http://www.example.com?id=1" --count -D cms
上述的sqlmap的语句会列出在cms数据库中所有的表的数据
下载表中的数据
参数:–dump -D someDatabase -T someTable -C someColumns
使用–dump就可以将某个表中的数据下载到本地。指定-C的值表示是下载某一列所有的数据,如果没有指定则是下载表中所有的数据。1
python sqlmap.py -u "http://www.example.com?id=1" --dump -D cms - T users
MISC
自定义SQL语句
参数:–sql-query,–sql-shell
虽然sqlmap会自行选择sql语句进行测试,但是也可以选择执行自定义的SQL语句。1
python sqlmap.py -u"http://www.example.com?id=1" --sql-query "select database()"
获取shell
参数:–os-cmd,–os-shell
使用–os-shell参数可以模拟一个真实的shell,在此shell上可以输入任何想执行的命令。
这个命令平时使用得较少,等有一定的使用体会再来进行详细的补充说明。
参考
sqlmap学习视频:https://www.youtube.com/user/inquisb/videos
sql中文参数说明:http://blog.csdn.net/ghosttzs/article/details/7362359
sql进阶使用:http://www.evil0x.com/posts/11377.html
sqlmap使用手册:http://drops.cnbraid.com/index.php/drops/view_drops/492