【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

\ \]\> \\&hacker;\ ![](https://img-blog.csdnimg.cn/img_convert/89cd29e093259018c75bda4e748e90ef.png) #### 3.1.2读取远程文件 \ \](http://10.1.36.65/1.txt "http://IP地址/文件\">") \]\> \\&xxe;\ ### 3.2POST型有回显漏洞利用 在XXE靶场中随意输入用户名密码等信息然后抓包 ![](https://img-blog.csdnimg.cn/img_convert/f20d43cd00e142e9af7c7a25f01617c4.png) 发现⽤户密码处格式类似于xml⽂档格式,因此可在此处测试能否解析XML⽂档。 测试是否能解析XML文档 ![](https://img-blog.csdnimg.cn/img_convert/3bb317d0fc2f1cec01359cbbc23176b2.png) 能够解析,构造恶意的payload并执行 ![](https://img-blog.csdnimg.cn/img_convert/c251f1dee2f44fe196d7dd1f1b19344f.png) 本地文件读取成功。 远程文件读取同上诉步骤一样,将文件地址改为ip地址 #### 3.2.1读取本地文件php源码 \\\\&xxe,\\11\\ 在源码中写入经过编码的一句话木马即可 ### 3.3无回显漏洞利用 当利用上诉办法中的payload发现无回显时候,这个时候就要用的无回显漏洞利用 1. 配置kali 在kali端开启Apache服务 2. 配置kali中的evil.dtd文档 3. 编写payload 4. 查看结果 ### 3.4探测内网端口 #### 3.4.1探测指定端口 构造payload,同构造读取远程文件相同。 添加要探测的端口号,观察回显时间,若时间短,则是开启状态 ![](https://img-blog.csdnimg.cn/img_convert/d2e7fef5cb9f3ae4062a8528da1610b7.png) #### 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过滤 预定义字符转义:\< \<\> \>\& \& amp ; ' \" 过滤用户提交的XML数据,关键词:SYSTEM和PUBLIC 禁用外部实体:libxml disable entity loader(true);

相关推荐
KKKlucifer2 小时前
数据安全合规自动化:策略落地、审计追溯与风险闭环技术解析
人工智能·安全
wanhengidc2 小时前
云手机 高振畅玩不踩坑
运维·服务器·安全·web安全·智能手机
易连EDI—EasyLink3 小时前
易连EDI–EasyLink实现OCR智能数据采集
网络·人工智能·安全·汽车·ocr·edi
@insist1233 小时前
信息安全工程师考点精讲:身份认证核心原理与分类体系(上篇)
大数据·网络·分类·信息安全工程师·软件水平考试
SmartRadio3 小时前
ESP32-S3 双模式切换实现:兼顾手机_路由器连接与WiFi长距离通信
开发语言·网络·智能手机·esp32·长距离wifi
JS_SWKJ4 小时前
网闸与光闸深度解析:高安全隔离设备核心知识与选型
安全
AIwenIPgeolocation4 小时前
出海应用合规与风控平衡术:可信ID的全球安全实践
人工智能·安全
_.Switch4 小时前
东方财富股票数据JS逆向:secids字段和AES加密实战
开发语言·前端·javascript·网络·爬虫·python·ecmascript
长安链开源社区4 小时前
长安链2.3.8生产版本发布,安全、开放、灵活的企业级区块链底座
安全·区块链
金色光环5 小时前
FreeModbus释放底层的 TCP 监听端口
服务器·网络·tcp/ip