一个关于file_get_content()插入数据的小姿势

今天在jarvisoj上做到一道题用到了一个没有见过的姿势,记录一下。

原题链接

0x00 解题过程

点进去看到index.php

有一个参数id,随意试了一下,无果,于是抓包看看(其实这里应该看源码,反正做出来了就无所谓了吧)。

果然在返回中看到提示:

访问之,得到一段源码,下面是魔改后的源码:

只要显示出1 ok,2 ok,3 ok这个就算成功绕过了,$id$b比较好绕,最麻烦的就是这个$a

学习了一波后发现两种绕法,一种是:

另一种如图所示:

(关于这两种绕法的说明见下一节)

然后拿到一个不知道是什么玩意儿的东西。。。很头大,很久才反应出这TM居然是一个目录,于是访问url:

明摆着是注入,尝试后发现:

1、过滤了小写的select、union,于是使用大写的SELECT,UNION绕过

2、过滤了空格和加号、/**/、%0a、%20等等好几个空格的绕过姿势,百密一疏,最后使用%0b成功绕过

开始构造注入语句,先测试出字段数为3时不报错:

网页返回:

测试显示位,测试得显示位为第二行的第三列:

网页返回:

查找表名:

这里表名是content,sql执行失败会返回整个sql语句

网页返回:

尝试后锁定context字段:

获得flag

PCTF{Fin4lly_U_got_i7_C0ngRatulation5}

0x01 小姿势

第一种绕过:利用data协议

参考文章:http://blog.csdn.net/lxgwm2008/article/details/38437875

使用示例里面全部都有

利用url可以直接插入以下几几种类型的小数据:

所以我们可以使用这种操作绕过

第二种绕过:利用php协议读取post数据。

参考文章:官方文档

测试代码:

payload:

可以看到测试成功

总结:

1、在存在file_get_contents()函数时利用data协议可以给变量赋值

2、在存在file_get_contents()函数时利用php://input可以读取post内容给变量赋值

Leave a Reply

Your email address will not be published. Required fields are marked *