0x00 准备
下载连接:https://download.vulnhub.com/matrix-breakout/matrix-breakout-2-morpheus.ova
介绍:
This is the second in the Matrix-Breakout series, subtitled Morpheus:1. It’s themed as a throwback to the first Matrix movie. You play Trinity, trying to investigate a computer on the Nebuchadnezzar that Cypher has locked everyone else out from, which holds the key to a mystery.
Difficulty: Medium-Hard
0x01 主机信息收集
kali的IP地址:192.168.119.128
探测目标主机的IP地址:netdiscover -i eth0 -r 192.168.119.128/24
目标主机的IP地址:192.168.119.135
探测目标主机的开放端口:nmap -sV -p 1-65535 -A 192.168.119.135
开放了22端口,openssh8.4;80端口,apache httpd2.4.51;81端口,nginx 1.18.0。
0x02 站点信息收集
访问80端口:http://192.168.119.135/
探测这个站点的目录结构:dirsearch -u 192.168.119.135
只扫描出来两个,这两个目录看了一下都没有什么有效的信息。
再访问一下81端口,是一个登录弹窗:
这里试了一下常规的几个弱口令,以及空密码之类的都无法登录。
再用ffuf进行文件爆破,执行命令:ffuf -u http://192.168.119.135/FUZZ -w /usr/share/dirbuster/wordlists/directory-list-2.3-medium.txt -c -ic -e .txt,.zip,.php,html
其中:-c参数是启用彩色输出,在终端中用不同的颜色显示不同的输出内容,帮助用户快速区分重要信息(例如状态码、长度、词数等)。-ic参数是启用大小写不敏感,在匹配爆破结果的时候忽略大小写。-e参数用于指定文件的扩展名,这里制定了几个比较敏感的类型。
可以看到 graffiti.txt 和 graffiti.php 两个文件。其中 txt文件是一些提示语,php文件可以输入message,并且显示在页面上:
0x03 漏洞查找与利用
1. 文件上传
http://192.168.119.135/graffiti.php 页面中会将我们输入的内容显示出来,可以考虑试一下xss,输入:
发现可以正常弹窗。
提交数据00000,再抓包看一下:
message参数后面是提交的数据,后面还跟了一个file参数,是前面扫描出来的一个文件,访问一下:http://192.168.119.135/graffiti.txt
发现之前提交的数据都在这个txt文件中展示出来了,也就是说message参数提交的内容会被保存到file参数中的文件,那就可以利用这个来上传webshell。
可以用伪协议查看一下graffiti.php的源代码。
要使用 PHP 伪协议读取 PHP 文件的源代码,可以通过 php://filter 配合 一些过滤器来获取文件的原始内容,而不执行其中的 PHP 代码。这里可以使用base64编码的过滤器convert.base64-encode
,将读取的数据进行 Base64 编码。再对获取到的内容进行解码。
把file参数的内容换成:php://filter/read=convert.base64-encode/resource=graffiti.php