文章总结: 文档展示了一个JavaSpringBoot控制器代码审计挑战,涉及XXE漏洞。代码使用SAXReader解析XML输入,未禁用外部实体,允许攻击者读取文件如根目录flag。目标是通过XXE利用获取flag,测试地址提供接口。文档包含完整代码和解题奖励,强调预期解和非预期解均可获奖。
综合评分: 86
文章分类: 代码审计,漏洞分析,WEB安全,CTF,SRC活动
代码审计小挑战(文末抽奖)
原创
killer
漫漫安全路
2025年11月3日 15:03
江西
XXE漏洞挑战
好久没更新了,给粉丝们出个题目发点福利。
代码如下
package com.example.xxe.controller;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import java.io.StringReader;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.CompletableFuture;
@RestController
@RequestMapping("/api/system")
public class BlindXxeController {
@PostMapping("/update-config")
public ResponseEntity<Map<String, Object>> updateSystemConfig(
@RequestParam("configXml") String configXml,
HttpServletRequest request) {
Map<String, Object> response = new HashMap<>();
try {
CompletableFuture.runAsync(() -> {
try {
SAXReader reader = new SAXReader();
Document document = reader.read(new StringReader(configXml));
processConfigDocument(document);
} catch (DocumentException e) {
System.err.println("配置处理错误: " + e.getMessage());
}
});
response.put("status", "success");
response.put("message", "配置更新请求已提交,正在后台处理");
return ResponseEntity.ok(response);
} catch (Exception e) {
response.put("status", "error");
response.put("message", "配置更新请求失败");
response.put("error", "系统内部错误");
return ResponseEntity.internalServerError().body(response);
}
}
private void processConfigDocument(Document document) {
try {
Element root = document.getRootElement();
List<Element> settings = root.elements("setting");
for (Element setting : settings) {
String name = setting.attributeValue("name");
String value = setting.getTextTrim();
System.out.println("更新配置: " + name + " = " + value);
}
System.out.println("配置处理完成,共处理 " + settings.size() + " 个配置项");
} catch (Exception e) {
System.err.println("配置处理异常: " + e.getMessage());
}
}
}
测试地址
http://119.45.171.113:8081/xxe-demo/
目标为拿到根目录的flag
只有这一个功能接口请勿进行扫描、爆破等操作
预期解奖励500
非预期解奖励500
解题过程将在下周一发布
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:漫漫安全路 killer《代码审计小挑战(文末抽奖)》