XXE靶场练习

发布于 2021-10-25  663 次阅读 本文共1665个字


(本文最后更新于2021.10.25 22:24)

一:简述

  1. 运行环境 :kali linux && 靶机VMware-XXE靶场
  2. 目标:获取靶机flag
  3. 靶机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加密:

解码链接:https://www.cmd5.com/

然后尝试登录/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

实验到此结束


粉色的花瓣,美丽地缠绕在身上。依在风里。