[Web安全] XXE漏洞攻防学习(上)

时间:2022-09-08 14:12:21

0x00、XXE漏洞

XXE漏洞全称XML External Entity Injection 即xml外部实体注入漏洞,XXE漏洞发生在应用程序解析XML输入时,没有禁止外部实体的加载,导致可加载恶意外部文件和代码,造成任意文件读取命令执行内网端口扫描攻击内网网站发起Dos攻击等危害。

XXE漏洞触发的点往往是可以上传xml文件的位置,没有对上传的xml文件进行过滤,导致可上传恶意xml文件。

0x01、XML基础知识

要了xxe漏洞,那么一定得先弄明白基础知识,了解xml文档的基础组成

XML 指可扩展标记语言(Extensible Markup Language)

XML 被设计用来传输存储数据。
HTML 被设计用来显示数据

XML把数据从HTML分离,XML是独立于软件和硬件的信息传输工具。

XML语言没有预定义的标签,允许作者定义自己的标签和自己的文档结构

XML的语法规则:

  • XML 文档必须有一个根元素
  • XML 元素都必须有一个关闭标签
  • XML 标签对大小敏感
  • XML 元素必须被正确的嵌套
  • XML 属性值必须加引导
<?xml version="1.0" encoding="UTF-8"?> <!--XML 声明-->
<girl age="18">  <!--自定的根元素girl;age属性需要加引导-->
<hair>长头发</hair>  <!--自定义的4个子元素,即girl对象的属性-->
<eye>大眼睛</eye>
<face>可爱的脸庞</face>
<summary>可爱美丽的女孩</summary>
</girl>  <!--根元素的闭合-->

实体引用

在 XML 中,一些字符拥有特殊的意义。

如果您把字符 "<" 放在 XML 元素中,会发生错误,这是因为解析器会把它当作新元素的开始。

这样会产生 XML 错误:

<message>if salary < 1000 then</message>

为了避免这个错误,请用实体引用来代替 "<" 字符:

<message>if salary &lt; 1000 then</message>

在 XML 中,有 5 个预定义的实体引用:

&lt;      <                  小于号           
&gt;       >        大于号
&amp;        & 和号
&apos;       ' 单引号
&quot; " 引号

0x02、DTD (Document Type Definition)

DTD(文档类型定义)的作用是定义XML文档的合法构建模块

DTD 可被成行地声明于 XML 文档中,也可作为一个外部引用。

