Good in study, attitude and health

  • 渗透技巧——Pass the Hash with Exchange Web Service

    0x00 前言 在之前的文章《渗透技巧——Pass the Hash with Remote Desktop Protocol》介绍了使用hash登录RDP的方法,本文将要继续介绍使用hash登录ews的方法。 我们知道,通过mimikatz的over pass the hash和ews的使用当前凭据登录能够实现使用hash登录ews,相关细节可参考《Exchange Web Service(EWS)开发指南》 但缺点是需要获得管理员权限并对lsass进程进行操作,无法同时对多个用户验证。 所以本文将要介绍更为通用的方法,开源实现脚本,记录思路和开发过程。 0x01 简介 本文将要介绍以下内容: 解密Exchange的通信数据 使用hash登录ews的思路 开源代码 0x02 解密Exchange的通信数据 Exchange默认使用TLS协议对数据进行加密,我们通过Wireshark抓包的方式只能获得加密后的内容,需要进行解密 这里分别介绍Exchange Server和Exchange Client捕获明文通信数据的方法 1.Exchange Server捕获明文通信数据的方法 (1)在Exchange Server上导出证书文件 使用mimikatz,命令如下: mimikatz.exe crypto::capi "crypto::certificates /systemstore:local_machine /store:my /export" 注: 如果不使用命令crypto::capi,无法导出带有私钥的证书文件(pfx文件) 这条命令会导出多个证书文件,如下图 为了找到Exchange通信数据使用的证书文件,我们可以采用如下方法: 访问Exchange登录页面,通过查看证书的有效期找到对应的证书文件,如下图 也可以通过命令行实现对证书信息的获取,代码可参考:https://github.com/3gstudent/Homework-of-C-Sharp/blob/master/SSLCertScan.cs 测试如下图 (2)配置Wireshark Edit ->...

  • 渗透技巧——Pass the Hash with Remote Desktop Protocol

    0x00 前言 在之前的文章《渗透技巧——Pass the Hash with Remote Desktop(Restricted Admin mode)》介绍了特定条件下(Server需要开启Restricted Admin mode,Client需要支持Restricted Admin mode)Pass the Hash with Remote Desktop的方法,本文将要介绍更为通用的方法(通过NTLM hash登录RDP),分析原理,开源代码,记录细节。 0x01 简介 本文将要介绍以下内容: 渗透测试中的需求 验证口令或者NTLM hash的实现方法 C实现代码 Python实现代码 C sharp实现代码 0x02 渗透测试中的需求 如果是开发远程桌面服务的客户端,可供选择的方法有很多,例如通过C#调用ActiveX组件AxMSTSCLib 详细方法可参考:https://www.codeproject.com/Articles/43705/Remote-Desktop-using-C-NET 但是在渗透测试中,我们有以下两个需求: 1.验证口令或者hash 需要满足以下条件: 可以在Windows和Linux系统上运行 登录方式支持明文口令和NTLM hash 命令行下使用 2.远程登录 可以在Windows和Linux系统上运行 登录方式支持明文口令和NTLM hash 0x03 验证口令或者hash的实现方法 为了支持NTLM hash登录,需要对协议和加密方式有所了解 关于RDP协议的参考资料:https://github.com/FreeRDP/FreeRDP/wiki/Reference-Documentation...

  • 渗透基础——利用Unicode编码混淆字符串

    0x00 前言 在渗透测试中,通常会对关键代码(例如shellcode)进行混淆,以此来对抗静态检测和分析。 我最近看到了一个有趣的样本,使用Braille Patterns(盲文点字模型)对字符串进行混淆,这对静态分析造成了很大的困难。 如下图 样本地址: https://www.virustotal.com/gui/file/06f90a471f65de9f9805a9e907d365a04f4ebed1bf28b458397ad19afdb9ac00/detection 本文将会介绍这种利用Unicode编码混淆字符串的方法,通过程序分别实现对Braille Patterns(盲文点字模型)的编码和解码,分享使用其他Unicode字符表编码和解码的思路。 0x01 简介 本文将会介绍以下内容: 样本字符的实现原理 通过程序实现编码 通过程序实现解码 使用其他Unicode字符表编码和解码的思路 0x02 样本字符的实现原理 基础知识1:Unicode Unicode是一个编码方案,是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求 简单理解:我们在计算机中看到的任何字符都对应唯一的一个Unicode码 对应到上面提到的样本,虽然使用了Braille Patterns(盲文点字模型)对人工分析造成了困难,但是如果将每一个字符转换成Unicode码,就可以克服这个问题 基础知识2:Braille Patterns(盲文点字模型) 是专供盲人摸读、书写的文字符号 盲文共有64种符形,即每个字符的样式有64种 盲文点字模型在Unicode码表上共有256个区位,即有256个Unicode码对应盲文点字模型 为了能够支持更多的字符,在对应关系上使用以下方式: 小写英文字母对应单个Unicode码 阿拉伯数字对应两个Unicode码,第一个Unicode码固定为U283C 大写英文字母对应两个Unicode码,第一个Unicode码固定为U2820 注: 小写英文字母也对应两个Unicode码,第一个Unicode码固定为U2830,但通常省略第一个Unicode码 我们在代码混淆的过程中,可以不遵循以上语法,提高代码分析的难度 例如先将代码作base64编码(共有64个字符),再随机对应到Braille Patterns(盲文点字模型)的256个区位上 综上,我们可以得出实现原理:将待加密的字符转换成Unicode码,再从Unicode码转换成实际的符号 所以解密也十分简单:不需要考虑符号多么复杂,先转换成Unicode码,再进行分析 为了提高效率,下面分别介绍程序实现编码和解码的方法 为了直观的理解,程序实现上均使用Braille Grade 1编码,即逐个字母的转换,不包括缩写等单词 0x03 通过程序实现编码 对于编码的实现,优先考虑简单实用,所以选择通过网页实现编码 可供参考的资料: http://www.byronknoll.com/braille.html 这个网站支持Braille...

  • Pupy利用分析——Windows平台下的屏幕控制

    0x00 前言 Pupy在Windows平台下的后渗透模块包括一个实用的功能:屏幕控制。这个功能不仅能够查看屏幕内容,也能够发送鼠标和键盘消息。本文将要对这个功能的实现方法进行分析,换一种思路实现类似的功能,便于二次开发。 0x01 简介 本文将要介绍以下内容: Pupy的屏幕控制模块测试 Pupy的实现方法 另一种实现方法 0x02 Pupy的屏幕控制模块测试 Pupy的基本使用方法可以参考之前的文章《Pupy利用分析——Windows平台下的功能》 获得session后,输入rdesktop加载屏幕控制模块,如下图 浏览器访问url可以对屏幕进行查看和操作,如下图 这里支持输入键盘消息和鼠标单击的操作 在使用普通用户权限进行操作时需要注意UAC的问题(无法对UAC的弹框进行操作) 弹出UAC时会创建进程consent.exe 需要使用System权限关闭这个进程,关闭后弹出对话框提示The storage control block address is invalid. 如下图 注: 关闭UAC弹框提示的cmd命令: reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /v ConsentPromptBehaviorAdmin /t REG_DWORD /d 0 /f 开启UAC弹框提示的cmd命令: reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /v ConsentPromptBehaviorAdmin /t REG_DWORD /d 5 /f 0x03 Pupy的实现方法...

  • Outlook MAPI开发指南

    0x00 前言 Outlook MAPI提供了一组访问Outlook的接口,用来扩展Outlook应用程序的开发,本文将会介绍Outlook MAPI的基本用法,开源一份Outlook MAPI的实现代码mapi_tool,便于后续的二次开发。 0x01 简介 本文将要介绍以下内容: 基本知识 使用Outlook MAPI访问Outlook资源 开源代码mapi_tool mapi_tool功能介绍 多种环境下的利用思路 0x02 基本知识 参考资料: https://docs.microsoft.com/en-us/office/client-developer/outlook/mapi/outlook-mapi-reference Outlook MAPI的使用前提:需要安装Outlook客户端 Outlook MAPI同EWS的区别: Outlook MAPI用来访问Outlook客户端中的资源 EWS用来访问Exchange服务器中的资源 关于EWS的使用可以参考之前的文章《Exchange Web Service(EWS)开发指南》 Outlook客户端中的用户邮件存储在后缀名为ost的文件中,和Exchange服务器中的数据库保持一致 ost文件的默认保存位置:%LOCALAPPDATA%\Microsoft\Outlook\ MAPI主要包括以下三个功能: Address Books,设置E-mail type、protocol等参数 Transport,文件的发送和接收 Message Store,发送接收等信息的处理 0x03 使用Outlook MAPI访问Outlook资源 1.安装Outlook客户端并配置参数 2.启动Outlook客户端进行用户登录 3.使用C Sharp开发程序,实现读取收件箱邮件的功能 参考资料: https://docs.microsoft.com/en-us/dotnet/api/microsoft.office.interop.outlook?view=outlook-pia https://docs.microsoft.com/en-us/office/vba/api/outlook.namespace 开发环境:VS2015 新建工程,选择控制台应用程序,引用文件:Microsoft.Office.Interop.Outlook.dll...

  • Pupy利用分析——Windows平台下的功能

    0x00 前言 Pupy是使用Python开发的跨平台远程管理和后期开发工具,支持很多实用的功能。 本文将要对Pupy在Windows平台的启动文件类型、连接方式和通信协议进行介绍,将其中的后渗透模块进行分类,逐个介绍功能 0x01 简介 本文将要介绍以下内容: 安装方法 支持的启动文件类型 支持的连接方式 支持的通信协议 后渗透模块介绍 0x02 安装方法 1. 使用docker 说明文档: https://github.com/n1nj4sec/pupy/wiki/Installation 2.直接安装 git clone --recursive https://github.com/n1nj4sec/pupy cd pupy python create-workspace.py -DG pupyws pupyws/bin/pupysh 注: 使用-DG参数将从https://github.com/n1nj4sec/pupy/releases/download/latest/payload_templates.txz下载模板文件 0x03 支持的启动文件类型 启动pupy后,输入gen -h获得生成启动文件的说明,如下图 这里逐个进行介绍 1.client 生成exe格式的文件 生成64位exe文件的命令示例: gen -f client -A x64 这个命令将从pupy/pupy/payload_templates/读取模板文件,添加配置信息后生成最终的exe文件 注: 上述命令对应的模板文件名称为pupyx64.exe,模板文件对应的下载链接:https://github.com/n1nj4sec/pupy/releases/download/latest/payload_templates.txz 2.py 生成一个完全打包的Python文件(所有依赖项都从内存打包并执行)...

  • 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的代码...