我正在尝试实现一个简单的演示-以更好地理解XXE和SSRF技术。我在下面写了这两个文件,试图设置这两个文件。
目前,我拦截AJAX POST请求并通过附加以下方式修改数据(params):
]>
&xxe;*我还尝试了另一个本地文件,而不是/etc/passwd;因为我不确定它由于www-data是否可以访问给定的文件
我已经读到PHP已经修复了内置解析器,默认情况下不允许外部实体。因此,我尝试添加以下内容;尽管我认为它是不可取的- libxml_disable_entity_loader(false);
尽管如此,我的XXE尝试似乎不起作用,我也不完全确定为什么?
xxe.php -
Post data
function postData(){
var xHTTP = new XMLHttpRequest();
var params = "<?xml version='1.0'?><entry><row>1</row><ex>a</ex><row>2</row><ex>b</ex></entry>";
xHTTP.onreadystatechange = function(){
if(this.readyState == 4){
console.log(xHTTP.responseText);
}
};
xHTTP.open("POST", '/xxe_post_handler.php', true);
xHTTP.setRequestHeader("Content-Type", "application/xml");
xHTTP.send(params);
}xxe_post_handler.php -
children() as $child){
printf("XML child: %s\n", $child);
}
$xmlDOM = new DOMDocument();
$xmlDOM->loadXML($postData);
$xD = $xmlDOM->documentElement;
foreach($xD->childNodes AS $xN){
print $xN->nodeName . " = " . $xN->nodeValue . "
";
}
}
?>
发布于 2021-01-27 21:18:19
我通过youtube的教程找到了我的问题https://youtu.be/JI0daBHq6fA?t=145的答案
唯一的修改就是将这些LIBXML_NOENT参数添加到loadXML函数(file - xxe_post_handler.php)中。https://www.php.net/manual/en/libxml.constants.php
例如- $xmlDOM->loadXML($postData,LIBXML_NOENT);

https://security.stackexchange.com/questions/243890
复制相似问题