Good in study, attitude and health

  • Zimbra反序列化漏洞(CVE-2019-6980)利用测试

    0x00 前言 Zimbra反序列化漏洞(CVE-2019-6980)适用于8.7.x至8.8.11的Zimbra邮件服务器,是一个远程代码执行漏洞。 考虑到距补丁公开日期已经超过两年,并且没有一个完整的可用POC,所以本文将要在技术研究的角度记录测试过程,开源利用脚本,分享细节。 0x01 简介 本文将要介绍以下内容: 本地漏洞复现 实际利用分析 开源利用脚本 防御建议 0x02 本地漏洞复现 参考资料: https://blog.tint0.com/2019/03/a-saga-of-code-executions-on-zimbra.html https://blog.csdn.net/fnmsd/article/details/89235589?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.control&dist_request_id=1328603.11954.16149289993579653&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.control (1)搭建环境 挑选符合漏洞版本的Zimbra邮件服务器,下载地址: https://www.zimbra.com/downloads/zimbra-collaboration-open-source/archives/ 具体搭建过程可参考其他资料 (2)创建用户 创建一个测试用户test1,命令如下: /opt/zimbra/bin/zmprov ca test1@test.zimbra.com Password123 displayName 结果返回测试用户test1对应的zimbraId,格式为11111111-1111-1111-1111-111111111111 补充:其它常用命令 参考资料:https://wiki.zimbra.com/wiki/Zmprov 列出所有用户: /opt/zimbra/bin/zmprov -l gaa 列出所有管理员用户: /opt/zimbra/bin/zmprov gaaa 查看用户test1对应的zimbraId: /opt/zimbra/bin/zmprov ga test1 zimbraId (3)修改服务器配置 列出所有服务器: /opt/zimbra/bin/zmprov gad 得到服务器名称test.zimbra.com 查看配置信息zimbraMemcachedClientServerList: /opt/zimbra/bin/zmprov gs...

  • 利用zimbra clientuploader实现文件上传

    0x00 前言 Zimbra邮件服务器的管理面板支持文件上传的功能,通常情况下,我们通过管理员用户登录管理面板,使用名为Client Upload的功能即可将文件上传至Zimbra邮件服务器的downloads目录。 这里面我们需要进一步的思考,实现文件上传的方法有哪些?如何禁用文件上传的功能?能否通过第三方扩展或者插件实现文件上传?能否绕过? 本文仅在技术研究的角度回答以上问题。 0x01 简介 本文将要介绍以下内容: 原理分析 通过zimbraAdmin管理面板实现文件上传 通过zimlet实现文件上传 通过Zimbra SOAP API实现文件上传 利用思路 防御建议 0x02 原理分析 Zimbra邮件服务器通过com_zimbra_clientuploader实现文件上传的功能 我们可以在Zimbra邮件服务器的安装文件中找到文件上传功能对应的文件 对应安装目录下的文件为/opt/zimbra/lib/ext/com_zimbra_clientuploader/com_zimbra_clientuploader.jar 为了查看具体的实现代码,这里需要对jar文件进行反编译 反编译的功能可以使用JD-GUI,地址:http://java-decompiler.github.io/ 使用JD-GUI打开com_zimbra_clientuploader.jar,文件结构如下图 (1)文件上传功能的主函数 对应文件ClientUploaderHandler.class (2)文件上传功能的写入位置 对应文件ClientUploaderLC.class,如下图 写入位置为/opt/zimbra/jetty/webapps/zimbra/downloads (3)响应代码对应的内容 对应文件ZClientUploaderResoCode.class,如下图 内容如下: SUCCEEDED(1L, "Succeeded"), FAILED(20000000L, "Upload failed"), NOT_A_FILE(20000001L, "The request does not upload a file"), REPO_INVALID(20000002L, "Invalid directory for...

  • 渗透基础——支持NTLM Over HTTP协议的Webshell实现

    0x00 前言 在某些环境下,访问Web服务器的资源需要通过NTLM Over HTTP协议进行NTLM认证,而我们在这样的Web服务器使用Webshell时,不仅需要考虑NTLM认证的实现,还需要满足能够在命令行下使用。 本文仅在技术研究的角度介绍一种实现方法,开源代码,分享脚本开发细节。 0x01 简介 本文将要介绍以下内容: 设计思路 脚本开发细节 开源代码 0x02 设计思路 通过NTLM Over HTTP协议进行NTLM认证的Web服务器有很多,这里分别以Exchange和SharePoint为例 (1)Exchange测试环境 文件保存的绝对路径: C:\Program Files\Microsoft\Exchange Server\V15\ClientAccess\Autodiscover\test.aspx 对应的URL为: https://URL/Autodiscover/test.aspx (2)SharePoint测试环境 文件保存的绝对路径: C:\Program Files\Common Files\microsoft shared\Web Server Extensions\15\TEMPLATE\LAYOUTS\test.aspx 对应的URL为: http://URL/_layouts/15/test.aspx 访问test.aspx时均需要通过NTLM Over HTTP协议进行NTLM认证 这里以一个支持cmd命令的webshell为例进行测试,webshell的地址为: https://github.com/tennc/webshell/blob/master/aspx/asp.net-backdoors/cmdexec.aspx 如下图 这个webshell需要通过浏览器进行操作,首先完成NTLM认证,接着填入正确的Auth Key和要执行的cmd命令 我们的目标是满足能够在命令行下使用,可以以此为模板进行修改,设计思路如下: (1)execCmd.aspx 接收Form表单请求作为参数,对Auth Key进行验证 如果验证失败,返回空结果 如果验证成功,执行传入的cmd命令并返回执行结果 (2)aspxCmdNTLM.py 命令行脚本...

  • 渗透基础——利用IMAP协议读取邮件

    0x00 前言 在渗透测试中,当我们获得了用户的邮箱凭据,需要对邮箱内容进行分析时,可以选择通过IMAP协议实现自动化来提高效率。 本文以Exchange为例,介绍通过IMAP协议下载邮件和附件的方法,开源代码,分享脚本编写细节。 0x01 简介 本文将要介绍以下内容: 基础知识 Exchange开启IMAP功能和登录日志 Python3实现细节 开源代码 0x02 基础知识 1.IMAP 全称是Internet Mail Access Protocol,即交互式邮件存取协议 是一种邮件获取协议,可以从邮件服务器上获取邮件的信息 使用端口143 2.IMAP4_SSL 全称是IMAP over SSL,是IMAP协议基于SSL安全协议之上的一种变种协议 继承了SSL安全协议的非对称加密的高度安全可靠性,可防止邮件泄露,也是用来接收邮件的 使用端口993 3.Python3 imaplib库 官方文档: https://docs.python.org/3/library/imaplib.html 该模块定义了三个类,IMAP4,IMAP4_SSL和 IMAP4_stream 为了提高安全性,我们通常使用用于安全连接的子类IMAP4_SSL 4.Python3 email库 官方文档: https://docs.python.org/3/library/email.html 当我们使用imaplib库读取邮件时,需要使用email库将接收的消息转换为EmailMessage对象,可以更加方便的对邮件内容进行处理 0x03 Exchange开启IMAP功能和登录日志 默认情况下,Exchange中未启用IMAP4客户端连接 参考资料: https://docs.microsoft.com/en-us/exchange/clients/pop3-and-imap4/configure-imap4?view=exchserver-2019 开启方法如下: 1.启动IMAP4服务,并将服务配置为自动启动 Powershell命令如下: Start-Service MSExchangeIMAP4; Start-Service MSExchangeIMAP4BE...

  • 渗透基础——活动目录信息的获取2:Bypass AV

    0x00 前言 在之前的文章《渗透基础——活动目录信息的获取》以获取活动目录中所有用户、所有计算机和所有组为例,介绍常用的信息获取方法。 但是在实际使用过程中,一些工具会被杀毒软件拦截。 所以本文将要对获取方法进行补充,同时绕过杀毒软件的拦截。 0x01 简介 本文将要介绍以下内容: 使用csvde获取活动目录信息 使用ldifde获取活动目录信息 使用AdFind获取活动目录信息 使用C#开发的轻量级获取工具 0x02 使用csvde获取活动目录信息 说明文档: https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2012-r2-and-2012/cc732101(v=ws.11) 使用csvde导出的文件格式为csv,可以使用Microsoft Excel查看 默认只能在以下系统使用,例如: Windows Server 2003 Windows Server 2008 Windows Server 2003 R2 Windows Server 2008 R2 Windows Server 2012, Windows Server 2003 with SP1 Windows 8 … 1.导出当前域内活动目录信息示例 导出当前域内所有信息: csvde -f all.csv 导出当前域内所有用户信息:...

  • Zimbra-SOAP-API开发指南2

    0x00 前言 在上一篇文章《Zimbra-SOAP-API开发指南》介绍了Zimbra SOAP API的调用方法,开源代码Zimbra_SOAP_API_Manage。 本文将要在此基础上扩充功能,添加使用管理员权限可以实现的功能。 0x01 简介 本文将要介绍以下内容: 获得指定邮箱用户的token 通过clientUploader插件向服务器上传文件 日志检测 0x02 获得指定邮箱用户的token 说明文档:https://files.zimbra.com/docs/soap_api/8.8.15/api-reference/zimbraAdmin/DelegateAuth.html 对应命名空间为zimbraAdmin 请求的地址为:uri+":7071/service/admin/soap" 根据说明文档中的SOAP格式,可通过以下Python代码实现: def gettoken_request(uri,token): print("[*] Input the mailbox:") mail = input("[>]: ") request_body="""<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope"> <soap:Header> <context xmlns="urn:zimbra"> <authToken>{token}</authToken> </context> </soap:Header> <soap:Body> <DelegateAuthRequest xmlns="urn:zimbraAdmin"> <account by="name">{mail}</account> </DelegateAuthRequest> </soap:Body> </soap:Envelope> """ try: print("[*] Try to get...

  • 域渗透——使用MachineAccount实现DCSync

    0x00 前言 在之前的文章《域渗透——DCSync》提到过DCSync的利用条件: 获得以下任一用户的权限: Administrators组内的用户 Domain Admins组内的用户 Enterprise Admins组内的用户 域控制器的计算机帐户 本文将要补全上篇文章中未提到的最后一种利用方法,介绍如何通过域控制器的计算机帐户口令hash实现DCSync 0x01 简介 本文将要介绍以下内容: MachineAccount简介 获得MachineAccount口令hash的方法 使用MachineAccount实现DCSync 防御检测 0x02 MachineAccount简介 MachineAccount是每台计算机在安装系统后默认生成的计算机帐户 计算机帐户的密码存储在注册表的位置:HKLM\SECURITY\Policy\Secrets\$machine.ACC 如果计算机加入域中,会将计算机帐户的密码同步到域控制器并保存在域控制器的NTDS.dit文件中 计算机帐户的密码默认每30天自动更新,密码长度为120个字符,所以说,即使获得了计算机帐户密码的hash,也很难还原出计算机帐户的明文口令 关闭当前计算机帐户密码自动更新的两种方法(适用于工作组): 1.修改组策略 组策略位置: Computer Configuration\Windows Settings\Security Settings\Local Policies\Security Options\ 如下图 默认未启用,如果设置为启用后,将会停止更新密码 参考资料: https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2003/cc785826(v=ws.10) 2.直接修改注册表 注册表位置:HKLM\System\CurrentControlSet\Services\Netlogon\Parameters\ 将DisablePasswordChange的值设为1 关闭域内计算机帐户密码自动更新的两种方法(适用于域网络): 1.修改组策略 这里需要修改域组策略,在域控制器上打开Group Policy Management后,选择Default Domain Policy 如下图 组策略位置: Computer...

  • AsyncRAT利用分析

    0x00 前言 AsyncRAT是一款使用C Sharp开发的C2工具,本文仅在技术研究的角度分析AsyncRAT的技术细节,介绍检测方法。 注: 本文选择的AsyncRAT更新日期为2020年5月9日 0x01 简介 AsyncRAT的优点 AsyncRAT的技术细节 检测方法 0x02 AsyncRAT的优点 AsyncRAT使用C Sharp开发,应用于Windows系统,具有以下优点: 支持从Pastebin.com读取C2服务器的配置信息 支持内存加载PE文件 支持动态编译并执行C#或者VB代码 支持U盘感染,能够感染U盘中所有使用.NET开发的exe文件 支持自动读取Firefox和Chrome浏览器中保存的密码 通过欺骗用户点击的方式绕过UAC进行提权 通过C#接口技术,提高程序的扩展性,在程序实现上将每一个功能对应一个类,编译成dll文件,在需要加载的时候,由Server发送至Client,Client通过Activator.CreateInstance将类实例化,进而调用类的方法。 0x03 AsyncRAT的技术细节 本节按照AsyncRAT控制面板上的功能逐个进行分析,如下图 1.SendFile (1)ToMemory 内存加载exe文件,支持以下两种类型: Reflection 使用Assembly.Load加载C#程序 更多细节可参考之前的文章《从内存加载.NET程序集(Assembly.Load)的利用分析》 RunPE 通过替换进程内存的方式加载exe文件 可选择以下程序作为被注入的程序: aspnet_compiler.exe RegAsm.exe MSBuild.exe RegSvcs.exe vbc.exe 注: 以上5个exe文件位于Microsoft.NET Framework的安装目录,同AsyncClient.exe的位数保持一致 使用32位的AsyncClient.exe反弹回的Session,默认会寻找32位Microsoft.NET Framework的安装目录,例如:C:\Windows\Microsoft.NET\Framework\v4.0.30319 使用64位的AsyncClient.exe反弹回的Session,默认会寻找64位Microsoft.NET Framework的安装目录,例如:C:\Windows\Microsoft.NET\Framework64\v4.0.30319 RunPE操作将启动以上5个exe文件中的一个,通过ReadProcessMemory、VirtualAllocEx、WriteProcessMemory和ResumeThread实现对进程内存的修改,替换成要加载的exe文件 这里需要注意要加载的exe文件需要同AsyncClient.exe的位数保持一致 使用32位的AsyncClient.exe反弹回的Session,使用RunPE操作只能加载32位的exe文件 使用64位的AsyncClient.exe反弹回的Session,使用RunPE操作只能加载64位的exe文件...

  • 内存加载Seatbelt的实现

    0x00 前言 Seatbelt是一个C#项目,可以用来对主机进行安全检查,在进攻和防御的角度都能发挥作用。 通过一条命令,就能够获得当前主机的多项配置信息,方便实用。 为了能够扩展Seatbelt的使用场景,在不修改Seatbelt任何代码的前提下,本文将要介绍两种通过内存加载Seatbelt的方法(Assembly.Load和execute-assembly),分别补全向.NET程序集的Main函数传入参数的实现代码。 之前的文章《从内存加载.NET程序集(Assembly.Load)的利用分析》和《从内存加载.NET程序集(execute-assembly)的利用分析》 只介绍了向指定类的方法传入参数的实现代码 0x01 简介 本文将要将介绍以下内容: Seatbelt的编译和使用 使用Assembly.Load加载Seatbelt并传入参数的方法 使用execute-assembly加载Seatbelt并传入参数的方法 Visual Studio2015在64位平台下使用汇编代码的方法 0x02 Seatbelt的编译和使用 1.编译 工程地址: https://github.com/GhostPack/Seatbelt 支持.NET 3.5和4.0 需要使用Visual Studio2017或者更高的版本进行编译 2.使用 需要传入参数指定具体的命令,例如运行所有检查并返回所有输出: Seatbelt.exe -group=all -full 详细的命令可参考项目的说明: https://github.com/GhostPack/Seatbelt#command-line-usage 0x03 使用Assembly.Load加载Seatbelt并传入参数的方法 实现语言:C# 实现思路: 将Seatbelt.exe作base64编码后保存到数组中,再使用Assembly.Load()作base解码后进行加载,最后向Main函数传入参数 实现代码: 1.将Seatbelt.exe作base64编码并返回结果 c#实现代码: using System; using System.Reflection; namespace TestApplication { public class Program {...

  • 渗透技巧——通过CredSSP导出用户的明文口令

    0x00 前言 在渗透测试中,为了获得Windows系统中的用户口令,通常会选择读取lsass进程的内存。这种方法不仅需要获得系统的管理员权限,而且在更多情况下需要绕过系统对lsass进程的保护。 我在之前的文章《Windows下的密码hash——Net-NTLMv1介绍》曾介绍过使用InternalMonologue获得当前用户凭据的方法(通过SSPI调用对NTLM身份验证包(MSV1_0)的本地过程调用,以计算出NetNTLM响应),不需要对lsass进程操作。 本文将要介绍另外一种获得当前用户口令的方法,同样不需要对lsass进程操作。 这是Benjamin @gentilkiwi Delpy开源的kekeo在2018年添加的功能,只需要修改Windows系统的组策略,就能够以普通用户的权限获得用户的明文口令。 本文将要对其中的原理进行简要介绍,分析不同环境下的利用思路,给出防御建议。 0x01 简介 本文将要介绍以下内容: 实现原理 实现方法 利用分析 防御检测 0x02 实现原理 1.基础知识 CredSSP 全称Credential Security Support Provider protocol CredSSP协议的目的是将用户的明文密码从CredSSP客户端委派给CredSSP服务器 CredSSP通常应用于远程桌面服务(Remote Desktop Protocol)和Windows远程管理(Windows Remote Management)(例如Powershell Remoting) CredSSP提供了加密的传输层安全协议通道。协商协议使用Kerberos和NTLM 参考资料: https://docs.microsoft.com/en-us/windows/win32/secauthn/credential-security-support-provider 2.通过组策略设置CredSSP的凭据分配 通过组策略可以指定使用CredSSP组件的应用程序是否发送默认凭据 组策略位置:Computer Configuration->Administrative Templates->System->Credentials Delegation 如下图 Allow delegating default credentials表示在通过使用受信任的X509证书或Kerberos实现服务器身份验证时自动发送当前用户的凭据 Allow delegating default credentials...