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://filter和php://input,php://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

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





