题目是一个 “JSON 美化 + 预览” 小工具,首页提交数据到 /api/beautify.php,返回一个临时预览文件名。最先可以用最简单的输入验证功能: {"data":"{\"a\":1}","preview_type":"raw"} 返回类似: { "success": true, "preview_id": "preview_xxxxxxxx", "preview_file": "preview_xxxxxxxx.tmp" } 然后访问: /api/preview.php?file=preview_xxxxxxxx.tmp 可以读到刚才写入的内容,说明这里存在一个“读取临时预览文件”的接口。进一步访问...
这题的核心是两段“夜班遗留逻辑”叠起来用: .git 泄露拿源码历史 历史源码里同时泄露了 JWT 调试密钥和内部接口签名密钥 入口点 访问首页后,先看前端脚本: GET /static/main.js 返回: document.addEventListener("DOMContentLoaded", () => { window.__buildTrace = "/.git/HEAD"; }); 这基本就是明示去读 .git。 继续访问: GET /.git/HEAD GET /.git/refs/heads/master 拿到分支头提交哈希,然后递归拉取 Git object,还原仓库历史。 还原出的关键信息 当前版本...
源码泄露了一个入口 http://39.105.213.28:12601/?source=1 拿到关键代码后,可知有三层校验。 第一层: $filtered = str_replace("key", "", $_GET['step1']); if ($filtered === "key") 这里利用重叠绕过,构造: step1=kkeyey 因为: str_replace("key", "", "kkeyey") === "key" 第二层: $a = $_POST['a'] ?? null; $obj_a = (object)$a; $user_key = $obj_a->key; if (isset($user_key) &&...