Good in study, attitude and health

  • VMware VCenter Server漏洞调试环境搭建

    0x00 前言 本文记录从零开始搭建VMware VCenter Server漏洞调试环境的细节。 0x01 简介 本文将要介绍以下内容: 下载vCenter上的文件 vCenter服务器开启调试模式 本地使用IDEA进行远程调试 0x02 下载vCenter上的文件 为了能够从vCenter上下载文件,这里选择通过SSH连接的方式实现文件下载 1.开启SSH 通常可选择以下两种方法: (1)通过浏览器配置 访问https://<url>:5480 在Access页面下进行开启,如下图 (2)通过虚拟机配置 访问虚拟机登录页面,按F2进入配置页面,在Troubleshooting Mode Options下进行开启,如下图 2.切换到Bash shell 使用SSH登录至vCenter时,默认为Appliance Shell,需要输入shell命令才能进入Bash shell 如下图 这就导致了无法直接使用scp等命令进行文件上传和下载 这里需要将默认的Appliance Shell切换到Bash shell,方法如下: (1)使用SSH登录至vCente (2)输入shell命令进入Bash shell (3)输入以下命令设置默认环境: chsh -s /bin/bash root 如果返回结果如下: You are required to change your password immediately...

  • Pwn2Own 2021 Microsoft Exchange Server漏洞(CVE-2021-31196)利用分析

    0x00 前言 CVE-2021-31196是一个逻辑漏洞,利用前提是需要中间人攻击,并且还需要用户的交互操作,最后能够实现远程代码执行。 漏洞作者分享的技术文章: https://srcincite.io/blog/2021/08/25/pwn2own-vancouver-2021-microsoft-exchange-server-remote-code-execution.html 本文仅在技术角度记录自己的研究心得。 0x01 简介 本文将要介绍以下内容: 漏洞调试 利用思路 0x02 漏洞调试 1.漏洞摘要 在Exchange Server 2013或更高版本中,当管理用户在Exchange Management Shell中运行Update-ExchangeHelp或者Update-ExchangeHelp -Force命令时,处于特权网络位置的未经身份验证的攻击者可以触发远程执行代码漏洞 特权网络位置是指攻击者能够劫持域名http://go.microsoft.com/fwlink/p/?LinkId=287244 2.漏洞代码位置 按照原文中给出的资料,dnSpy打开文件C:\Program Files\Microsoft\Exchange Server\V15\Bin\Microsoft.Exchange.Management.dll 依次定位到Microsoft.Exchange.Management.UpdatableHelp -> HelpUpdater -> UpdateHelp() 3.漏洞逻辑 (1)使用Exchange Management Shell执行Update-ExchangeHelp命令或者Update-ExchangeHelp -Force命令 在Exchange Server 2013或更高版本中,支持Update-ExchangeHelp命令,用来检查本地计算机上Exchange Management Shell最新可用版本的帮助 Update-ExchangeHelp的限制期为24小时,如果在24小时内再次执行命令,需要加入-Force参数 执行命令后进入UpdateHelp()函数,开始后面的操作 (2)下载配置文件 UpdateHelp()函数中下载配置文件的代码如下图 DownloadManifest()的实现代码如下: internal void DownloadManifest() { string...

  • Confluence利用指南

    0x00 前言 Confluence是一个专业的企业知识管理与协同软件,也可以用于构建企业wiki。 前不久爆出了漏洞CVE-2021-26084 - Confluence Server Webwork OGNL injection,本文仅在技术研究的角度介绍Confluence的相关知识。 0x01 简介 Confluence环境搭建 利用思路 0x02 Confluence环境搭建 环境搭建的参考资料: Windows: https://confluence.atlassian.com/doc/installing-confluence-on-windows-255362047.html Linux: https://confluence.atlassian.com/doc/installing-confluence-on-linux-143556824.html 本文以Centos7搭建Confluence为例进行介绍 1.配置数据库 这里选择PostgreSQL,安装的参考资料: https://confluence.atlassian.com/doc/database-setup-for-postgresql-173244522.html (1)安装PostgreSQL 访问地址:https://www.postgresql.org/download/linux/redhat/ 获得安装命令,如下图 安装完成后查看运行状态: systemctl status postgresql-13 (2)配置PostgreSQL 设置允许其他程序访问数据库: 修改/var/lib/pgsql/13/data/pg_hba.conf 将METHOD改为trust,设置如下图 重启PostgreSQL: systemctl restart postgresql-13 补充:配置允许其他IP访问数据库 修改/var/lib/pgsql/13/data/pg_hba.conf 将ADDRESS改为0.0.0.0/0,如下图 修改/var/lib/pgsql/13/data/postgresql.conf 设置listen_addresses = '*',如下图 重启PostgreSQL: systemctl restart...

  • ProxyOracle利用分析2——CVE-2021-31196

    0x00 前言 在上篇文章《ProxyOracle利用分析1——CVE-2021-31195》介绍了获得用户Cookie信息的思路,本文将要介绍如何通过Padding Oracle Attack还原出用户明文口令 0x01 简介 本文将要介绍以下内容: 实现思路 部分开源代码 0x02 实现思路 实现Padding Oracle Attack的前提条件: 1.获得密文和密文对应的IV(初始化向量) 2.能够触发密文的解密过程,且能够知道密文的解密结果 对应到Exchange上面,具体信息如下: (1)获得密文和密文对应的IV(初始化向量) Cookie信息中的cadata对应密文,cadataIV对应IV (2)能够触发密文的解密过程,且能够知道密文的解密结果 我们通过dnsSpy反编译dll能够获得详细的解密过程,方法如下: 使用dnsSpy打开文件C:\Program Files\Microsoft\Exchange Server\V15\FrontEnd\HttpProxy\bin\Microsoft.Exchange.FrontEndHttpProxy.dll 依次定位到Microsoft.Exchange.HttpProxy -> FbaModule -> ParseCadataCookies(HttpApplication httpApplication) 如下图 得到触发密文解密过程的方法: 访问https://<url>/owa,发送GET数据包,Cookie中需要包含cadata、cadataTTL、cadataKey、cadataIV和cadataSig 密文解密结果的判断: 发送GET数据包后,默认进行302跳转,并在响应内容中标记是否解密成功 解密结果可以通过查看LogonReason的定义进行判断 如下图 从这里看出,0代表None,这里为格式错误,1代表Logoff,2代表InvalidCredentials,3代表Timeout,4代表ChangePasswordLogoff 我们在尝试解密时,当reason=2,代表解密成功 当reason=3时,代表Cookie已过期,此时无法实现Padding Oracle Attack 注: Exchange的Cookie有效期为12小时 0x03 部分开源代码 1.破解第0个分组的第8个字节 Python实现的完整示例代码如下: #python3...

  • ProxyOracle利用分析1——CVE-2021-31195

    0x00 前言 我和Evi1cg一起复现了ProxyOracle攻击链,本文仅在技术研究的角度记录研究ProxyOracle中的细节,分析利用思路。 0x01 简介 本文将要介绍以下内容: XSS复现 HttpOnly绕过 XSS平台搭建 伪造邮件 0x02 XSS复现 测试环境: Exchange Server IP: 192.168.1.1 用户登录后访问如下链接: https://192.168.1.1/owa/auth/frowny.aspx?app=people&et=ServerError&esrc=MasterPage&te=\&refurl=}}};alert(document.cookie)// 触发XSS,如下图 但是这里无法显示我们想要的Cookie数据,具体名称如下: cadata cadataTTL cadataKey cadataIV cadataSig 查看以上Cookie的HttpOnly属性,如下图 可以看到以上Cookie设置了HttpOnly属性,可用来防止XSS攻击,通过js脚本将无法读取到Cookie信息 0x03 HttpOnly绕过 为了能够读取受HttpOnly属性保护的Cookie信息,我们需要借助SSRF漏洞,控制Exchange服务器将Cookie信息发送至我们自己搭建的XSS平台 这里需要注意以下细节: 1.SSRF漏洞的选择 (1)CVE-2021-26855 能够访问外部XSS平台 能够使用ajax模拟用户发包触发SSRF漏洞 (2)CVE-2021-28480 能够访问外部XSS平台 无法使用ajax模拟用户发包触发SSRF漏洞(无法修改Cookie中的X-BackEndCookie) (3)CVE-2021-34473 无法访问外部XSS平台 因此,最终的选择为CVE-2021-26855 2.XSS平台搭建 由于我们借助了SSRF漏洞,控制Exchange服务器将Cookie信息发送至XSS平台,导致我们最终想要的Cookie信息位于Request Headers中 而现有的XSS平台大都是通过POST请求的参数来传递数据 为了解决这个问题,这里可以选择我之前开源的XSS平台,地址如下: https://github.com/3gstudent/pyXSSPlatform 只需要修改以下位置: 修改index.js,使用ajax模拟用户发包触发SSRF漏洞...

  • ProxyShell利用分析3——添加用户和文件写入

    0x00 前言 本文将要介绍ProxyShell中添加用户和文件写入的细节,分析利用思路。 0x01 简介 本文将要介绍以下内容: 添加用户的方法 文件写入的方法 利用分析 0x02 添加用户的方法 使用PyPSRP执行Powershell命令时,无法执行添加用户的操作 这是因为传递Password的值时需要执行Powershell命令convertto-securestring,而convertto-securestring不是Exchange PowerShell Remoting支持的命令 解决方法可以参考Orange的思路,通过调用本地Powershell,最终实现添加用户 参考资料: https://www.zerodayinitiative.com/blog/2021/8/17/from-pwn2own-2021-a-new-attack-surface-on-microsoft-exchange-proxyshell 需要注意以下细节: 1.通过Flask建立本地代理服务器 代码可参考: https://gist.githubusercontent.com/zdi-team/087026b241df18102db699fe4a3d9282/raw/ab4e1ecb6e0234c2e319bc229c71f2f4f70b55d9/P2O-Vancouver-2021-ProxyShell-snippet-7.py 在Python3环境下,需要将request.headers.iteritems()修改为request.headers.items() 如果遇到负载均衡,可以对返回状态码进行判断,如果返回状态码不是200,重新发送数据包 Line28-Line34可以替换成以下代码: while True: r = requests.post(powershell_url, data=data, headers=req_headers, verify=False) if r.status_code == 200: print("[+]" + r.headers["X-CalculatedBETarget"]) break else: print("[-]" + r.headers["X-CalculatedBETarget"]) req_headers = {} for k,...

  • ProxyShell利用分析2——CVE-2021-34523

    0x00 前言 本文将要介绍ProxyShell中第二个漏洞的细节,分析利用思路。 0x01 简介 本文将要介绍以下内容: CommonAccessToken Exchange PowerShell Remoting 利用分析 0x02 CommonAccessToken 在上篇文章《ProxyShell利用分析1——CVE-2021-34473》提到,我没有找到通过参数指定EWS认证用户的方法,但是对于Exchange PowerShell Remoting,可以通过传入CommonAccessToken指定认证用户,访问Exchange PowerShell Remoting 1.定位参数传入方法 使用dnsSpy打开文件C:\Program Files\Microsoft\Exchange Server\V15\Bin\Microsoft.Exchange.Configuration.RemotePowershellBackendCmdletProxyModule.dll 依次定位到Microsoft.Exchange.Configuration.RemotePowershellBackendCmdletProxy -> RemotePowershellBackendCmdletProxyModule -> CommonAccessToken CommonAccessTokenFromUrl(string user, Uri requestURI, out Exception ex) 如下图 可以看到,通过X-Rps-CAT作为参数传入CommonAccessToken 传递参数的方式可以参考下图 2.CommonAccessToken的生成 使用dnsSpy打开文件C:\Program Files\Microsoft\Exchange Server\V15\Bin\Microsoft.Exchange.Net.dll 依次定位到Microsoft.Exchange.Security.Authorization -> CommonAccessToken -> Deserialize(Stream stream) 如下图 在起始位置下断点 执行命令:...

  • ProxyShell利用分析1——CVE-2021-34473

    0x00 前言 Orange在今年的BlackHat演讲中介绍了在Pwn2Own 2021上使用的Microsoft Exchange攻击链,他分享的内容给了我很大的启发。 本文仅在技术研究的角度记录我在研究ProxyShell中的细节,分析利用思路。 0x01 简介 本文将要介绍以下内容: 调试环境搭建 漏洞分析 利用思路 0x02 调试环境搭建 1.禁用Visual Studio中的调试优化 设置环境变量COMPLUS_ZapDisable=1 重启系统 2.查看Exchange中对应的进程 执行命令: C:\Windows\System32\inetsrv\appcmd list wp 可以获得Exchange的所有进程和对应的pid,如下图 3.使用dnSpy进行调试 打开相关的dll文件并在待调试的位置下断点,选择附加进程开始调试 如果不确定待调试的Exchange进程,可以选择所有w3wp.exe 0x03 漏洞调试 使用dnSpy打开文件C:\Program Files\Microsoft\Exchange Server\V15\FrontEnd\HttpProxy\bin\Microsoft.Exchange.FrontEndHttpProxy.dll 依次定位到Microsoft.Exchange.Clients.Owa.Core -> Microsoft.Exchange.HttpProxy 关于SSRF漏洞(CVE-2021-34473)的漏洞原理可以参考如下文章: https://peterjson.medium.com/reproducing-the-proxyshell-pwn2own-exploit-49743a4ea9a1 0x04 漏洞分析 1.判断漏洞是否存在 这里使用Orange原文给出的方法: 访问:https:///autodiscover/autodiscover.json?@foo.com/mapi/nspi/?&Email=autodiscover/autodiscover.json%3f@foo.com 如果漏洞存在,返回如下结果: 如下图 权限为System url地址中的”/mapi/nspi”为Exchange服务器访问的最终地址 url地址中的”?&Email=autodiscover/autodiscover.json%3f@foo.com”作为参数,这是为了满足漏洞触发的条件。此处还可以通过设置Cookie的内容为”Email=Autodiscover/autodiscover.json%3f@foo.com”实现相同的效果,源码如下图 2.通过SSRF漏洞调用Exchange Web Service(EWS)...

  • MailEnable开发指南

    0x00 前言 MailEnable提供端到端的解决方案,用于提供安全的电子邮件和协作服务。引用自官方网站的说法:最近的一项独立调查报告称MailEnable是世界上最受欢迎的Windows邮件服务器平台。 对于MailEnable的开发者API,我在官方网站上只找到了AJAX API的说明文档,所以本文将要尝试编写Python脚本,实现对MailEnable邮件的访问,记录开发细节,开源代码。 0x01 简介 本文将要介绍以下内容: 环境搭建 开发细节 开源代码MailEnableManage.py 0x02 环境搭建 1.安装 安装前需要安装IIS服务和.Net 3.5,否则无法正常配置Web访问 MailEnable下载地址:http://www.mailenable.com/download.asp 2.配置 启动MailEnableAdmin.msc,在MailEnable Management->Messaging Manager->Post Offices下配置邮件服务器信息 如下图 默认登录页面: http://mewebmail.localhost/mewebmail/Mondo/lang/sys/login.aspx 3.开启Web管理页面 参考资料: http://www.mailenable.com/kb/content/article.asp?ID=ME020132 启动MailEnableAdmin.msc,选择MailEnable Management->Servers->localhost->Services and Connectors->WebAdmin,右键单击并从弹出菜单中选择Properties,选择Configure...按钮,进行安装 如下图 启动MailEnableAdmin.msc,在MailEnable Management->Messaging Manager->Post Offices下选择已配置的Post Office,右键单击并从弹出菜单中选择Properties,切换到Web Admin标签,启用web administration 如下图 选择指定用户,将属性修改为管理员 默认管理页面: http://mewebmail.localhost/meadmin/Mondo/lang/sys/login.aspx 注: 如果忘记了用户的明文口令,可以查看默认安装路径C:\Program Files (x86)\Mail Enable\Config下的Auth.tab文件,其中保存有每个邮箱用户的明文口令 0x03...

  • 域渗透——利用DCSync导出域内所有用户hash的方法

    0x00 前言 在之前的文章《域渗透——DCSync》曾系统的整理过DCSync的利用方法,本文将要针对利用DCSync导出域内所有用户hash这一方法进行详细介绍,分析不同环境下的利用思路,给出防御建议。 0x01 简介 本文将要介绍以下内容: 利用条件 利用工具 利用思路 防御建议 0x02 利用条件 获得以下任一用户的权限: Administrators组内的用户 Domain Admins组内的用户 Enterprise Admins组内的用户 域控制器的计算机帐户 0x03 利用工具 1.C实现(mimikatz) 实现代码: https://github.com/gentilkiwi/mimikatz/blob/master/mimikatz/modules/lsadump/kuhl_m_lsadump_dc.c#L27 示例命令: (1)导出域内所有用户的hash mimikatz.exe "lsadump::dcsync /domain:test.com /all /csv" exit (2)导出域内administrator帐户的hash mimikatz.exe "lsadump::dcsync /domain:test.com /user:administrator /csv" exit 2.Python实现(secretsdump.py) 示例命令: python secretsdump.py test/Administrator:DomainAdmin123!@192.168.1.1 3.Powershell实现(MakeMeEnterpriseAdmin) 核心代码使用C Sharp实现,支持以下三个功能: 通过DCSync导出krbtgt用户的hash 使用krbtgt用户的hash生成Golden ticket...