(本文最后更新于2021.10.25 22:24
)
一:简述
- 运行环境 :kali linux && 靶机VMware-XXE靶场
- 目标:获取靶机flag
- 靶机XXE下载链接:https://download.vulnhub.com/xxe/XXE.zip
二:基础知识
要了解xxe漏洞,那么一定得先明白基础知识,了解xml文档的基础组成。
XML用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。XML文档结构包括XML声明、DTD文档类型定义(可选)、文档元素
XXE-"xml external entity injection" .既"xml外部实体注入漏洞"。·
概括一下就是"攻击者通过向服务器注入指定的xml实体内容,从而让服务器按照指定的配置进行执行,导致问题".
也就是说服务端开启接收和解析了来自用户端的xml数据,而又没有做严格的安全控制,从而导致xml外部实体注入。
一个典型的xml代码:

攻击代码示例:
显示文字:判断注入点

远程调用DTD:

显示/etc/passwd:

获取PHP源码:
扩展:通过php伪协议读取php文件内容:读出的源码经过了base64编码,不经过base64编码的话会直接执行、

三:实施
1:VM中安装XXE靶场
把下载好的靶场解压:

再创建一个用于存放的文件夹:

在VM里面添加这个靶场,直接将xxe.ovf拖入,然后选择上方的文件夹:

然后开机,将网络适配器设置为NAT模式(最好不要设置为桥接,该实验会对局域网有影响)

2:使用Kali
将kali也配置为NAT模式(保证和靶机在同一网段,我这里是都连接在NAT8网卡上,相当于连接同一台交换机)
扫描IP:

这里是局域网很好判断主机,.1是kali的网关,.2是DNS服务器地址,.254是VM的虚拟地址,则判断出靶机地址是.130
masscan快速扫描端口:

再用namp详细扫描

发现开启了80端口,访问试试:

发现是一个默认的apache页面,火狐的插件还显示了操作系统等
铸剑扫一下(或者kali的dirb命令):

发现网站根下有两个目录
访问试试:


第一张图提示了有个/xxe界面,访问一下:

发现是一个登陆框, BP抓包尝试一下:

发现是xml框架,发送给重发器:

发现对错误的用户名有回显
构建代码:

发现只有一个root用户可以登录
刚刚还有一个admin.php
用php://filter/read=convert.base64-encode/resource=admin.php 来获取base64编码之后的网页源码:
- <?xml version="1.0" encoding="UTF-8"?>
- <!DOCTYPE r [
- <!ELEMENT r ANY >
- <!ENTITY test SYSTEM "php://filter/read=convert.base64-encode/resource=admin.php">
- ]>
- <root><name>&test;</name><password>2</password></root>

用火狐HackBar插件进行Base64解码(其他工具也可):

观察解码后的PHP源码发现把用户/密码写出来了:

把密码解码,用的MD5加密:

然后尝试登录/xxe:

发现报错,尝试下/xxe/admin.php

发现出现了个flag,点击:

但是点击后报错了,发现路径变了,为flagmeout.php
尝试BP抓包,用base64解码:

解码:

再Base32解码:
解码链接:https://www.qqxiuzi.cn/bianma/base.php

再Base64解码:

发现出现了flag字样,应该离成功不远了
尝试编辑xml代码并BP抓包:

据大佬说是php变形的webshell,但是这个webshell没有添加php头。
要想知道文件内容也很简单,浏览器可以访问并识别php文件,linux也自带php识别功能。但是要记着写这个php文件的时候要添加<?php ?>

然后利用小皮的LNMP环境解析:
拿到flag

实验到此结束
Comments | 1 条评论
有点东西