Good in study, attitude and health

  • 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...

  • 渗透技巧——通过命令行开启Windows系统的匿名访问共享

    0x00 前言 在渗透测试中,尤其是内网渗透,通常需要在内网开启一个支持匿名访问的文件共享,配合漏洞利用。 所以我们需要一种通用的方法,不仅需要使用便捷,还需要能够在命令行下运行。 0x01 简介 本文将要介绍以下内容: 利用场景 通过界面开启可匿名访问的文件共享服务器 通过命令行开启可匿名访问的文件共享服务器 开源代码 0x02 利用场景 开启支持匿名访问的文件共享后,其他用户不需要输入用户名和口令,可以直接访问文件服务器的共享文件 通常有以下两种用法: 作为数据传输的通道 配合漏洞利用,作为Payload的下载地址 文件共享服务器需要能够在不同操作系统上搭建 对于Linux系统,可借助Samba服务搭建可匿名访问的文件共享服务器 这里给出Kali系统下的使用方法: 修改文件/etc/samba/smb.conf,内容如下: [global] map to guest = test1 server role = standalone server usershare allow guests = yes idmap config * : backend = tdb smb ports = 445 [smb] comment...

  • SolarWinds Orion开发指南

    0x00 前言 SolarWinds Orion平台是一个统一的网络和系统管理产品套件,可用于监控IT基础架构。我们可以通过SolarWinds Information Service (SWIS)访问Orion平台中的数据。 在程序实现上,我们可以借助SolarWinds Orion API进行开发,但是在最近的漏洞利用上,我们无法直接使用SolarWinds Orion API。 本文将要介绍SolarWinds Orion API的用法,分析无法直接使用的原因,提供一种解决方法,开源两个测试代码 0x01 简介 本文将要介绍以下内容: SolarWinds Orion API的使用 模拟网页操作的实现 开发细节 开源代码 0x02 SolarWinds Orion API的使用 参考资料: https://github.com/solarwinds/OrionSDK/wiki Python语言可使用orionsdk库进行开发,地址如下: https://github.com/solarwinds/orionsdk-python 在引入orionsdk库后,可以很容易的实现以下功能: query invoke create read update bulkupdate delete bulkdelete 为了研究SolarWinds Orion API的实现细节,决定不借助orionsdk库实现相同的功能 语法格式的参考资料: https://github.com/solarwinds/OrionSDK/wiki/REST 对于SolarWinds Orion API,需要注意以下细节: 1.接口地址...

  • 渗透工具开发——XSS平台的命令行实现

    0x00 前言 通过XSS平台,能够便于对XSS漏洞进行测试,获得重要信息。目前,可供使用的在线XSS平台有很多,也可以尝试自己搭建XSS平台。 但是,如果测试目标无法出网,我们就需要在内网搭建一个轻量化的XSS平台,既要安装方便,又要支持跨平台。 我暂时没有找到合适的开源工具,于是打算使用Python编写一个命令行工具,提供XSS平台的功能 0x01 简介 本文将要介绍以下内容: 设计思路 实现细节 开源代码 0x02 设计思路 参照XSS平台,命令行工具需要提供以下功能: 1.创建HTTPS服务器,提供WEB服务 2.区分不同的数据,提取出关键内容并保存 3.功能模块化,便于二次开发 0x03 实现细节 1.创建HTTPS服务器,提供WEB服务 首先需要创建证书,这里可以使用openssl,命令如下: openssl req -new -x509 -keyout https_svr_key.pem -out https_svr_key.pem -days 3650 -nodes 生成证书文件https_svr_key.pem 创建HTTPS服务器的Python3测试代码如下: from http.server import SimpleHTTPRequestHandler from http import server import ssl class RequestHandler(SimpleHTTPRequestHandler): def do_GET(self): f =...

  • vSphere开发指南3——VMware PowerCLI

    0x00 前言 在之前的文章《vSphere开发指南1——vSphere Automation API》和《vSphere开发指南2——vSphere Web Services API》分别介绍了通过vSphere Automation API和vSphere Web Services API实现vCenter Server同虚拟机交互的方法,本文将要介绍通过PowerCLI实现vCenter Server同虚拟机交互的方法 0x01 简介 本文将要介绍以下内容: PowerCLI的安装配置 PowerCLI命令 C Sharp调用PowerCLI的方法 0x02 PowerCLI的安装配置 PowerCLI是用于管理VMware基础架构的PowerShell模块的集合,之前被称作VI Toolkit (for Windows) 官方文档: https://developer.vmware.com/powercli 1.PowerCLI的安装 (1)在线安装 PowerShell版本最低需要满足PowerShell 5.0 安装命令: Install-Module -Name VMware.PowerCLI (2)离线安装 下载PowerCLI的Zip文件,地址如下: https://code.vmware.com/doc/preview?id=13693 获得PowerShell Modules的路径,Powershell命令如下: $env:PSModulePath 默认可用的一个位置:C:\Program Files\WindowsPowerShell\Modules 将PowerCLI的Zip文件解压至该目录 解锁文件: cd C:\Program...