xxe靶场下载地址:https://download.vulnhub.com/xxe/XXE.zip
(国外网站下载慢)
一、准备靶场环境:
下载完压缩包(解压):
点开虚拟机:
然后打开虚拟机:
如果发现不了靶机ip,建议勾选如图设置
二、信息收集:
因为靶场网络是随机分配的,所以把kali放在同一网段,然后进行扫描主机确定靶场IP地址(通过arp协议):
Ip192.168.120.128是靶场地址
确认后进行端口扫描:
只开放了80 端口,游览器访问:
发现是默认apache2页面,进行目录扫描:
用dirsearch命令工具扫描目录:
发现robots.txt,猜测是源码泄露,访问
三、漏洞发现和利用
发现网址后台,再访问:
因为是xxe靶场,于是猜测登录是用xml数据传输,使用bp抓取登录包内容:
发现是xml格式,于是构造poc:
访问本地xxe.php的源码,用base64格式输出。解码得:
<?php
libxml_disable_entity_loader (false);
$xmlfile = file_get_contents('php://input');
$dom = new DOMDocument();
$dom->loadXML($xmlfile, LIBXML_NOENT | LIBXML_DTDLOAD);
$info = simplexml_import_dom($dom);
$name = $info->name;
$password = $info->password;
echo "Sorry, this $name not available!";
?>
无作用,想起之前的admin.php,同样查看admin.php的源码:
解码得(部分):
if ($_POST['username'] == 'administhebest' &&
md5($_POST['password']) == 'e6e061838856bf47e1de730719fb2609') {
得到登录密码,因为是在admin.php的源码里于是访问admin.php网址:
MD5加密的password在网站解得:
登录进去:
点击flag发现404错误,但是有新的文件名
于是再依靠上面的xxe漏洞查看flagmeout.php的源码:
解base64得
<?php
$flag = "<!-- the flag in (JQZFMMCZPE4HKWTNPBUFU6JVO5QUQQJ5) -->";
echo $flag;
?>
全是大写字母和数字,猜测是base32加密:
再base64解密发现路径:
发现路径,再次依靠上面的xxe漏洞读取源代码:
解码得:
$_[]++;$_[]=$_._;$_____=$_[(++$__[])][(++$__[])+(++$__[])+(++$__[])];$_=$_[$_[+_]];$___=$__=$_[++$__[]];$____=$_=$_[+_];$_++;$_++;$_++;$_=$____.++$___.$___.++$_.$__.++$___;$__=$_;$_=$_____;$_++;$_++;$_++;$_++;$_++;$_++;$_++;$_++;$_++;$_++;$___=+_;$___.=$__;$___=++$_^$___[+_];$Ã=+_;$Ã=$Ã=$Ã=$Ã=$Ã=$Ã=$Ã=$Ã=$Ã=++$Ã[];$Ã++;$Ã++;$Ã++;$Ã++;$Ã++;$Ã++;$Ã++;$Ã++;$Ã++;$Ã++;$Ã++;$Ã++;$Ã++;$Ã++;$Ã++;$Ã++;$Ã++;$Ã++;$Ã++;$Ã++;$Ã++;$Ã++;$Ã++;$Ã++;$Ã++;$Ã++;$Ã++;$Ã++;$Ã++;$Ã++;$Ã++;$Ã++;$Ã++;$Ã++;$Ã++;$__('$_="'.$___.$Ã.$Ã.$Ã.$___.$Ã.$Ã.$Ã.$___.$Ã.$Ã.$Ã.$___.$Ã.$Ã.$Ã.$___.$Ã.$Ã.$Ã.$___.$Ã.$Ã.$Ã.$___.$Ã.$Ã.$Ã.$___.$Ã.$Ã.$Ã.$___.$Ã.$Ã.$Ã.$___.$Ã.$Ã.$Ã.$___.$Ã.$Ã.$Ã.$___.$Ã.$Ã.$Ã.$___.$Ã.$Ã.$Ã.$___.$Ã.$Ã.$Ã.$___.$Ã.$Ã.$Ã.$___.$Ã.$Ã.$Ã.$___.$Ã.$Ã.$Ã.$___.$Ã.$Ã.$Ã.$___.$Ã.$Ã.$Ã.$___.$Ã.$Ã.$Ã.$___.$Ã.$Ã.$Ã.$___.$Ã.$Ã.$Ã.'"');$__($_);
看不懂,但是是flag.php里的内容,猜测是php代码,于是放入在线的php环境或者自己的 网站查看:
注意!php解析器版本是php5才能正常解析出flag,版本过高都会显示不出flag。
那么最后感谢你的阅读,点个赞吧。如果有错误欢迎指正。