XXE-1靶场

靶机地址:https://www.vulnhub.com/entry/xxe-lab-1,254/

靶机描述:

Haboob Team made this virtual machine regarding the published paper "XML External Entity Injection - Explanation and Exploitation" https://www.exploit-db.com/docs/45374 to exploit the vulnerability in a private network. We hope that you enjoy the challenge!

The challenge is right here:  http://IP-ADDRESS/xxe

Haboob团队制作了这个虚拟机,涉及到发表的文章"XML外部实体注入-解释和利用"https://www.exploit-db.com/docs/45374 来利用私人网络中的漏洞。我们希望你喜欢这个挑战!挑战就在这里:http://IP-ADDRESS/xxe

困难程度:简单

靶机搭建完成后,网络模式采用NAT,与kali攻击机NAT共处一个网段,本次实验全程采用kali操作。

先用arp-scan工具进行扫描。

发现靶机的ip地址为192.168.13.134。

然后用namp进行扫描

发现靶机开放80端口,HTTP服务,中间件版本为Apache2.4.27,同时探测到robots.txt及_/xxe/* /admin.php等路径。

之后使用gobuster目录扫描,若没有可使用apt install gobuster进行安装,此处gobuster dir为目录扫描模式,-u指定URL,-w指定目录字典,-o指定输出文件

发现robots.txt文本文件,用于告诉搜索引擎的爬虫(机器人)哪些页面或目录可以被访问,哪些不可以,通常位于网站的根目录下。

用curl访问一下robots.txt

发现存在两个路径/xxe和/admin.php,通过浏览器访问,分别是两个登录界面,应该是前后台的关系。

查看一下页面源码,没什么隐藏信息,但是声明了XHTML 1.0 Transitional 文档。与本靶机的标题XXE相关,该标准已过时,容易构造XSS或XXE攻击

使用burpsuite对登录包进行拦截,测试XXE。声明DTD。

这里定义了一个外部实体(cjc),它可以被用来读取服务器上的任意文件。这里尝试读取 /etc/passwd 文件成功,证明此处存在XXE漏洞。

此处虽然可以查看标准路径的文件内容,但是我们还无法确定其网站源码的绝对路径,所以此处需要配合相对路径测试,利用robots.txt中的/admin.php,该文件应该与当前界面处于同一级目录

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

上面代码利用了 PHP 的过滤器功能,通过 php://filter 读取 admin.php 文件的内容并进行 Base64 编码。服务器解析这个 XML,读取 admin.php 的内容,并进行 Base64 编码,返回的结果是编码后的字符串,攻击者可以解码以获取源代码。

注意:Base64 编码可以将二进制数据转换为文本格式,便于在 XML 或其他文本格式中传输。这种方式可以避免某些字符导致的解析问题。不要想当然直接copy命令,需要了解为什么需要这么做。

文本格式:Base64 编码将二进制数据转换为 ASCII 字符串,使其适合在 XML 或其他文本格式中传输,避免了二进制数据的处理问题。

避免特殊字符:在 XML 中,某些字符(如 <、>、&)具有特殊含义,直接包含这些字符可能导致解析错误。Base64 编码则可以避免这些问题。

这里将response响应包中的内容copy to file保存到本地。删除无关信息只留下源码

然后进行base64解码输出,此处文件太长,使用head先展示一下

查看源码内容,可以发现其存在账户及密码。

此处我们拿到了账号administhebest,密码为加密字段e6e061838856bf47e1de730719fb2609。通过md5解密拿到密码明文。

此时可以登录后台界面。

同时在源码中还存在一段flag保存位置的代码,表明flag在/flagmeout.php中。

直接访问该页面显示404,原因是因为虽然这里给的是/flagmeout.php,但实际上flag是存在于/xxe目录下的,所以要在前面拼接/xxe。或者可以继续尝试XXE来读取内部的源码。通过拼接xxe后访问为白屏,检查页面提示

<!-- the flag in (JQZFMMCZPE4HKWTNPBUFU6JVO5QUQQJ5) -->

对密文进行解密,此处为先base64加密后base32加密。

base32与base64区别

1. 检查长度

Base32 编码的字符串通常是 8 的倍数。

Base64 编码的字符串长度通常是 4 的倍数,并且可能以 = 结尾。

2. 字符集

Base32:仅包含字母 A-Z 和数字 2-7。

Base64:包含字母 A-Z、a-z、数字 0-9,以及 + 和 / 字符。

输出flag保存在flag.php中,这时候我们就可以利用之前的XXE配合file伪协议读取源码

保存到本地,对文件内容进行修改。

看似用php编写,使用了多个数组和变量,通过自增运算符 ++ 来动态生成和修改内容。最后的 $_($_); 表示将构造的字符串作为代码执行,这是 PHP 中的 eval() 函数的典型用法。可以在本地搭建apache+php服务(无数据库),然后尝试访问看看内容。

注意此处要在原代码前后添加<?php ?>

本地访问URL,可得到内容flag Failure evaluating code: SAFCSP{xxe_is_so_easy} 。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值