<!--XML声明-->
<?xml version="1.0"?>
<!--文档类型定义-->
<!DOCTYPE note [   <!--定义此文档是 note 类型的文档-->
<!ELEMENT note (to,from,heading,body)> <!--定义note元素有四个元素-->
<!ELEMENT to (#PCDATA)> <!--定义to元素为”#PCDATA”类型-->
<!ELEMENT from (#PCDATA)> <!--定义from元素为”#PCDATA”类型-->
<!ELEMENT head (#PCDATA)> <!--定义head元素为”#PCDATA”类型-->
<!ELEMENT body (#PCDATA)> <!--定义body元素为”#PCDATA”类型-->
]]]>
<!--文档元素-->
<note>
<to>Dave</to>
<from>Tom</from>
<head>Reminder</head>
<body>You are a good man</body>
</note>

上述XML代码基本分为三个部分:

第一部分是XML的声明;

第二部分是XML的DTD文档类型定义

第三部分是XML语句

而外部实体攻击主要利用DTD的外部实体来进行注入的。

DTD有两种构建方式,分别为内部DTD声明外部DTD声明

内部DTD声明:

<!DOCTYPE 根元素 [元素声明]>

实例:如上述代码

外部DTD声明:

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

实例:

<?xml version="1.0"?>
<!DOCTYPE root-element SYSTEM "test.dtd">
<note>
<to>Y</to>
<from>K</from>
<head>J</head>
<body>ESHLkangi</body>
</note>

test.dtd

<!ELEMENT to (#PCDATA)><!--定义to元素为”#PCDATA”类型-->
<!ELEMENT from (#PCDATA)><!--定义from元素为”#PCDATA”类型-->
<!ELEMENT head (#PCDATA)><!--定义head元素为”#PCDATA”类型-->
<!ELEMENT body (#PCDATA)><!--定义body元素为”#PCDATA”类型-->

PCDATA的意思是被解析的字符数据。PCDATA是会被解析器解析的文本。这些文本将被解析器检查实体以及标记。文本中的标签会被当作标记来处理,而实体会被展开。

CDATA意思是字符数据,CDATA 是不会被解析器解析的文本,在这些文本中的标签不会被当作标记来对待,其中的实体也不会被展开。

DTD实体同样有两种构建方式,分别为内部实体声明和外部实体声明。

内部实体声明:

<!ENTITY entity-name "entity-value">

实例:

<?xml version="1.0">
<!DOCTYPE note [
<!ELEMENT note(name)>
<!ENTITY hacker "ESHLkangi">
]> <note>
<name>&hacker;</name>
</note>

外部实体声明:

<!ENTITY entity-name SYSTEM "URL/URL">

默认协议

[Web安全] XXE漏洞攻防学习(上)

PHP扩展协议

[Web安全] XXE漏洞攻防学习(上)

实例:

<?xml cersion="1.0">
<!DOCTYPE hack [
<!ENTITY xxe SYSTEM "file:///etc/password">
]> <hack>&xxe;</hack>

上述代码中,XML的外部实体“xxe”被赋予的值为:file:///etc/passwd

当解析xml文档是,xxe会被替换为file:///ect/passwd的内容。

参数实体+外部实体:

<?xml version="1.0" encoiding="utf-8">
<!DOCTYPE hack [
<!ENTITY % name SYSTEM "file:///etc/passwd">
%name;
]>

"%name"(参数实体)实在DTD中被引用,而"&name;"是在xml文档中被引用的。

XXE漏洞攻击主要是利用了DTD引用外部实体导致的漏洞。

0x03、攻击思路

1、引用外部实体远程文件读取

2、Blind XXE

3、Dos

攻击实例:看下篇

 

[Web安全] XXE漏洞攻防学习(上)的更多相关文章

  1. &lbrack;Web安全&rsqb; XXE漏洞攻防学习(中)

    0x00.XXE漏洞攻击实例 攻击思路: 1. 引用外部实体远程文件读取 2. Blind XXE 3. Dos 0x01.外部实体引用,有回显 实验操作平台:bWAPP平台上的XXE题目 题目: 进 ...

  2. xxe漏洞的学习与利用总结

    前言 对于xxe漏洞的认识一直都不是很清楚,而在我为期不长的挖洞生涯中也没有遇到过,所以就想着总结一下,撰写此文以作为记录,加深自己对xxe漏洞的认识. xml基础知识 要了解xxe漏洞,那么一定得先 ...

  3. &lbrack;WEB安全&rsqb;XXE漏洞总结

    目录 0x00 XML基础 0x01 XML文档结构 0x02 DTD 0x03 实体 0x04 XXE漏洞 0x05 总结一些payload 0x06 XXE漏洞修复与防御 0x07 参考链接 0x ...

  4. 8&period;bwapp亲测xxe漏洞

    这几天在学习XXE漏洞,这里用靶机bwapp来练习一下这个漏洞,重在学习 xxe漏洞主要针对webservice危险的引用的外部实体并且未对外部实体进行敏感字符的过滤, 从而可以造成命令执行,目录遍历 ...

  5. &lbrack;红日安全&rsqb;Web安全Day8 - XXE实战攻防

    本文由红日安全成员: ruanruan 编写,如有不当,还望斧正. 大家好,我们是红日安全-Web安全攻防小组.此项目是关于Web安全的系列文章分享,还包含一个HTB靶场供大家练习,我们给这个项目起了 ...

  6. XXE漏洞学习笔记

    XXE 参考文章 名称 地址 一篇文章带你深入理解漏洞之 XXE 漏洞 https://xz.aliyun.com/t/3357 Web Hacking 101 https://wizardforce ...

  7. XXE漏洞学习

    0x00 什么是XML 1.定义 XML用于标记电子文件使其具有结构性的标记语言,可以用来标记数据.定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言.XML文档结构包括XML声明.DTD文 ...

  8. 浅谈XXE漏洞攻击与防御——本质上就是注入,盗取数据用

    浅谈XXE漏洞攻击与防御 from:https://thief.one/2017/06/20/1/ XML基础 在介绍xxe漏洞前,先学习温顾一下XML的基础知识.XML被设计为传输和存储数据,其焦点 ...

  9. 小白日记38:kali渗透测试之Web渗透-手动漏洞挖掘(四)-文件上传漏洞

    手动漏洞挖掘 文件上传漏洞[经典漏洞,本身为一个功能,根源:对上传文件的过滤机制不严谨] <?php echo shell_exec($_GET['cmd']);?> 直接上传webshe ...

随机推荐

  1. 招聘:有兴趣做一个与Android对等的操作系统么?

    招聘:有兴趣做一个与Android对等的操作系统么? 前不久我发了一篇<八一八招聘的那些事儿>讲了我自己作为求职者对招聘的一些看法.那个时候我还在求职,对求职的结果还是挺满意的,五家公司面 ...

  2. &lt&semi;meta http-equiv&equals;&quot&semi;refresh&quot&semi; content&equals;&quot&semi;0&semi; url&equals;&quot&semi;&gt&semi;是什么意思?

    页面定期刷新,如果加url的,则会重新定向到指定的网页,content后面跟的是时间(单位秒),把这句话加到指定网页的<head></head>里一般也用在实时性很强的应用中, ...

  3. &lbrack;ERROR&rsqb; Failed to execute goal org&period;apache&period;maven&period;plugins&colon;maven-jar-plugin&colon;2&period;3&period;1&colon;jar &lpar;default-jar&rpar; on

    [ERROR] Failed to execute goal org.apache.maven.plugins:maven-jar-plugin:2.3.1:jar (default-jar) on ...

  4. PHP文件上传代码和逻辑详解

    文件上传的逐步完善------ [简单的上传:]   <form action="upload.php"  method="post"  enctype= ...

  5. 九度OJ 1402 特殊的数 -- 位操作

    题目地址:http://ac.jobdu.com/problem.php?pid=1402 题目描述: 现在有n个数,其中有一些出现了一次,一些出现了两次,一些出现了很多次.现在要求你找出那些只出现一 ...

  6. cocos日记

    n/2/2015 ADT       E:\All Setup\eclipse_past\Eclipse_plugins_ADT 15/2/2015 配置cocos win32 开发环境 链接:htt ...

  7. D其他项目打电话AL工程EF Model

     Based on your description and the error code, you will just need to ensure that your DataContext ...

  8. css实现按钮点击效果&lpar;超简单&rpar;

    在html中设置class: <button class="button1">click</button> css中如下所示: .button1{    p ...

  9. 一看你就懂,超详细java中的ClassLoader详解

    本篇文章已授权微信公众号 guolin_blog (郭霖)独家发布 ClassLoader翻译过来就是类加载器,普通的Java开发者其实用到的不多,但对于某些框架开发者来说却非常常见.理解ClassL ...

  10. SSH框架整合实现Java三层架构实例(一)

    HTML前台发送请求代码: <tr> <td>选择收派时间</td> <td> <input type="text" name ...