在这篇文章中,将快速浏览pentester academy
在 attackdefense
平台上提供的 CTF
挑战。在此挑战中,通过升级到其他一些用户并最终升级到 root
用户来找到 4 个flag
因此,在生成 shell
之后,登陆了student
用户 shell
。这是一个 uid 999 和 gid 999 的低权限 shell
第一步是检查是否有任何异常的 suid
二进制文件。在这种情况下,发现/usr/bin/read-submission
文件属于teacher
并且可以从当前登录用户执行
在运行文件程序时,发现它显示了一些不同科目的分数。它可以在程序中硬编码或从某个文件中读取。如果它是硬编码的,那么文件就没用了,但如果它正在读取文件或调用其他程序,就有可能升级到 root
用户。
在读取read-submission
中的字符串时,发现有一些名为read-file
的文本。现在,它可以是文本文件或读取提交文件的程序。
所以在根目录中查找名称后,很明显read-file
是程序文件。由于此程序是从read-submission
的 PATH
变量调用的,因此标志着水平提权的迹象。如果开发人员使用了绝对路径,则无法进行提权
已经创建了与read-file
同名的漏洞利用文件,并拥有生成具有用户teacher
权限的交互式 bash shell
的代码。当执行read-submission
命令时,派出teacher
用户的 shell
在teacher
用户的主目录下,发现了第一个flag
文件FLAG1
,没有发现其他suid
漏洞文件。发现存在一个备份目录,所以可能有一个 cron
作业
在查找账号时,发现还有另一个用户admin
。这次利用 cron
作业来获取 admin
用户的 shell。
发现admin
用户的主目录包含一个 FLAG2
文件,但它不可读。
看到 tar
存档包含来自 /home/teacher/backup
的文件。现在检查 cron
作业是否通过通配符包含所有文件以及存档频率,这意味着 cron
作业运行的频率
可以看到,cron
作业每分钟运行一次。最后一次执行是在18:08和18:09。当它在等待数小时后运行时,这将是一个令人沮丧的情况。
因此,创建了另一个名为myfile
的文件,发现 tar 实用程序确实通过 glob
模式 ( *) 包含文件。这可能会导致一个问题,可以欺骗 tar
以调用脚本的用户的权限生成反向 shell
创建一个恶意文件,它会向本地4444端口发起连接,连接成功,会启动一个bash
。在此之后,当在同一端口上启动 netcat
侦听器时,它以admin
用户的权限从 cron 作业获得反向连接
为了获得交互式 shell
,从 python
生成了一个 PTY shell
。因为现在拥有admin
用户的主目录,所以可以检索 FLAG2
文件
由于还安装了 sudo
,在检查 sudo
特权时,发现当前用户(admin
)可以以 root
用户身份从 sudo
运行/usr/bin/apache2
而无需输入任何密码。让人意外的是还配置了env_keep+=LD_PRELOAD
由于 LD_PRELOAD
环境变量可以传递给 apache2
程序,编写并编译了一个简短的共享对象,以便在库加载 apache2
后立即生成 bash
正如预期的那样,当 LD_PRELOAD
从/tmp/exploit.so
加载共享对象时,获得了 root
用户 shell
发现系统中只有3个标志,并检索了第3个。但是CTF
描述中提到了 4 个标志。所以这意味着也许处于容器化环境中,是时候突破它了
查看了进程列表后确认在一个容器中。第一个进程是/bin/bash /startup.sh
,它永远不会发生在实际的 Linux
操作系统上。Linux
中的第一个进程始终是/sbin/init
,它派生并启动其他进程。所以现在很明显,需要打破这种容器化的环境
在寻找能力时,发现这个容器幸运地具有 cap_sys_module
。这意味着可以将内核模块注入到正在运行的系统中,它将在 netcat
上提供反向连接
因此,基于 rootkit
知识和 Linux
能力,内核模块已准备好注入。在插入之前,已经在一个单独的shell
选项卡上启动了 netcat
连接,因为这将提供一次性反向连接。
正如预期的那样,在 netcat
会话上收到了一个反向连接,它来自宿主机,因为在这种情况下,第一个进程是 /sbin/init
,随后的进程由内核创建
在root
的主目录中找到了最后一个标志文件FLAG4
,它始终是/root