pikachu-File Inclusion

文章讲述了作者通过实验发现并利用PHP的FileInclusion漏洞,从本地文件包含到远程文件包含的过程,包括漏洞触发、文件上传、getshell获取以及远程代码执行。最后总结了对文件上传漏洞的理解和相关工具应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

实验步骤


File Inclusion模块

php的文件包含不管文件后缀名是什么,只要包含php代码,就可以被当作php代码解析第一关  File Inclusion(local)


首先可以在输入框中选择很多NBA明星,可以看到他们的照片和简介,同时访问是URL也暴露了出来,然后一次访问,依次可以看到有filex.php(x是数字)这样的的文件,而且是通过URL参数从前端传到后端的话,如果没有严格过滤就很可能有文件包含漏洞


那我们bp查看一下数据

将数据发送到测试器,我们看看之后数的字是否还有别的有用的信息

爆破的就选择数值就可以了,从6到100


6到100,每次依次增加1


可以看到在file6.php的文件中有了账号密码!

然后其他的都是报错,也有一些长度只相差2的也都是报错


看到了这个报错,通过这个报错,可以知道fi_local.php中用来进行文件包含的函数是include(),并且包含的文件路径为与fi_local.php同文件夹下include文件夹中的文件。

从上面的报错信息可以知道网站根目录是E:CTF\phpStudy_64\phpstudy_pro\WWW

所以肯定会有Windows\win.ini这个文件,用这个来尝试有没有文件包含漏洞。

上一部分已经分析过,上图报错信息泄露出include()函数包含的文件是与fi_local.php同文件夹下include文件夹中的文件,由于路径参数中有个固定的include/,并且包含的文件路径为与fi_local.php同文件夹下include文件夹中的文件。

我们在这个路径下上传一个txt格式的php代码

因为那不是file6.php的路径(其实在include文件中),所以使用../用来返回上一层目录。


http://pikachu/vul/fileinclude/fi_local.php?filename=../1.txt&submit=%E6%8F%90%E4%BA%A4%E6%9F%A5%E8%AF%A2

结合报错信息中泄露的fi_local.php文件位置,可以算出相对路径为../../../../../../windows/win.ini,代入url中组成payload:

http://pikachu/vul/fileinclude/fi_local.php?filename=../../../../../../windows/win.ini&submit=%E6%8F%90%E4%BA%A4


成功读到win.ini文件的内容

这时候需要上传一个图片马,结合文件上传getshell


在pikachu Unsafe Fileupload 不安全的文件上传的 getimagesize关卡,上传了图片马,该其内容包含下图所示的一句话木马。,然后需要将.txt文件修改为.jpg


文件上传w.jpg,就能回显部分路径和新生成的图片文件名

所以就能得出payload为

http://pikachu/vul/fileinclude/fi_local.php?filename=../../unsafeupload/uploads/2023/12/29/590615658e71d958d6f989232239.jpg&submit=%E6%8F%90%E4%BA%A4

用蚁键连接


成功连接  

第二关  File Inclusion(remote)

在远程包含漏洞中,攻击者可以通过访问外部地址来加载远程的代码。


这关的下拉框和local那关还是一样的,随便选一个,观察一下url有什么不同?url中把include()函数的完整参数给出来了

 url中把include()函数的完整参数给出来了

http://pikachu/vul/fileinclude/fi_remote.php?filename=include%2Ffile4.php&submit=%E6%8F%90%E4%BA%A4%E6%9F%A5%E8%AF%A2#

远程包含http试一下

http://pikachu/vul/fileinclude/fi_remote.php?filename=https://www.youkuaiyun.com/&submit=%E6%8F%90%E4%BA%A4%E6%9F%A5%E8%AF%A2#


所以这关其实除了远程文件包含,还可以本地文件包含使用绝对路径.


写一个生成shell得一句话木马

然后将.txt改为.php文件


然后打开蚁键,将shell.php文件的目录复制下来,粘贴在filename=后面


OK连接成功

总结

通过这次漏洞的作业,我了解到了文件上传漏洞的一些相关知识,又更熟悉了一遍bp,一句话木马的上传,蚁键的连接包括在远程包含漏洞中,攻击者可以通过访问外部地址来加载远程的代码等

### 文件上传与文件包含漏洞利用及防御 在处理像Pikachu靶场中的文件上传和文件包含漏洞时,理解这些漏洞的工作原理及其潜在风险至关重要。当应用程序允许用户上传文件并随后尝试动态加载或解析这些文件作为代码的一部分时,就会发生此类漏洞。 #### 漏洞利用实例 假设存在一个PHP应用,其中有一个用于展示不同页面布局的功能,此功能接受来自用户的输入来决定要显示哪个模板文件: ```php <?php // 不安全的做法 $filename = $_GET['page']; include($filename . '.php'); ?> ``` 如果`$_GET['page']`未经过适当验证就被直接使用于`include()`语句中,则攻击者可以通过精心构造请求参数注入恶意路径或URL,进而触发本地或远程文件包含攻击[^1]。 对于文件上传结合文件包含的情况,通常涉及两个主要方面: - 用户提交带有特定扩展名(如`.php`)的文件到服务器; - 应用程序未能正确区分正常图片或其他类型的文件与可执行脚本之间的差异,并错误地将其视为合法资源进行处理。 例如,在某些情况下,即使上传的是图像文件,但如果其实际内容为PHP代码片段,一旦被不当包含,就能被执行。 #### 安全防护建议 为了防止上述提到的安全隐患,应当采取以下措施加强保护机制: - **严格校验文件类型**:不仅依赖MIME类型判断,还应基于文件头信息进一步确认文件的真实性质。 - **限定存储位置**:确保所有上传的数据都被保存在一个独立且受控的位置之外,远离Web根目录,避免意外访问。 - **禁用危险设置**:修改`php.ini`配置项,关闭不必要的选项,比如`allow_url_fopen=Off` 和 `allow_url_include=Off` ,阻止从外部源获取数据的可能性[^2]。 - **实施白名单策略**:只允许预定义列表内的文件名称或模式参与动态加载过程;拒绝一切不在范围之内的请求。 - **启用魔术引号GPC (Magic Quotes GPC)** :虽然现代版本已弃用了这一特性,但在较旧环境中开启它可以自动转义特殊字符,减少SQL注入和其他形式的字符串插值攻击的风险。 综上所述,针对Pikachu靶场所模拟的实际应用场景,开发者应该始终遵循最小权限原则设计API接口逻辑,同时配合有效的输入输出净化手段以及合理的架构规划共同构建起坚固防线抵御各类网络威胁。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值