-
渗透技巧——通过Exchange ActiveSync访问内部文件共享
0x00 前言 Exchange ActiveSync是一种Microsoft Exchange同步协议,用于在邮件服务器和移动设备之间同步邮件资源。 Adam Rutherford和David Chismon在他们的文章中介绍了通过Exchange ActiveSync访问内部文件共享的方法 文章地址: https://labs.f-secure.com/archive/accessing-internal-fileshares-through-exchange-activesync/ 本文将要基于他们的研究,介绍通过Exchange ActiveSync访问内部文件共享的细节,记录研究心得。 0x01 简介 本文将要介绍以下内容: 通过Exchange ActiveSync验证用户邮箱口令 Exchange ActiveSync开源代码测试 通过Exchange ActiveSync访问内部文件共享的细节 防御检测 0x02 基础知识 Exchange ActiveSync是一种Microsoft Exchange同步协议,该协议经过优化,以适用于高延迟和低宽带网络。 该协议基于HTTP和XML,使移动设备可以访问其电子邮件、日历、联系人和任务,并且在脱机工作时仍可以继续访问这些信息。 简单理解,计算机用户通过owa(Outlook Web Access)访问邮件资源,手机用户通过eas(Exchange ActiveSync)访问邮件资源 0x03 通过Exchange ActiveSync验证用户邮箱口令 默认对应的URL:/Microsoft-Server-ActiveSync 可以直接通过浏览器进行访问,提示输入用户名和口令 输入正确的用户名和口令后,返回内容如下图 如果没有凭据,可直接通过wget命令获得服务器信息,命令实例: wget https://192.168.1.1/Microsoft-Server-ActiveSync --no-check-certificate --debug 返回结果如下图 为了能够通过脚本实现口令验证,这里需要使用OPTIONS方法,如果凭据有效,返回状态码200 header部分加入HTTP基本认证(Basic Authentication),格式为Authorization: Basic <string>...
-
渗透基础——持续获得Exchange用户收件箱邮件的方法
0x00 前言 当我们获得了某个用户的口令或者hash,就能够读取这个用户的邮件。 如果用户修改了密码,我们在不知道新密码的情况下,能否继续读取这个用户的邮件呢? 站在防御的角度,当某个邮件用户的口令被泄露,在我们更换口令后,还需要做哪些操作来确保邮件数据的安全? 0x01简介 本文将要介绍以下内容: 添加转发规则持续获得Exchange用户收件箱邮件的方法 添加访问权限持续获得Exchange用户收件箱邮件的方法 添加邮件功能持续获得Exchange用户收件箱邮件的方法 添加用户权限持续获得Exchange用户邮件的方法 开源代码 防御检测 0x02 添加转发规则持续获得Exchange用户收件箱邮件的方法 1.通过ecp添加转发规则 需要能够访问Exchange Control Panel(ECP) 登录用户test1,选择organize email->inbox rules,如下图 选择Create a new rule for arriving messages... Name为规则名称,这里设置为Forwardtest 依次设置为[Apply to all messages],Forward the message to...,选择目标用户test2,如下图 至此,规则添加成功 每当用户test1收到邮件,邮件会同时发送至用户test2的收件箱 注: 如果test1删除收件箱的邮件,test2不受影响 2.通过SOAP XML message实现 SOAP格式参考: https://docs.microsoft.com/en-us/exchange/client-developer/web-service-reference/updateinboxrules-operation 创建规则和删除规则使用UpdateInboxRules 创建转发邮件至用户test2的规则格式如下: <?xml version="1.0"...
-
渗透基础——SSH日志的绕过
0x00 前言 SSH是一种网络协议,用于计算机之间的加密登录,通常用于远程登录Linux系统。 在渗透测试中,通常需要考虑SSH的口令爆破和日志删除。 本文将要介绍一些渗透测试相关的基础内容,结合利用方法给出检测建议。 0x01 简介 本文将要介绍以下内容: 程序实现SSH口令验证 SSH日志的删除 SSH日志的绕过 防御检测 0x02 程序实现SSH口令验证 1.Python实现 使用第三方库paramiko库,用法很简单 我的代码已上传至github,地址如下: https://github.com/3gstudent/Homework-of-Python/blob/master/sshCheck.py 代码支持口令登录和证书文件登录 2.C#实现 使用第三方库SSH.NET,地址如下: https://github.com/sshnet/SSH.NET 编译好的dll下载地址: https://github.com/sshnet/SSH.NET/releases/download/2016.1.0/SSH.NET-2016.1.0-bin.zip 参考文档: https://github.com/sshnet/SSH.NET/releases/download/2016.1.0/SSH.NET-2016.1.0-help.chm 在程序中引入Renci.SshNet.dll后,用法也十分简单 在编写程序上需要注意以下问题: (1)使用证书登录 SSH.NET对证书的格式有要求,SSH.NET-2016.1.0-help.chm上提示必须为BEGIN RSA PRIVATE KEY,如下图 而使用命令ssh-keygen -t rsa时,默认是以新的格式生成密钥文件,格式为BEGIN OPENSSH PRIVATE KEY,这里需要做一个转换 解决方法: 使用puttygen转换,下载地址: https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html 选择Load导入密钥 导出方法: Conversions->Export OpenSSH key 所以在编写程序上需要先读取证书的文件内容,判断格式是否正确 我的代码已上传至github,地址如下: https://github.com/3gstudent/Homework-of-C-Sharp/blob/master/SharpSSHCheck_SSH.NET.cs...
-
Exchange Web Service(EWS)开发指南2——SOAP XML message
0x00 前言 在之前的文章《Exchange Web Service(EWS)开发指南》开源了工具ewsManage,实现了对Exchange资源的访问。 本文将要更近一步,通过SOAP XML message实现利用hash对Exchange资源的访问。 0x01 简介 本文将要介绍以下内容: 利用hash访问Exchange资源的方法 SOAP XML message的使用 开源Python实现代码 代码开发细节 0x02 利用hash访问Exchange资源的方法 在之前的文章《渗透技巧——Pass the Hash with Exchange Web Service》介绍了使用hash登录ews的方法 本文将要基于之前的研究,介绍登录ews以后访问Exchange资源的方法,所以在程序实现上会继续选择Python,使用EWS SOAP XML message访问Exchange的资源 对于EWS SOAP XML message的格式,有以下两种方法进行参考: 1.查找资料 https://docs.microsoft.com/en-us/exchange/client-developer/exchange-web-services/get-started-with-ews-client-applications https://docs.microsoft.com/en-us/exchange/client-developer/web-service-reference/ews-xml-elements-in-exchange 2.抓包分析 配置Wireshark,实现在Exchange Server上面捕获明文通信数据 使用ewsManage访问Exchange资源 捕获通信数据,能够获得不同操作对应的EWS SOAP XML message格式,示例如下图 0x03 SOAP XML message的使用 相比于EWS...
-
渗透技巧——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文件(所有依赖项都从内存打包并执行)...