通过Pentester_Lab学习XML注入

本文介绍了通过Pentester_Lab学习XML注入的过程,讲解了XML注入的概念、ENTITY实体以及漏洞产生的原因和危害。通过两个实例展示了如何利用XML注入读取文件内容和获取敏感信息。并提供了漏洞挖掘方法和防御措施。
摘要由CSDN通过智能技术生成

Pentester Lab是一款老外编写的Web渗透练习环境。

 

XML注入相关概念:

XML是一种可扩展标记语言,可以理解为HTML的扩展语言,一般用于数据存储、数据传输、数据共享,其中DTD文档来解释XML文档。XML必须包含根元素,所有的标签都要闭合,对大小写敏感,并且属性值需要加引号。

XML注入即XXE(XML外部实体注入),是指利用可控的参数或入口来加载不可控的参数或代码,造成不可控的运行结果。

 

ENTITY实体:如果在XML文档中需要频繁使用某一条数据,可以预先给这个数据起一个别名。即一个ENTITY,然后再在文档中调用它。

XML定义了两种类型的ENTITY,一种在XML文档中使用,另一种在为参数在DTD文件中使用。

定义语法:<!DOCTYPE  文件名 [ <!ENTITY  实体名 "实体内容"> ] >

定义好的ENTITY在文档中通过“&实体名;”来使用。

正常来说,DTD分为内部DTD与外部DTD,内部DTD包含在XML文档中,外部DTD则通过URL引用。一个DTD文件是以.dtd结尾的文本文件 。前面还要加上SYSTEM,但是如果此处没有任何过滤,我们完全可以引用系统敏感文件的,前提是页面有回显,否则你只引用了文件但不知道文件内容。

 

 

漏洞产生原因:Xfire使用了STAX解析XML导致XML实体注入发生。

1、直接引入XML外部实体

2、未加任何过滤直接parse

漏洞危害:

1、任意文件读取:通过外部实体引用,可以获取文件内容

第八关的网页源代码如下: ```html <!DOCTYPE html> <html> <head> <title>Web for Pentester</title> <meta charset="UTF-8"> </head> <body> <h1 align="center">Welcome to Web for Pentester</h1> <div align="center"> <img src="8.jpg" alt="web for pentester"> </div> <div align="center"> <form method="post" action="index.php"> <input type="text" name="flag"> <input type="submit" value="Submit"> </form> </div> </body> </html> ``` 从代码中可以看出,这是一个简单的表单,让用户输入 flag 并提交表单。flag 会被提交到 index.php 页面。 我们可以尝试输入一些字符串进行测试,但是没有提示错误或者正确的信息。因此,我们需要分析 index.php 页面的代码,看看它是如何处理 flag 的。 ```php <?php if (isset($_POST['flag'])) { $flag = $_POST['flag']; if (preg_match('/^[a-zA-Z0-9]+$/', $flag)) { if (strlen($flag) < 10) { echo 'Flag is too short'; } elseif (strlen($flag) > 20) { echo 'Flag is too long'; } elseif ($flag === 'web_for_pentester') { echo 'Congratulations! You have completed the challenge'; } else { echo 'Incorrect flag'; } } else { echo 'Invalid characters found'; } } ?> ``` 从代码中可以看出,flag 必须由字母和数字组成,并且长度必须在 10 到 20 之间。如果 flag 符合要求,那么就会与 "web_for_pentester" 对比。如果匹配,就输出 "Congratulations! You have completed the challenge"。否则,输出 "Incorrect flag"。 我们可以尝试输入不同长度的字符串,例如 "abc"、"12345678901234567890" 和 "web_for_pentester",从而找到正确的 flag。 因此,第八关的 flag 是 "web_for_pentester"。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值