靶机描述
- XXE靶机,目标获取flag。
- (下载链接:https://download.vulnhub.com/xxe/XXE.zip)。
渗透测试过程
端口扫描
- 使用nmap扫描发现开放80,5355端口。
访问web服务
- 1.首先访问80端口,页面是Ubuntu的默认页面。
- 2.使用御剑扫描web目录,发现存在robots.txt目录。
- 3.访问robots.txt目录,发现存在/xxe和/admin.php目录。
- 4.访问/xxe目录是一个登录窗口,尝试弱口令进不去。
- 5.访问/admin.php,这里直接报Not Found,试试其他思路,将admin.php放在/xxe目录后面,也发现一个登录页面。
- 6.这里突然想到,本题是练习xxe漏洞,所以尝试使用xxe漏洞的思路,这里我们在/xxe目录下,登录使用burpsuite抓包,查看发现此处果然是通过XXE外部实体进行请求的。
- 7.利用XXE漏洞,尝试获取/etc/passwd文件内容,构造payload如下,将其插入到xml文档之间,同时修改&admin;。
`<!DOCTYPE GVI [
<!ENTITY admin SYSTEM "file:///etc/passwd" >]>`。
获取成功:
- 8.尝试获取admin.php文件内容,因为这里没有admin.php文件的绝对路径,所以使用php伪协议获取:
`<!DOCTYPE GVI [
<!ENTITY admin SYSTEM "php://filter/read=convert.base64-encode/resource=admin.php" >]>`
- 9.使用base64进行解码,查看admin.php的源码,找到一对用户名和密码administhebest/admin@123。
密码是经过md5加密的,使用在线的SOMD5解密后得到密码为:admin@123。
- 10.使用密码进行登录,发现/xxe目录是登录不了的,/xxe/admin.php目录登录成功,发现Flag字样。
- 11.点击【Flag】,发现找不到该页面:flagmeout.php。
- 12.将flagmeout.php放在/xxe目录下,继续查看源码,发现这里提示Flag在这段编码中。
- 13.可以看出,这是一个base32的编码,使用工具解密,解码后为base64加密。
- 14.继续解码,解码出的明文是
/etc/.flag.php
。
- 15.继续使用xxe获取该文件内容,得到了一堆类似编码的东西,好像是JavaScript 代码的webshell。
- 16.使用源代码审计工具执行该段代码,最终获得flag:SAFCSP{xxe_is_so_easy} .