从一次“翻车”的漏洞复现说起:记CVE-2018-7490中那个找不到的/tmp/flag
从一次“翻车”的漏洞复现说起CVE-2018-7490排查实录那天下午我像往常一样打开Vulfocus靶场准备复现uWSGI目录穿越漏洞CVE-2018-7490。这个漏洞在安全圈已经讨论多年原理清晰明了——通过构造特殊的..%2f路径穿越符可以突破DOCUMENT_ROOT限制访问任意文件。理论上这应该是个十分钟就能搞定的标准操作。但接下来发生的事情却让我在电脑前折腾了整整三个小时。1. 漏洞复现的标准流程uWSGI作为高性能的Web服务器网关接口在2.0.17之前的PHP插件中存在路径校验缺陷。当攻击者使用URL编码的..%2f即../进行路径遍历时服务器不会正确校验DOCUMENT_ROOT边界导致可以读取系统任意文件。按照标准复现步骤启动Vulfocus提供的漏洞环境获取目标IP和端口测试基础漏洞存在性curl http://target_ip:port/..%2f..%2f/etc/passwd如果看到系统用户列表返回说明漏洞存在根据题目提示尝试获取/tmp/flagcurl http://target_ip:port/..%2f..%2f/tmp/flag前几步都顺利得出结果直到访问/tmp/flag时服务器返回了冰冷的404 Not Found。这不对劲——既然能读取/etc/passwd说明漏洞利用是成功的为什么找不到flag文件2. 问题排查的五个维度2.1 文件系统检查首先怀疑flag是否真的存在于/tmp目录。通过漏洞尝试列出/tmp内容curl http://target_ip:port/..%2f..%2f/tmp/返回结果依然是404。这引出了新的疑问是/tmp目录不可访问还是flag文件不存在排查技巧通过已知存在的文件验证漏洞有效性# 测试已知存在的系统文件 curl http://target_ip:port/..%2f..%2f/etc/hostname当这个请求成功返回主机名时确认漏洞利用本身没有问题。2.2 uWSGI日志分析大多数uWSGI配置会记录访问日志。尝试读取日志文件curl http://target_ip:port/..%2f..%2f/var/log/uwsgi/uwsgi.log在获得的日志中发现了关键线索WARNING: requested /tmp/flag not found (pid: 1234)这证实了服务器确实在处理/tmp/flag请求但文件不存在。2.3 权限问题验证考虑可能是权限问题导致无法访问/tmp。测试不同权限级别的文件文件路径访问结果可能原因/etc/passwd200 OK全局可读/root/.bash_history403 Forbidden权限不足/tmp404 Not Found路径不存在这个对比说明/tmp目录在容器中的表现异常不像普通的Linux系统。2.4 容器文件系统分析Vulfocus环境通常使用Docker容器。考虑容器特性检查/proc/mounts查看挂载点curl http://target_ip:port/..%2f..%2f/proc/mounts发现/tmp是tmpfs单独挂载检查Dockerfile构建历史如果可访问curl http://target_ip:port/..%2f..%2f/etc/hostname关键发现靶场可能在容器启动时动态生成flag而非放在/tmp。2.5 非典型路径尝试当标准路径失效时需要扩展思维检查Web根目录curl http://target_ip:port/..%2f..%2f/var/www/html/查找环境变量中的线索curl http://target_ip:port/..%2f..%2f/proc/self/environ尝试首页搜索功能如题目最终提示最终在/var/www/html/flag.txt找到了目标文件——原来出题人玩了个小花招。3. 漏洞环境的构建艺术这次经历让我思考靶场设计的几种常见模式标准漏洞验证型完全还原真实漏洞场景文件位置与公开文档一致适合教学基础漏洞原理CTF变种型在基础漏洞上增加解题元素可能隐藏文件、设置伪flag需要综合应用多种技术混合迷惑型部分符合标准漏洞特征关键步骤需要额外思考模拟真实攻防中的不确定性# 示例简单的flag生成脚本 import os import random flag FLAG{%s} % os.urandom(16).hex() with open(/var/www/html/flag.txt, w) as f: f.write(flag)4. 安全研究的思维工具箱这次翻车经历提炼出的方法论三层验证原则基础漏洞验证如读取/etc/passwd目标文件直接访问环境上下文分析五个排查方向文件是否存在stat是否有访问权限access路径是否符号链接readlink容器文件系统差异mount出题人意图非技术因素实用命令备忘目的Linux命令漏洞利用方式检查文件是否存在stat /pathcurl ..%2f..%2f/path查看目录内容ls -la /tmpcurl ..%2f..%2f/tmp/检查文件权限getfacl /path观察HTTP 403响应查看挂载点mount | grep tmp读取/proc/mounts检查环境变量env读取/proc/self/environ5. 从复现到实战的思维转换真实环境与靶场有三点关键差异信息不对称靶场通常提示漏洞类型真实环境需要先识别可能存在的漏洞环境复杂性靶场环境干净可控真实系统可能有多种防护措施目标不确定性靶场flag位置有迹可循真实渗透需要自己确定关键目标实战建议建立完整的检查清单记录每个步骤的结果和假设准备多种备选方案合理利用时间设置排查时限那次在Vulfocus上的翻车经历反而让我收获了比顺利复现更多的思考。现在每次看到CVE-2018-7490这个编号都会想起那个在容器里消失的flag以及它教给我的排查方法论。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2509307.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!