题目:
提示:这里简述项目相关背景:
进入题目链接,观察到页面展示了部分源码,为PHP语言,查询得知其中include函数涉及文件包含漏洞
。
随着网站业务的需求,程序开发人员一般希望代码更灵活,所以将被包含的文件设置为变量,用来进行动态调用,但是正是这种灵活性通过动态变量的方式引入需要包含的文件时,用户对这个变量可控而且服务端又没有做合理的校检或者校检被绕过就造成了文件包含漏洞。
include():当使用该函数包含文件时,只有代码执行到include()函数时才将文件包含进来,发生错误时之给出一个警告,然后继续向下执行。
可通过php伪协议进行包含
PHP伪协议
事实上就是PHP支持的协议与封装协议
↓↓
1、File:// -- 访问本地文件系统
2、http:// --访问http(s)网址
3、Phar:// --PHP归档
4、Php:// --访问各个输入/输出流
5、Zlib:// --压缩流
6、Data:// --数据
7、Glob:// --查找匹配的文件路径模式
8、ftp:// --访问ftp(s)URLs
9、ssh2:// --Secure Shell 2
10、rar:// --RAR
11、ogg:// --音频流
12、expect:// --处理交互式的流
通过
php://
包含
Php://伪协议有很多的用法,常用的就是
php://filter --用于读源码
php://input --用于执行php代码
利用
php://input
:此协议需要
allow_url_include
为on,可以访问请求的原始数据的只读流,将post请求中的数据作为PHP代码执行。当传入的参数作为文件名打开时,可以将参数设为php://input,同时post想设置的文件内容,php执行时会将post内容当作文件内容。
问题解决
确认该题为PHP文件包含漏洞后,通过了解可使用代理抓包软件Burpsuit去抓包,并且使用PHP伪协议
中的php://input
来在包的最下面写上<?php system('ls')?>
执行系统命令查看当前目录的文件,来查看有无目标文件。
php://input -- GET请求的url中拼接伪协议
<?php system('ls')?>` -- post请求内容构造需要执行的代码
打开代理,对该网页进行拦截抓包,将该数据包内容按上述代码内容进行修改,然后进行放包操作。
我们观察到放包后页面出现ctf_go_go_go index.php
字段,ctf_go_go_go文件应该就是藏匿flag的文件。
接着我们直接在url地址栏中输入url参数,访问ctf_go_go_go文件。
回车访问后,得到目标flag:
最后将flag进行提交,显示答案正确。
个人体会:
- 之前没有接触过文件包含漏洞的内容,也是通过该题进行初次学习,大部分步骤是通过查阅习得,还有很多包含方式与PHP伪协议没有学习,之后需要继续深入学习。
- burpsuite目前只接触了最基础的抓包改包放包功能,还有很多功能没有尝试,需要更多实践来进行训练提高。