CTFHUB RCE——文件包含

 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

猜你喜欢

转载自blog.csdn.net/winofkill/article/details/121871376