作为应急响应专家,你需要分析提供的日志文件,找出攻击者成功利用漏洞的完整链条,并提取出攻击者最终窃取...
تم الإنشاء في: ١٢ أبريل ٢٠٢٦
تمت الإجابة باستخدام GPT-5.4 Thinking بواسطة Chat01
تم الإنشاء في: ١٢ أبريل ٢٠٢٦
تمت الإجابة باستخدام GPT-5.4 Thinking بواسطة Chat01
作为应急响应专家,你需要分析提供的日志文件,找出攻击者成功利用漏洞的完整链条,并提取出攻击者最终窃取的核心数据(Flag)
pythonimport base64, binascii parts = ["Zmxh","Z3s4","Y2Iy","NDlk","MC04","MjVi","LTc0","MTkt","ODQ1","Yi0x","ZjI5","ZTAw","ZDUz","ZjR9"] for p in parts: s = p # add padding try: dec = base64.b64decode(s + "=" * (-len(s)%4)).decode() except Exception as e: dec = repr(e) print(p, dec)
我基于你上传的日志完成了还原。(ctf_challenge.txt)
结论
成功利用漏洞并拿到核心数据的攻击者是 192.168.10.84。
真正被成功利用的漏洞是 /register.php 上的 XXE(XML External Entity)注入,不是旁边那个只会扫目录、但全是 404 的探测流量。
Flag: flag{8cb249d0-825b-7419-845b-1f29e00d53f4}
完整攻击链条
前置访问与脚本化探测
在 2026-03-23 13:19:36 UTC,192.168.10.84 先用 python-requests/2.25.1 访问 /login.html,说明这不是正常浏览器流量,而是脚本化攻击前的页面摸底。
漏洞利用:向 /register.php 注入 XXE
紧接着它访问:
/register.php?...&user_xml_format=...<!DOCTYPE test [ <!ENTITY xxe SYSTEM "file:///flag"> ]>&xxe; 放进 <username> 字段这说明注册接口会解析攻击者可控 XML,而外部实体未被禁用,导致服务器去读取本地文件 /flag。这是标准 XXE 成功利用特征。请求返回 200,说明 payload 被服务端接受处理。
数据外带:把 Flag 分块伪装成文件名/图片名带出
随后同一 IP 连续发起多次 XXE 读取,请求里的 SYSTEM "file:///" 后面不再是普通路径,而是形如:
ZmxhZ3s4Y2IyNDlkMC04MjViLTc0MTktODQ1Yi0xZjI5ZTAwZDUzZjR9同时还能看到对应的 img= 访问,如 img=Yi0x.png、img=ZTAw、img=ZDUz.png,说明攻击者在把读取结果按块编码后,通过应用的图片/资源引用逻辑进行回显和确认。
拼接解码得到最终 Flag
这些片段做 Base64 解码后依次得到:
Zmxh → flaZ3s4 → g{8Y2Iy → cb2NDlk → 49dMC04 → 0-8MjVi → 25bLTc0 → -74MTkt → 19-ODQ1 → 845Yi0x → b-1ZjI5 → f29ZTAw → e00ZDUz → d53ZjR9 → f4}拼接后就是:
flag{8cb249d0-825b-7419-845b-1f29e00d53f4}
补充判断
日志里还有 10.55.22.19 对 /admin、/phpmyadmin、/backup.zip、/shell.php 等路径的扫描,但全部是 404,更像噪声式目录探测,不是这次真正成功取到 Flag 的链路。真正的成功链路是 192.168.10.84 -> /register.php XXE -> 读取 /flag -> 分块外带 -> 拼接还原 Flag。