Good in study, attitude and health

  • Zimbra SOAP API开发指南

    0x00 前言 通过Zimbra SOAP API能够对Zimbra邮件服务器的资源进行访问和修改,Zimbra官方开源了Python实现的Python-Zimbra库作为参考 为了更加了解Zimbra SOAP API的开发细节,我决定不依赖Python-Zimbra库,参照API文档的数据格式尝试手动拼接数据包,实现对Zimbra SOAP API的调用 0x01 简介 本文将要介绍以下内容: Zimbra SOAP API简介 Python-Zimbra简单测试 Zimbra SOAP API框架的开发思路 开源代码 0x02 Zimbra SOAP API简介 Zimbra SOAP API包括以下命名空间: zimbraAccount zimbraAdmin zimbraAdminExt zimbraMail zimbraRepl zimbraSync zimbraVoice 每个命名空间下对应不同的操作命令,其中常用的命名空间有以下三个: zimbraAdmin,Zimbra邮件服务器的管理接口,需要管理员权限 zimbraAccount,同Zimbra用户相关的操作 zimbraMail,同zimbra邮件的操作 Zimbra邮件服务器默认的开放端口有以下三种: 1.访问邮件 默认端口为80或443 对应的地址为:uri+"/service/soap" 2.管理面板 默认端口为7071 对应的地址为:uri+":7071/service/admin/soap" 3.管理面板->访问邮件 从管理面板能够读取所有用户的邮件 默认端口为8443 对应的地址为:uri+":8443/mail?adminPreAuth=1"...

  • 渗透技巧——使用Mimilib从dump文件中导出口令

    0x00 前言 在上篇文章《Mimilib利用分析》提到mimilib可作为WinDbg的插件进行使用,所以本文将会详细介绍这个插件的用法,实现从内核模式转储文件中导出口令,结合利用思路给出防御建议 0x01 简介 本文将要介绍以下内容: dump文件的分类 两种dump文件的导出方法 WinDbg环境配置 利用思路 防御建议 0x02 dump文件的分类 dump文件分为以下两类: 1.User-Mode Dump File 即用户模式转储文件,分为以下两种: Full User-Mode Dumps Minidumps 简单理解:通常是针对单个进程 更多参考资料: https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/user-mode-dump-files 创建方法: 可以使用Procdump进行创建 从用户模式转储文件导出口令的方法: 可参考之前的文章《渗透基础-从lsass.exe进程导出凭据》 2.Kernel-Mode Dump Files 即内核模式转储文件,分为以下五种: Complete Memory Dump Kernel Memory Dump Small Memory Dump Automatic Memory Dump Active Memory Dump 简单理解:包括所有进程的信息 创建方法:...

  • 域渗透——DNS记录与MachineAccount

    0x00 前言 在之前的文章《域渗透——DNS记录的获取》和《域渗透——普通用户权限获得DNS记录》介绍了在域环境下获得DNS记录的方法,有助于我们快速了解域内的网络架构。 但是,DNS记录只能作为辅助判断,DNS记录、DNS记录中对应的MachineAccount(机器帐户)和实际的计算机三者之间不存在对应关系 域内的非特权用户能够自由创建DNS记录和MachineAccount 本文将要介绍域内非特权用户创建DNS记录与MachineAccount的方法,记录需要掌握的知识点 0x01 简介 本文将要介绍以下内容: MachineAccount简介 非特权用户创建MachineAccount的方法 非特权用户创建DNS记录的方法 0x02 MachineAccount简介 1.MachineAccount 每当一个计算机加入域中,都会创建一个机器帐户(MachineAccount),作为”Domain Computers”组的成员 在域环境中可以通过以下命令获得所有机器帐户的列表: net group "Domain Computers" /domain 每一个机器帐户名以字符$结尾 注: 使用Mimikatz的DCSync功能导出所有用户hash时,也会导出所有机器帐户的hash 如果获得了机器帐户的hash,可以用来制作白银票据(Silver Ticket),接着获得对应服务的访问权限,利用方法可参考之前的文章《域渗透——Pass The Ticket》 2.MachineAccountQuota 用来表示允许用户在域中创建的计算机帐户数,默认为10 说明文档: https://docs.microsoft.com/en-us/windows/win32/adschema/a-ms-ds-machineaccountquota 关于MachineAccountQuota(MAQ)的介绍可参考资料: https://blog.netspi.com/machineaccountquota-is-useful-sometimes/ 这里仅对参考资料中提到的10个规则做简要总结并添加个人理解,特点如下: (1)允许非特权用户通过MAQ创建计算机帐户,默认为10个,但无法删除创建的计算机账户 禁用MAQ的方法可参考:https://social.technet.microsoft.com/wiki/contents/articles/5446.active-directory-how-to-prevent-authenticated-users-from-joining-workstations-to-a-domain.aspx (2)创建者帐户的SID存储在计算机帐户的ms-DS-CreatorSID属性中 也就是说,对于通过MAQ创建的计算机帐户,查看ms-DS-CreatorSID属性能够找到创建者帐户的SID (3)通过MAQ创建的计算机帐户将放入”Domain Computers”组中 (4)通过MAQ创建的计算机帐户,可修改以下属性: AccountDisabled description displayName DnsHostName ServicePrincipalName userParameters...

  • 通过.NET实现内存加载PE文件

    0x00 前言 在之前的文章《从内存加载.NET程序集(execute-assembly)的利用分析》和《从内存加载.NET程序集(Assembly.Load)的利用分析》曾介绍了使用C Sharp从内存加载.NET程序集的方法,这次将要更近一步,介绍使用C Sharp从内存加载PE文件的方法 0x01 简介 本文将要介绍以下内容: 实现原理 Casey Smith开源的PELoader.cs 扩展PELoader.cs的方法 SharpPELoaderGenerater的实现细节 利用方法 0x02 内存加载PE文件的实现原理 实现原理如下: 读取PE文件,按照PE格式进行解析 申请内存,ImageBase作为内存基地址,SizeOfImage作为长度 将PE文件头复制到内存中 解析Section的地址并将Section复制到内存中 基于重定位表修改内存 解析导入表,加载所需的Dll 跳转到入口地址AddressOfEntryPoint,执行PE文件 0x03 Casey Smith开源的PELoader.cs 目前可供参考的地址: https://github.com/re4lity/subTee-gits-backups/blob/master/PELoader.cs 这个代码可以使用.NET 4.0或者更高版本下的csc.exe进行编译 编译命令如下: C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe /unsafe PELoader.cs 代码实现了在内存中加载64位的mimikatz.exe PELoader.cs在字符串KatzCompressed存储经过编码后的mimikatz.exe 如果想要进行替换,可以参考我的代码,地址如下: https://github.com/3gstudent/Homework-of-C-Sharp/blob/master/GzipandBase64.cs 执行后生成文件base64.txt,将其中的内容用来替换字符串KatzCompressed 0x04 扩展PELoader.cs的方法 1.增加支持的编译环境 PELoader.cs因为使用了.Add()导致不支持.Net3.5,可以对此进行替换使其支持.Net3.5 2.支持32位程序的加载 需要区分32位和64位程序PE结构的不同,重新计算偏移 扩展PELoader.cs的代码已上传至github,地址如下: https://github.com/3gstudent/Homework-of-C-Sharp/blob/master/SharpMimikatz_x86.cs https://github.com/3gstudent/Homework-of-C-Sharp/blob/master/SharpMimikatz_x64.cs 分别对应内存加载32位和64位mimikatz的代码...

  • Mimilib利用分析

    0x00 前言 Mimilib是mimikatz的子工程,编译成功后生成文件mimilib.dll,包含多个导出函数。 目前介绍这个dll用法的资料比较少,于是我将结合自己的测试结果,逐个介绍mimilib.dll导出函数的用法。 0x01 简介 本文将要介绍以下内容: Mimilib导出函数简介 6种功能的具体用法 0x02 Mimilib导出函数简介 对应文件的地址为: https://github.com/gentilkiwi/mimikatz/blob/master/mimilib/mimilib.def 内容如下: EXPORTS startW = kappfree_startW SpLsaModeInitialize = kssp_SpLsaModeInitialize InitializeChangeNotify = kfilt_InitializeChangeNotify PasswordChangeNotify = kfilt_PasswordChangeNotify WinDbgExtensionDllInit = kdbg_WinDbgExtensionDllInit ExtensionApiVersion = kdbg_ExtensionApiVersion coffee = kdbg_coffee mimikatz = kdbg_mimikatz DnsPluginInitialize = kdns_DnsPluginInitialize DnsPluginCleanup = kdns_DnsPluginCleanup DnsPluginQuery = kdns_DnsPluginQuery DhcpServerCalloutEntry =...

  • 渗透基础——从lsass.exe进程导出凭据

    0x00 前言 本文将要结合自己的经验,介绍不同环境下从lsass.exe进程导出凭据的方法,结合利用思路,给出防御建议 0x01 简介 本文将要介绍以下内容: 从lsass.exe进程导出凭据的常用方法 限制上传文件长度时导出凭据的方法 限制下载文件长度时导出凭据的方法 0x02 从lsass.exe进程导出凭据的常用方法 1.使用mimikatz直接导出凭据 直接从lsass.exe进程的内存中导出凭据,命令如下: mimikatz.exe log "privilege::debug" "sekurlsa::logonPasswords full" exit 通常这种方式会被安全产品拦截 2.通过lsass.exe进程的dmp文件导出凭据 (1)获得lsass.exe进程的dmp文件 procdump 命令如下: procdump64.exe -accepteula -ma lsass.exe lsass.dmp c++实现 https://github.com/killswitch-GUI/minidump-lib powershell实现 https://github.com/PowerShellMafia/PowerSploit/blob/master/Exfiltration/Out-Minidump.ps1 c#实现 https://github.com/GhostPack/SharpDump 使用comsvcs.dll 示例参数如下: rundll32 C:\windows\system32\comsvcs.dll, MiniDump 808 C:\test\lsass.dmp full 注: 使用comsvcs.dll的方法可参考之前的分析文章《MiniDumpWriteDump via COM+ Services DLL》的利用测试 以上方法在原理上都是通过API...

  • 通过Mono(跨平台.NET运行环境)执行shellcode

    0x00 前言 在上篇文章《通过Boolang语言执行shellcode的利用分析》介绍了利用Boolang语言执行shellcode的方法,本文将按照同样的思路,使用Mono(跨平台.NET运行环境)实现执行shellcode的功能,分析利用思路,给出防御建议 0x01 简介 Mono简介 Mono使用示例 通过Mono执行shellcode的方法 利用分析 防御检测 0x02 Mono简介 参考资料: https://www.mono-project.com/ https://github.com/mono/mono Mono是Microsoft .NET Framework的开源实现 包括C#编译器和通用语言架构 Mono项目不仅可以运行于Windows系统上,还可以运行于Linux,FreeBSD,Unix,OS X和Solaris 0x03 Mono使用示例 开发环境: Win7x64 下载Mono安装包,地址如下: https://www.mono-project.com/download/stable/#download-win 默认安装路径:C:\Program Files\Mono\ 1.编译程序输出hello world HelloWorld.cs的内容如下: using System; public class HelloWorld { public static void Main(string[] args) { Console.WriteLine ("Hello Mono World"); } }...

  • 通过Boolang语言执行shellcode的利用分析

    0x00 前言 在之前的文章《SILENTTRINITY利用分析》学习了C#利用IronPython引擎从内存加载payload的方法,我在byt3bl33d3r的GitHub上又看到了利用Boolang语言执行shellcode的代码,于是对这项技术做了研究。 本文将要介绍Boolang语言的特点和用法,分析通过Boolang语言执行shellcode的优点,给出防御检测的建议。 0x01 简介 本文将要介绍以下内容: Boolang语言简介 Boolang语言的用法 通过Boolang语言执行shellcode的实现代码 利用分析 防御检测 0x02 Boolang语言简介 学习资料: https://github.com/boo-lang/boo Boolang是面向对象的语言,结合了Python的语法,Ruby的功能以及C#的速度和安全性 具有如下特点: 语法非常接近Python,使用友好 静态类型,相比动态类型的Python,更加安全 可以扩充编译器,能够在.NET Framework或Mono上运行 代码开源 0x03 Boolang语言的用法 首先需要下载编译后的Boolang文件,地址如下: https://github.com/boo-lang/boo/releases 文件中包括以下三个可执行程序: booi.exe,用作执行脚本 booish.exe,实时编译程序,便于测试代码 booc.exe,用作编译脚本 具体用法如下: 1.使用booi.exe执行Boolang脚本 test.boo的内容如下: print "Hello, World!" 命令如下: booi.exe test.boo 结果如下图 2.使用booish.exe实时编译 启动booish.exe,在命令行输入如下代码: print "Hello, World!" 结果如下图 3.使用booc.exe编译Boolang脚本 test.boo的内容如下: print...

  • 利用IIS的模块功能绕过防火墙

    0x00 前言 在之前的文章《利用IIS的端口共享功能绕过防火墙》曾介绍了如下问题的解决方法: Windows服务器开启了IIS服务,防火墙仅允许80或443端口进行通信,那么如何在不使用webshell的前提下,实现对该服务器的远程管理?更进一步,如果只有低权限,有没有办法呢? 本文将介绍以上问题的另一种解决方法:利用IIS的模块功能绕过防火墙 0x01 简介 本文将要介绍以下内容: IIS的模块功能 使用c++开发模块 使用c#开发模块 IIS-Raid测试 利用分析 防御检测 0x02 IIS的模块功能 自IIS7开始,开发人员可以通过模块功能(Module)来扩展IIS的功能 参考资料: https://docs.microsoft.com/en-gb/iis/develop/runtime-extensibility/extending-web-server-functionality-in-net 如果我们通过模块功能可以读取HTTP请求的内容并控制HTTP回复的内容,完全可以利用模块功能实现对服务器的远程管理 IIS的模块以DLL的形式存在,加载后不会存在单独的进程 2018年,PaloAlto Unit42发现了APT34使用这种方式作为IIS后门,将其命名为RGDoor 本文将复现RGDoor的部分功能,着重介绍这种利用方法的检测和识别 0x03 使用c++开发模块 参考资料: https://docs.microsoft.com/en-gb/iis/develop/runtime-extensibility/develop-a-native-cc-module-for-iis IIS 7.0及更高版本允许通过以两种方式开发的模块来扩展服务器: 托管模块(Managed Module),使用托管代码(managed code)和ASP.NET服务器可扩展性API 本机模块(Native Module),使用本机代码(native code)和IIS本机服务器可扩展性API 参考资料中介绍了本机模块(Native Module)的使用方法 需要注意以下问题: 可以使用Visual Studio进行开发 DLL需要包含导出函数RegisterModule 使用CHttpModule作为模块类继承的实现 使用IHttpModuleFactory接口创建模块实例 1.模块开发 具体的实现代码可以参考IIS-Raid,地址如下: https://github.com/0x09AL/IIS-Raid 代码细节可参考: https://www.mdsec.co.uk/2020/02/iis-raid-backdooring-iis-using-native-modules/ IIS-Raid在RegisterModule函数注册了RQ_BEGIN_REQUEST和RQ_SEND_RESPONSE两个事件用来处理请求和响应...

  • 通过Network Security Services导出Firefox浏览器中保存的密码

    0x00 前言 在上一篇文章《渗透技巧——导出Firefox浏览器中保存的密码》介绍了导出Firefox浏览器密码的常用方法,其中firefox_decrypt.py使用NSS(Network Security Services)进行解密,支持key3.db和key4.db的Master Password解密。本文将要对其涉及的原理进行介绍,编写测试代码,实现对Master Password的验证,分享脚本编写的细节 0x01 简介 本文将要介绍如下内容: Network Security Services简介 通过python调用Network Security Services导出Firefox浏览器密码 开源python脚本 爆破脚本的实现 0x02 Network Security Services简介 Network Security Services(NSS)是一组旨在支持安全的客户端和服务器应用程序跨平台开发的库 参考文档: https://developer.mozilla.org/en-US/docs/Mozilla/Projects/NSS Firefox浏览器使用NSS作为加密算法和安全网络协议的基础库,在凭据加解密上使用了PKCS#11标准 参考文档: https://developer.mozilla.org/en-US/docs/Mozilla/Projects/NSS/PKCS11 0x03 通过Python调用Network Security Services导出Firefox浏览器的密码 参考代码: https://github.com/unode/firefox_decrypt https://github.com/Kerisa/BrowserPasswordDump/blob/master/MozillaPwd.py Windows系统下的解密流程如下: 加载Network Security Services需要的nss3.dll 调用NSS_Init()进行初始化 调用PK11_GetInternalKeySlot()来获得internal slot(用作验证Master Password) 调用PK11_CheckUserPassword()验证Master Password 读取logins.json获得加密数据 调用PK11SDR_Decrypt()进行解密 具体需要注意的问题如下:...