环境搭建
靶机下载:https://download.vulnhub.com/xxe/XXE.zip
下载完后,选择OVF文件,打开方式选择VMware,存储位置看你自己,然后打开靶机
需要我们去登录,这里是没有现成的信息可以让我们登录(Vulnhub的靶场就是比较贴近于实战的环境,这里登录进去就可以直接看到flag,所以它不会直接给我们登录信息),于是就需要通过其他一些渗透手段来获取登录信息
信息收集
首先第一步就是信息收集,使用nmap扫描一下,看看它的端口开放情况,由于我这里靶机和攻击机网络设置都是NAT模式,因此它们是位于同一网段的,通过ipconfig命令查看攻击机ip
查到ip后,就可以使用命令nmap -sS 192.168.190.1/24来查看该网段内所以主机开放的端口,通过扫描出的结果分析,192.168.190.252这个ip地址就极有可能是目标主机的地址,并且有一个开放的80端口
漏洞发现
接下来,尝试去访问刚才拿到的ip地址(192.168.190.252)
访问后可以看到是一个Ubuntu介绍界面,由于是Web类的应用程序,因此这里可以对它进行目录扫描
发现有一个robots.txt文件(知识补充:robots.txt文件是网站所有者用来指示搜索引擎爬虫的一个重要文件,其中包含了网站拒绝访问的规则和指示。爬虫在抓取网页之前会先查看目标网站的robots.txt文件,根据其中的规则来确定哪些页面可以被抓取、哪些页面不能被抓取。因此这个文件通常是目录扫描看的第一个文件),查看该文件,如下:
会看到有一个xxe文件,尝试访问它:
访问后,返回一个登录界面,常规操作,抓包分析:
会看到数据包中有xml语言,这是判断XXE漏洞的标志信息,因此前面就算不知道是什么漏洞,到这里也能推断出是XXE漏洞,于是直接利用XXE攻击
漏洞利用
这里就可以利用XXE漏洞来读取文件,但是直接读取文件需要知道文件的路径,因此这里采用php的伪协议来读取文件,就不需要用到文件的所在路径,构造payload如下:
<!DOCTYPE r[
<!ELEMENT r ANY>
<!ENTITY admin SYSTEM "php://filter/read=convert.base64-encode/resource=admin.php">
]>
把包放出去后,可以看到返回了文件里面的信息,不过这里采用了base64加密
解密文件内容:
解密后可以看到文件中有username以及password的信息,这里password很明显是md5加密了,于是利用工具对它进行解密
得到密码为:admin@123,我们现在拿到了账号密码就可以去登录了,但是这里需要注意:我们读取的文件是在xxe目录下的,而不是那个根目录下的admin.php,登录页面如下:
登录后,可以看到页面中出现了flag字样
直接点进去查看,但是发现这个地址下的php文件不可读,因此利用刚才的XXE漏洞来读取该文件
需要注意:这个文件是位于网站根目录下的,因此这里需要跨级读取文件
解密文件:
发现还有加密,很明显是Base32的加密(如果对密码编码不熟的,可以看我之前的博客:CTF常见密码编码合集),在线解密:
Base64解密:
接着利用漏洞读取flag.php文件
解密文件:
解密后得到一串看不懂的符号串,我查看资料说的是php代码,然后就直接去运行:
运行后就拿到了flag,到这里“游戏”就结束啦~
梳理回顾
- 有了目标主机后,首先就是信息收集,得到目标主机的ip地址以及端口号;
- 访问目标主机,Web应用程序,直接目录扫描;
- 得到敏感文件robots.txt,访问该文件,得到敏感信息xxe目录;
- 访问该目录,得到登录框,抓包分析;
- 利用XXE漏洞读取文件;
- 得到admin.php目录下的账号密码,登录得到不可访问的flagmeout.php文件;
- 利用XXE漏洞读取,得到flag.php文件,读取该文件,获得php代码;
- 最后运行该php代码得到flag
这里面较难的就是最后一步的php代码,我没怎么接触过这种,所以做的时候这里就卡住了,还有就是运行php代码的时候,网上太多在线的运行环境了,有的根本就跑不出来,很容易误导。