前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >浅谈XXE漏洞

浅谈XXE漏洞

作者头像
渗透攻击红队
发布2019-11-20 11:56:32
6400
发布2019-11-20 11:56:32
举报
漏洞知识库

网络安全/渗透测试/代码审计/

关注

浅谈XXE漏洞

介绍

现在越来越多主要的web程序被发现和报告存在XXE(XML External Entity attack)漏洞,比如说facebook、paypal等等。举个例子,我们扫一眼这些网站最近奖励的漏洞,充分证实了前面的说法。尽管XXE漏洞已经存在了很多年,但是它从来没有获得它应得的关注度。很多XML的解析器默认是含有XXE漏洞的,这意味着开发人员有责任确保这些程序不受此漏洞的影响。

XML基础知识

XML用于标记电子文件使其具有结构性标记语言,可以用来标记数据定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。XML文档结构包括XML声明DTD文档类型定义(可选)、文档元素。

如果你了解XML,你可以把XML理解为一个用来定义数据的东东。因此,两个采用不同技术的系统可以通过XML进行通信交换数据

比如,下面的代码就是XML的基础结构:

 <!--XML声明-->
<?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>Hacker</to>
<from>Power_Liu</from>
<heading>Reminder</heading>
<body>Hack it, you must be Know it,Know it then Hack it。<body/>
</note>

DTD是什么?

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

内部声明DTD

格式:

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

引用外部DTD

格式:

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

或者:

<!ENTITY PUBLIC "public_ID" "文件名">

在DTD中,实体声明,使用ENTITY关键字声明。实体,用来定义应用普通文本或特殊字符的快捷方式的变量。实体,可以内部,或外部进行声明。

内部声明实体格式:

<!ENTITY 实体名称 "实体值">

引用外部的实体格式:

<!ENTITY 实体名称 SYSTEM "引用外部的url">
<!ENTITY 实体名称 public_ID "引用外部的url">

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

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

(1)恶意引入外部实体方式1:

读取系统passwd文件

(2)恶意引入外部实体方式2:

调用外部实体URL,其中evil.dtd就是恶意文件,内容可以写成上面的那种

(3)恶意引入外部实体方式

支持的协议:

libxml2

file、http、ftp

PHP

file、http、ftp、php、compress.zlib、compress.bzip2、data、glob、phar

JAVA

http、https、ftp、file、jar、netdoc、mailto、gopher

.NET

file、http、https、ftp

XXE漏洞的危害:

读取任意文件(数据回显):
任意文件读取(数据不回显):

#print_r($data);这个是不让数据回显到客户端,让回显的数据发送到远程服务器的192.168.1.122/evil.dtd里。

执行系统命令
内网端口探测
内网的渗透测试

防御XXE攻击:

方案一:使用开发语言提供的禁用外部实体的方法

php:

libxml_disable_entity_loader(true);

其他语言:百度上有详细的说明文档

方案二:过滤用户提交的XML数据

关键词有:SYSTEM、PUBLIC

XXE漏洞的演示:

BurpSuite抓包然后再数据包下面填写恶意的XML代码实现读取etc/passwd文化内容

未完待续… …

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-10-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 漏洞知识库 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 介绍
  • XML基础知识
  • DTD是什么?
    • 内部声明DTD
      • 引用外部DTD
        • 内部声明实体格式:
          • 引用外部的实体格式:
          • XXE外部实体注入(XML External Entity)
            • 支持的协议:
              • libxml2
              • PHP
              • JAVA
              • .NET
              • 读取任意文件(数据回显):
              • 任意文件读取(数据不回显):
              • 执行系统命令
              • 内网端口探测
              • 内网的渗透测试
          • XXE漏洞的危害:
          • 防御XXE攻击:
          • XXE漏洞的演示:
          相关产品与服务
          网站渗透测试
          网站渗透测试(Website Penetration Test,WPT)是完全模拟黑客可能使用的攻击技术和漏洞发现技术,对目标系统的安全做深入的探测,发现系统最脆弱的环节。渗透测试和黑客入侵最大区别在于渗透测试是经过客户授权,采用可控制、非破坏性质的方法和手段发现目标和网络设备中存在弱点,帮助管理者知道自己网络所面临的问题,同时提供安全加固意见帮助客户提升系统的安全性。腾讯云网站渗透测试由腾讯安全实验室安全专家进行,我们提供黑盒、白盒、灰盒多种测试方案,更全面更深入的发现客户的潜在风险。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档