BUUCTF [BJDCTF2020]ZJCTF,不过如此

[BJDCTF2020]ZJCTF,不过如此

考点

PHP伪协议

https://www.cnblogs.com/wjrblogs/p/12285202.html

preg_replace远程代码执行

https://zhuanlan.zhihu.com/p/47353283

实操

打开题目
在这里插入图片描述

乍一看,显然是一个PHP伪协议的题目,要求"I have a dream",以及提示包含next.php
在这里插入图片描述

PD9waHAKJGlkID0gJF9HRVRbJ2lkJ107CiRfU0VTU0lPTlsnaWQnXSA9ICRpZDsKCmZ1bmN0aW9uIGNvbXBsZXgoJHJlLCAkc3RyKSB7CiAgICByZXR1cm4gcHJlZ19yZXBsYWNlKAogICAgICAgICcvKCcgLiAkcmUgLiAn
### BUUCTF BJDCTF2020 Base题目解析 #### 题目描述 在BUUCTF平台上的BJDCTF2020比赛中,有一个名为“不过如此”的基础题目。此题目的核心在于理解并利用PHP中的`file_get_contents`函数以及正则表达式的特性。 #### PHP代码分析 进入题目页面后可以看到一段PHP代码: ```php <?php highlight_file(__FILE__); if(isset($_GET['text']) && isset($_GET['file'])) { $content = file_get_contents($_GET['file']); if($content === "I have a dream") { echo $content; if(preg_match('/' . $_GET['text'] . '/e', 'test')) { highlight_string(file_get_contents('flag.php')); } else { echo "GG"; } } } ?> ``` 这段代码的功能如下: - 使用`file_get_contents`读取由`$_GET['file']`指定的文件内容。 - 如果文件内容等于"I have a dream",则输出该字符串[^4]。 - 接着通过正则表达式匹配`$_GET['text']`参数传递的内容,并启用`e`修饰符执行其中可能存在的PHP代码。 - 若匹配成功,则显示`flag.php`文件;否则返回"GG"。 #### 利用点与解法思路 由于存在正则表达式的`e`模式漏洞,在构建正则表达式时可以嵌入任意PHP语句作为替换部分被执行。因此可以通过构造特殊的`text`参数绕过验证逻辑获取敏感信息。 具体操作步骤为找到一个符合条件(即包含“I have a dream”)的小型测试文件路径供程序读取,再精心设计能够触发命令注入攻击的有效载荷提交给服务器端处理即可实现最终目标——读取FLAG。 为了安全起见,在实际环境中应当禁用危险的PCRE选项如这里的'e'标志位以防止潜在风险发生。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值