xxe漏洞学习

一、什么是xxe漏洞

XXE就是XML外部实体注入,当允许引用外部实体时, XML数据在传输中有可能会被不法分子被修改,如果服务器执行被恶意插入的代码,就可以实现攻击的目的攻击者可以通过构造恶意内容,就可能导致任意文件读取,系统命令执行,内网端口探测,攻击内网网站等危害。

由此为引例,了解一下XML语言

XML是可扩展的标记语言(eXtensible Markup Language),设计用来进行数据的传输和存储, 结构是树形结构,有标签构成,这点很像HTML语言。

但是XML和HTML有明显区别如下:   

XML 被设计用来传输和存储数据。 

HTML 被设计用来显示数据。

先来看一段简单的XML代码



<?xml version=’1.0’?>					//声明XML解析器版本来解析
<person>								//根元素,不一定是person
<name>test</name>						//子元素,意思就是name变量的值是test
<age>20</age>                           //同理
</person>


简单来说XML的语法中,标签就是变量名,标签里面的数据就是变量的值 

而实体又分为三种,一般实体(通用实体),参数实体,预定义实体 (XXE不用,我也没了解)

1、一般实体


<?xml version=’1.0’?>	   // 声明XML解析器版本来解析 
 
// 运用实体定义变量的写法 
// 即声明一个name变量,值为john
<!DOCTYPE person[         
<!ENTITY name “john”>      
]>				
 
// 引用一般实体的写法,格式为"&实体名称;"
<person>			      
<name>&name;</name>		   		
<age>20</age>
</person>

2、参数实体

参数实体的声明:<!ENTITY % 实体名称  "实体内容">

引用参数实体的方法:%实体名称;

 来看看下面一段使用了参数实体的代码,其实跟一般实体差不多只是%的区别

=

<?xml version=’1.0’?>       // 声明XML解析器版本来解析 
 
// 运用参数实体定义变量的写法 
// 即声明一个outer变量,值为John
<!DOCTYPE person[         
<!ENTITY % outer "John">        
%outer;                     //参数实体定义的变量必须先在dtd文件中引用
]>             
 
 
// 引用参数实体的写法,格式为"%实体名称;"
<person>                  
<name>%name;</name>                   
<age>20</age>
</person>

它必须定义在单独的DTD区域,这种实体相对灵活,这种功能在漏洞利用场景的外部实体注入(XXE)过程中非常有用

然后再区分一下内部实体和外部实体

内部实体


<?xml version=”1.0”?>
<!DOCTYPE note[
<!ELEMENT note (name)>
<!ENTITY hack3r “hu3sky”>
]>
<note>
<name>&hack3r;</name>
</note>

 外部实体

<?xml version=”1.0”?>
<!DOCTYPE a[
<!ENTITY  name SYSTEM “http://xx.com/aa.dtd”>
]>
<a>
<name>&name;</name>
</a>

内部实体就相当于自己编写DTD内容,而外部实体就相当于引入外部的DTD内容,类似于写JS代码时从外部引入JS文件,上面的一般实体和参数实体都可以化为外部实体 

 二、实战检验

这一部分放到暑假再练习吧,主要是有点抽象,需要时间去理解

相关推荐

  1. Xxe漏洞

    2024-06-18 11:10:08       38 阅读
  2. <span style='color:red;'>XXE</span><span style='color:red;'>漏洞</span>

    XXE漏洞

    2024-06-18 11:10:08      37 阅读
  3. 33-1 XXE漏洞 - DTD

    2024-06-18 11:10:08       36 阅读
  4. 33-2 XXE漏洞 - XXE外部实体注入原理

    2024-06-18 11:10:08       35 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-18 11:10:08       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-18 11:10:08       100 阅读
  3. 在Django里面运行非项目文件

    2024-06-18 11:10:08       82 阅读
  4. Python语言-面向对象

    2024-06-18 11:10:08       91 阅读

热门阅读

  1. 在无线网中 2.4G、5G、WiFi6、WiFi7 都是什么意思?

    2024-06-18 11:10:08       35 阅读
  2. Oracle中常用特殊字符chr值

    2024-06-18 11:10:08       31 阅读
  3. 这些常用 MySQL 用法,99% 的人都不知道!

    2024-06-18 11:10:08       33 阅读
  4. 数据仓库之主题域

    2024-06-18 11:10:08       30 阅读
  5. python,ipython 和 jupyter notebook 之间的关系

    2024-06-18 11:10:08       32 阅读
  6. LeetCode //MySQL - 178. Rank Scores

    2024-06-18 11:10:08       37 阅读
  7. new char(20)和new char[20]区别

    2024-06-18 11:10:08       33 阅读
  8. 在mysql中GROUP_CONCAT字段的作用

    2024-06-18 11:10:08       41 阅读
  9. 面试计算机网络八股文十问十答第十期

    2024-06-18 11:10:08       62 阅读