Web安全漏洞及代码审计-8 XML外部实体注入漏洞与审计_第1页
Web安全漏洞及代码审计-8 XML外部实体注入漏洞与审计_第2页
Web安全漏洞及代码审计-8 XML外部实体注入漏洞与审计_第3页
Web安全漏洞及代码审计-8 XML外部实体注入漏洞与审计_第4页
Web安全漏洞及代码审计-8 XML外部实体注入漏洞与审计_第5页
已阅读5页,还剩21页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

XML外部实体注入漏洞与审计项目八Web安全漏洞及代码审计(第2版)目录01项目知识准备04项目复盘03任务2XML外部实体注入漏洞代码审计02任务1XML外部实体注入漏洞分析CONTENTS项目知识准备学习漏洞介绍、漏洞危害、审计思路01.漏洞介绍XML外部实体注入(XMLExternalEntityInjection,XXE)是一种安全漏洞,发生在应用程序解析XML输入时,允许外部恶意实体的解析。此漏洞可能导致多种攻击,例如任意文件读取,攻击者可以获取敏感信息,如系统配置文件;命令执行,使攻击者能够在服务器上执行任意操作;以及端口检测,让攻击者检查内网服务可用性。由于这些潜在风险,开发者在处理XML数据时必须采取严格的安全措施,以防范XXE攻击。基础知识-XML文档XML是可扩展标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。而HTML是超文本标记语言,其中的标签是固定的,可以使用标签来操作。XML文档代码如下:基础知识-XML文档首先是XML声明,也可以将这个声明简单地写为<?xml?>,或者包含XML版本(如<?xmlversion="1.0"?>)甚至包含字符编码的形式(如针对Unicode的

<?xmlversion="1.0"encoding="utf-8"?>)。其次在文档类型定义(DocumentTypeDefinition,DTD)或模式(schema)中定义规则,这时就需要在XML文件中引用DTD(DTD可以在XML文档内声明,也可以从外部引用)或schema文件,定义XML文档的合法构建模块。这里需要强调DTD,它可以快速定义XML文档的合法构建模块,使用一系列合法的元素定义文档的结构。最后是一些文档元素,由于我们定义了文档根元素为English,以及子元素为A、B、C、D,因此在文档元素中必须填写内容。示例代码如下:所以,XML文档结构包括XML声明、文档类型定义、文档元素。基础知识-DTDDTD可以被成行地声明于XML文档中(内部引用),也可以被当作一个外部引用。DTD文档中的关键字有DOCTYPE(DTD声明)、ENTITY(实体声明)、SYSTEM/PUBLIC(外部资源申请)。参数实体的声明需要在实体名称前面加“%”,而一般实体的声明则不需要。引用参数实体时需要在实体名称前面添加“%”并以分号结束,而引用一般实体时则需要在实体名称前面添加“&”并以分号结束。内部实体、外部实体、参数实体的声明语法如表。内部实体<!ENTITY实体名称“实体的值”>外部实体<!ENTITY实体名称

SYSTEM“URI”>参数实体<!ENTITY%实体名称“实体的值”>或<!ENTITY%实体名称

SYSTEM“URI”>基础知识-DTD对于实体名称为xxe的外部实体,通过File协议读取/etc/passwd,在<username>中引入外部实体,示例代码如下:审计思路XML外部实体注入(XMLExternalEntityInjection,XXE)漏洞往往出现在上传XML文档的位置,原因是程序对XML文档数据没有进行校验,因此我们需要重点关注处理XML文档的函数,如simplexml_load_string()、loadXML()、SimpleXMLElement()等。任务1XML外部实体注入漏洞分析02.学习simplexml_load_string()函数、DOM解析器函数、SimpleXMLElement()函数simplexml_load_string()函数simplexml_load_string(string,class,options,ns,is_prefix)函数主要用于将XML字符串转换为SimpleXMLElement对象。simplexml_load_string()函数的参数及其含义如表。参

数含

义string必选参数,XML字符串class可选参数,可规定对象的classoptions可选参数,附加参数libxmlns可选参数,命名空间前缀或URIis_prefix可选参数,规定一个布尔值。如果ns是前缀,则为true;如果ns是URI,则为false。默认为falsesimplexml_load_string()函数测试代码如下:以读取任意文件为例,读取C盘Windows文件夹下的win.ini文件,将下面的Payload进行URL编码后,即可读取文件,示例代码如下:simplexml_load_string()函数测试结果如图DOM解析器函数内建的DOM解析器函数是PHP的核心组成部分,可以在PHP中处理XML文档。初始化XML解析器,加载XML文档,并将它输出,测试代码如下:读取C盘Windows文件夹下的win.ini文件,测试结果如图。SimpleXMLElement()函数SimpleXMLElement()函数是PHP5提出的XML文档处理函数,它可以基于XML文档、字符串或DOM对象直接构造出SimpleXMLElement对象。SimpleXMLElement()函数可以对属性、子节点和XPath进行操作,测试代码如下:还是以读取win.ini文件为例,测试结果如图。任务2XML外部实体漏洞代码审计03.学习环境搭建、漏洞分析、漏洞利用CLTPHP5.5.3环境安装本任务使用CLTPHP5.5.3,在部署好源代码后,在本地创建cltphp_db数据库,导入程序中提供的cltphp_db.sql文件。编辑/app/database.php文件,修改配置文件中的数据库信息,保证数据库可以正常连接。CLTPHP5.5.3环境安装在编辑成功后即可访问主页CLTPHP5.5.3漏洞分析在/app/wchat/controller/Wchat.php文件中,可以看到先通过file_get_contents('php://input')函数接收XML数据,再通过simplexml_load_string()函数将XML数据转换为SimpleXMLElement对象,然后将其赋值给$postObj并进行条件判断,当MsgType=text时,会进入MsgTypeText()函数。代码如下:CLTPHP5.5.3漏洞分析接下来,跟踪MsgTypeText()函数。此函数用于返回文本消息的回复内容,首先会判断用户输入的text,其次会判断参数$contentStr是否为数组,最后将其放到event_key_news()函数中进行处理,代码如下:CLTPHP5.5.3漏洞分析继续跟踪event_key_news()函数。在/extend/clt/WchatOauth.php文件中,返回了文本消息组装XML,可以看到包括<ToUserName>、<FromUserName>、<CreateTime>、<MsgType>、<Content>、<FuncFlag>这6个节点,其中的<ToUserName>节点是可以控制的,这样我们就可以通过引入外部实体来进行攻击了,代码如下:CLTPHP5.5.3漏洞利用由于问题出现在Wchat控制器下面,因此我们可以直接访问/index.php/wchat/wchat/getMessage.html,获取对应数据包并传入XML数据,代码如下:CLTPHP5.5.3漏洞利用其中,MsgType为text类型,ToUserName为我们引入的外部实体,读取的文件为C:/windows/win.ini,测试结果如。项目复盘根据

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论