这个靶机有个知识点:端口碰撞,是我以前不曾知晓的,特推荐。
当整个走完回头看,这个靶机设计得非常精彩,收获很大。
配置靶机:
在配置这个靶机的NAT网络、绕过Ubuntu21登录后,发现vi不正常,好在nano可用;有ens33接口但未激活,如下命令激活:
dhclient ens33
ifconfig -a ens33
==========
最后还是按以下修改成eth0,
====================================
工作开展:
arp-scan 发现靶机ip为192.168.137.132;
1、nmap扫描,发现ssh的22端口有filtered,如下:
2、发现有80端口,遂扫描目录,
3、发现有上图红框中列出的目录,分别查看,
wordlist.txt,是个字典文件;
1.txt中为base64编码,解码出来为10000,可能是端口号;
2.txt中一串,问了GPT,如下回答:
是Brainfuck编码,https://www.splitbrain.org/services/ook解下,是:4444,还是端口;
这里用GPT解码时出现了错误,但它发现了问题所在,挺好玩的,如下:
全部下载下来。
访问下80端口,原来是一张open字样的页面,看下源码,有登录后台的url,同时还有个注释掉的提示:激活端口碰撞以及一个用户名jubiscleudo,还有支持.jpg文件的字样;
"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 - [email protected]"
4、扫描.jpg文件
发现有个3.jpg文件,当下来,隐写解码,是个端口号,
这样就有3个端口号了:10000,4444,65535
5、打开config.php、login.php,
数据库的内容;
用户名和密码;用户名有了:jubiscleudo,密码还不知道;
6、端口碰撞打开ssh的22端口
端口碰撞是一种攻击技术,它利用了服务器上同时侦听多个服务的多个端口。攻击者可以向这些端口发送精心设计的请求,导致服务器崩溃或泄露敏感信息。从外部打开防火墙上的端口的方法。一旦收到正确的连接请求序列,防火墙规则就会被动态修改,以允许发送连接请求的主机通过特定端口进行连接。
这里用到一个攻击命令:knock,
这里GPT给出了详细的用法。
在《鸟哥私房菜》中有关于knockd的描述(https://linux.vbird.org/linux_server/others/knockd.php),如下图:
在这里碰撞时有3个端口 10000,4444,65535,必须和靶机中的knockd.conf里配置的序列保持一致,端口碰撞才有效果,如下图,
在这过程中发现了几个问题,前期一直无法knock成功,后来修改了如下的几个参数才可以的,
这里原来设置超时为5秒,后来改大了些,才ok。
7、破解ssh密码
hydra -l jubiscleudo -P wordlist.txt 192.168.137.132 ssh
密码为:onlymy
8、登录ssh
用户名为hackable_3,密码为TrOLLED_3;切换下用户,
9、切换用户到hackable_3
10、lxd提权
当前用户具有lxd权限时(通过id命令可以查看),可以通过创建任意镜像,并将当前系统根目录挂载到镜像mnt目录下,然后通过chroot命令即可获取当前系统的root权限。
a)首先,在攻击机中下载好镜像,生成tar包,
git clone https://github.com/saghul/lxd-alpine-builder.gitcd lxd-alpine-builder ./build-alpine python3 -m http.server 9000
b)在靶机中执行,上传到靶机中
导入image,加载到lxd中
初始化,一路回车,
通过以下四步命令的执行,获得root权限
含义:
(1)lxc init cec6171bc7ab ignite -c security.privileged=true
(这里lxc init后面跟的是image的Fingerprint)
命令的详细解释如下:
-
lxc init
:这会初始化一个新的容器。 -
cec6171bc7ab
:这是要初始化新容器的现有容器的ID。 -
ignite
:这是你给新容器的名称。 -
-c security.privileged=true
:这个参数将容器设置为特权模式。
(2)lxc config device add ignite mydevice disk source=/ path=/mnt/root recursive=true
这条命令用于向名为 "ignite" 的容器添加一个名为 "mydevice" 的设备,该设备是一个磁盘设备。具体的参数设置如下:
-
disk
:指定要添加的设备类型为磁盘。 -
source=/
:指定设备的源路径为根目录。这表示将根目录挂载到容器中的设备。 -
path=/mnt/root
:指定设备在容器中的挂载路径为 "/mnt/root"。换句话说,根目录将被挂载到容器的 "/mnt/root" 目录下。 -
recursive=true
:指定挂载操作应该递归进行,以便包含源路径下的所有内容。
这条命令的完整含义是将宿主机的根目录挂载到名为 "ignite" 的容器中的 "/mnt/root" 目录下,并且这个挂载操作是递归的,会包含根目录下的所有内容。
(3)lxc start ignite
这个命令用于启动名为 "ignite" 的容器。当容器处于停止状态时,使用此命令可以将其启动并开始运行容器内的服务和应用程序。
(4)lxc exec ignite /bin/sh
这个命令用于在名为 "ignite" 的容器中执行 "/bin/sh" 命令,从而启动一个交互式的 shell 会话。在这个 shell 会话中,你可以执行各种命令来与容器进行交互,例如查看文件、安装软件、配置环境等。
11、flag
12、有个knockrestart.sh
总结:虽然流程走完了,但有很多知识点值得回味;
现将流程归纳如下:
22端口被filter--->发现用户名--->三个文件分别解码出3个端口号--->knock碰撞--->打开ssh的22端口--->ssh登录--->备份文件中发现数据库登录用户--->切换到此用户--->属于lxd用户组--->上传挂载包到靶机--->执行提权。
原文始发于微信公众号(MicroPest):端口碰撞:Hackable3靶机
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论