BugkuCTF–flag在index里

题目地址http://120.24.86.145:8005/post/

这道题目里有经典的本地文件包含漏洞+php伪协议的结合应用

点击后

注意到url地址  http://120.24.86.145:8005/post/index.php?file=show.php

这是一个典型的文件包含漏洞,(file关键字是提示,其实也是CTF的套路)。

这里用到了php的封装协议:http://php.net/manual/zh/wrappers.php.php

具体怎么用呢,先说结果:

http://120.24.86.145:8005/post/index.php?file=php://filter/read=convert.base64-encode/resource=index.php

然后将得到的字符串base64解码得到index的源码:


现在具体说说file=php://filter/read=convert.base64-encode/resource=index.php的含义

首先这是一个file关键字的get参数传递,php://是一种协议名称,php://filter/是一种访问本地文件的协议,/read=convert.base64-encode/表示读取的方式是base64编码后,resource=index.php表示目标文件为index.php。

通过传递这个参数可以得到index.php的源码,下面说说为什么,看到源码中的include函数,这个表示从外部引入php文件并执行,如果执行不成功,就返回文件的源码。

而include的内容是由用户控制的,所以通过我们传递的file参数,是include()函数引入了index.php的base64编码格式,因为是base64编码格式,所以执行不成功,返回源码,所以我们得到了源码的base64格式,解码即可。

如果不进行base64编码传入,就会直接执行,而flag的信息在注释中,是得不到的。

 

我们再看一下源码中 存在对 ../ tp data input 的过滤,其实这都是php://协议中的其他方法,都可以结合文件包含漏洞执行,具体可以百度一下,或者参考我的博客。

 

转载指明出处


猜你喜欢

转载自blog.csdn.net/zpy1998zpy/article/details/80585443