-
渗透基础——域内用户口令策略的获取
0x00 前言 在域渗透中,我们在口令爆破前需要先获得域内用户的口令策略,以免在口令爆破时锁定用户 站在防御的角度,需要识别出口令爆破的攻击行为并采取防御措施 本文将要介绍获取域内用户口令策略的常用方法,结合利用思路分享检测域用户口令爆破的方法。 0x01 简介 本文将要介绍以下内容: 修改域用户口令策略的方法 域外获取域用户口令策略的方法 域内获取域用户口令策略的方法 检测方法 0x02 基础知识 我们需要关注以下口令策略: Maximum password age,表示密码过期的时间,默认为42 Minimum password length,表示密码的最小长度,默认为7 Account lockout duration,表示被锁定的帐户在自动解锁前保持锁定的分钟数,默认为30 Account lockout threshold,表示导致用户帐户被锁定的失败登录尝试次数,默认为5 Reset account lockout counter after,表示失败登录尝试计数器重置为0次错误登录尝试之前,失败登录尝试后必须经过的分钟数,默认为30 0x03 修改域用户口令策略的方法 域用户的口令策略默认保存在域内的默认组策略(Default Domain Policy)中,guid为{31B2F340-016D-11D2-945F-00C04FB984F9} 在域控制器上打开Group Policy Management,找到当前域,选择Default Domain Policy,右键选择编辑,如下图 依次打开Computer Configuration->Policies->Windows Settings->Security Settings->Account Policies,如下图 根据提示修改对应的选项 修改以后可以选择立即更新组策略使其立即生效,命令行输入: gpupdate...
-
渗透基础——活动目录信息的获取
0x00 前言 在域渗透中,活动目录信息的获取必不可少 本文将要以获取活动目录中所有用户、所有计算机和所有组为例,介绍常用的信息获取方法 0x01 简介 本文将要介绍以下内容: 域外获取活动目录信息的方法 域内获取活动目录信息的方法 使用C++调用ADSI接口获取信息的方法 0x02 基础知识 域环境使用directory database(目录数据库)来存储用户、计算机账户和组等对象 使用LDAP(Lightweight Directory Access Protocol)(轻量目录访问协议)来查询和更新目录数据库 常用缩写词 DN:Distinguished Name CN:Common Name OU:Organizational Unit DC:Domain Controller 其中DN有三个属性,分别是CN、OU和DC 简单理解: 域控制器默认会开启端口389,用作LDAP服务 0x03 域外获取活动目录信息的方法 1.Kali系统通过ldapsearch进行数据查询 测试环境如下图 前提:我们能够访问到域控制器(DC)的389端口,并且我们至少已经获得了域内一个普通用户的口令 这个测试环境中,我们获得了域内普通用户testa的口令为DomainUser123! 连接命令如下: ldapsearch -x -H ldap://192.168.1.1:389 -D "CN=testa,CN=Users,DC=test,DC=com" -w DomainUser123! -b "DC=test,DC=com" 参数说明: -x 进行简单认证...
-
渗透技巧——使用远程桌面协议建立通道
0x00 前言 最近从@cpl3h的博客中学到了使用远程桌面协议建立通道的方法。 本文将对这个方法进行整理,结合自己的经验,添加个人理解。 学习地址: https://ijustwannared.team/2019/11/07/c2-over-rdp-virtual-channels/ 0x01 简介 本文将要介绍以下内容: 使用场景 使用共享文件建立通道 使用rdp2tcp建立通道 使用UniversalDVC建立通道 利用分析 防御建议 0x02 使用场景 由于防火墙的设置,只能连接一台Windows服务器的远程桌面,那么如何以这台Windows服务器为跳板进入内网 简要描述如下图 0x03 使用共享文件建立通道 通过读写RDP Client和RDP Server之间共享的文件作为数据传输的通道 POC: https://github.com/outflanknl/external_c2 这是根据Cobalt Strike中External C2规范编写的POC 实现原理: 建立远程桌面连接时,RDP Client和RDP Server之间可以创建共享文件夹,通过读写共享文件作为数据传输的通道 1.Windows系统连接远程桌面并开启文件共享 (1)通过配置mstsc.exe开启文件共享 如下图 (2)使用FreeRDP开启文件共享 下载地址: https://cloudbase.it/freerdp-for-windows-nightly-builds/ 命令实例: wfreerdp /v:192.168.112.129:3389 -u:1 -p:Test123! /cert-ignore /drive:share1,c:\ 2.Kali系统连接远程桌面并开启文件共享 (1)使用xfreerdp开启文件共享 将本地文件夹/tmp共享的命令如下: xfreerdp...
-
Cobalt Strike的blockdlls利用分析
0x00 前言 Cobalt Strike 3.14添加了blockdlls功能,限定子进程只能加载带有Microsoft签名的dll。 这个功能可以阻止第三方安全软件向子进程注入dll,也就无法对子进程进行hook,最终起到保护子进程的效果。 XPN在他的博客中也介绍了相关内容,地址如下: https://blog.xpnsec.com/protecting-your-malware/ 本文将要扩展blockdlls的利用方法,分别介绍查看进程是否开启blockdlls和修改当前进程开启blockdlls的方法,比较Win8和Win10系统在使用上的区别,开源c代码,分享脚本编写的细节。 0x01 简介 本文将要介绍以下内容: Cobalt Strike中的blockdlls 查看进程是否开启blockdlls的方法 修改当前进程,开启blockdlls的方法 Win8和Win10系统在使用上的区别 利用分析 0x02 Cobalt Strike中的blockdlls Cobalt Strike中的blockdlls将会创建一个子进程并开启blockdlls功能 XPN在博客中分享了实现同样功能的c代码,地址如下: https://blog.xpnsec.com/protecting-your-malware/ 代码如下: #include <Windows.h> int main() { STARTUPINFOEXA si; PROCESS_INFORMATION pi; SIZE_T size = 0; BOOL ret; // Required for a STARTUPINFOEXA ZeroMemory(&si, sizeof(si)); si.StartupInfo.cb =...
-
渗透技巧——从远程桌面客户端提取明文凭据
0x00 前言 在之前的文章《渗透技巧——获得Windows系统的远程桌面连接历史记录》曾介绍了获得远程桌面连接历史记录的方法。 在实际的渗透过程中,如果发现了远程桌面连接的历史记录,那么下一步就需要想办法获取远程桌面连接使用的口令。 本文将会结合RdpThief介绍从远程桌面客户端提取明文凭据的方法,分享需要注意的细节。 RdpThief地址: https://github.com/0x09AL/RdpThief 0x01 简介 本文将要介绍以下内容: 获取远程桌面连接口令的思路 使用Detours库hook系统API的方法 使用API monitor监控系统API调用的方法 使用RdpThief从远程桌面客户端提取明文凭据 0x02 获取远程桌面连接口令的思路 通常有以下两种: 1.使用键盘记录程序,记录mstsc.exe在启动过程中用户输入的口令 2.在mstsc.exe启动时,读取mstsc.exe的内存数据,提取出用户输入的口令 RdpThief是第二种实现思路,使用Detours库hook系统API,使用API monitor监控系统的API调用,找到mstsc.exe在内存中存储明文口令的位置,代码简洁有效。 0x03 使用Detours库hook系统API的方法 RdpThief在实现上使用Detours库来hook系统API,所以这里简要介绍一下Detours库的用法 Detours库用于监视和检测Windows上的API调用,可以用来hook系统API 这里介绍使用Detours库hook系统API的两种方法 1.编译Detours源码并使用 (1)编译Detours源码 下载Detours源码,地址如下: https://github.com/Microsoft/Detours 使用Visual Studio编译Detours源码(这里以VS2015为例),需要区分32位和64位 64位编译: 打开VS2015 x64 本机工具命令提示符 执行以下命令: cd Detours-master\src nmake 命令执行后将在文件夹Detours-master下生成以下三个文件夹,包括Detours的头文件和库文件 bin.X64 include lib.X64 32位编译: 打开VS2015本机工具命令提示符 执行以下命令: cd Detours-master\src...
-
Invoke-PowerThIEf利用分析
0x00 前言 Invoke-PowerThIEf是一个开源的Powershell脚本,不仅能够用来对IE浏览器窗口的内容进行操作,还能通过Hook的方法捕获IE浏览器的凭据。 地址如下: https://github.com/nettitude/Invoke-PowerThIEf 本文将要对Invoke-PowerThIEf的功能进行测试,分享在Win7 sp1 x64下的使用方法,结合自己的经验,分析利用思路。 0x01 简介 本文将要介绍以下内容: 功能测试 Win7Sp1下的使用方法 利用分析 0x02 功能测试 Invoke-PowerThIEf需要的环境配置如下: IE 11 Win 7-10 .Net 4.0+ Powershell 4.0 考虑到以下原因: Window7或Windows Server 2008,默认安装PowerShell 2.0 Windows8或Windows server 2012,默认安装PowerShell 3.0 Windows 8.1或Windows server 2012 R2,默认安装PowerShell 4.0 首先选择Windows server 2012 R2 x64作为测试环境,可直接运行 常用功能如下: (1)列出IE浏览器的所有页面 Invoke-PowerThIEf -action ListUrls...
-
渗透基础——命令行下安装Microsoft .NET Framework
0x00 前言 在渗透测试中,有些工具的运行(例如高版本的Powershell)需要依赖Microsoft .NET Framework 4.0的环境。 而默认配置下,Win7不支持Microsoft .NET Framework 4.0。为了保证工具能够在Win7下使用,这里就需要在命令行下实现安装Microsoft .NET Framework 4.0。 经过一番搜索,我没有找到介绍命令行下安装Microsoft .NET Framework的资料。 于是我写了这篇文章,介绍我的实现方法,开源C代码,分享实现原理和脚本开发的细节。 0x01 简介 本文将要介绍以下内容: Win7下安装Microsoft .NET Framework 4.0的正常方法 命令行下的实现方法 实现原理 脚本开发的细节 0x02 Win7下安装Microsoft .NET Framework 4.0的正常方法 Microsoft .NET Framework的安装包分为两种: (1)Web Installer 下载地址: https://www.microsoft.com/en-us/download/details.aspx?displaylang=en&id=17851 Web Installer的文件很小,在安装过程中需要Internet连接来下载其他所需的.NET Framework组件 (2)Standalone Installer 下载地址: https://www.microsoft.com/en-US/Download/confirmation.aspx?id=17718 Standalone Installer的文件相对来说会很大,因为它包括了完整的组件,在安装过程中不需要Internet连接 这里以Standalone Installer为例,正常的流程如下:...
-
Covenant利用分析
0x00 前言 Covenant是一个.NET开发的C2(command and control)框架,使用.NET Core的开发环境,不仅支持Linux,MacOS和Windows,还支持docker容器。 最特别的地方是支持动态编译,能够将输入的C#代码上传至C2 Server,获得编译后的文件并使用Assembly.Load()从内存进行加载。 本文仅在技术研究的角度,介绍Covenant的细节,分析特点。 0x01 简介 本文将要介绍以下内容: Covenant的启动方法 Covenant的功能介绍 Covenant的优点 Covenant的检测 0x02 Covenant的启动方法 1.Windows系统 需要装对应版本的.NET Core、ASP.NET Core和SDK 经测试,Covenant需要.NET Core 2.2.0、ASP.NET Core 2.2.0和SDK 2.2.101,其他版本会报错 下载地址: https://dotnet.microsoft.com/download/thank-you/dotnet-sdk-2.2.101-windows-x64-installer https://dotnet.microsoft.com/download/thank-you/dotnet-runtime-2.2.0-windows-x64-installer https://dotnet.microsoft.com/download/thank-you/dotnet-runtime-2.2.0-windows-x64-asp.net-core-runtime-installer 安装Git for Windows https://github.com/git-for-windows/git/releases/download/v2.23.0.windows.1/Git-2.23.0-64-bit.exe 下载并启动: git clone --recurse-submodules https://github.com/cobbr/Covenant cd Covenant/Covenant dotnet build dotnet run 访问https://localhost:7443进入控制面板,第一次使用时需要注册用户 这里可以注册多个用户,实现团队协作 注:...
-
从内存加载.NET程序集(Assembly.Load)的利用分析
0x00 前言 在之前的文章《从内存加载.NET程序集(execute-assembly)的利用分析》介绍了"execute-assembly"的实现方法和利用思路,能够从内存中加载.NET程序集。这个功能不需要向硬盘写入文件,十分隐蔽。 与此相似的方法还有一个是Assembly.Load,同样能够从内存中加载.NET程序集。 本文将会结合三个开源工程,介绍Assembly.Load的实现方法,分析利用思路。 0x01 简介 本文将要介绍以下内容: 基础知识 SharpCradle的利用分析 SharpShell的利用分析 SharpCompile的利用分析 0x02 基础知识 参考资料: https://docs.microsoft.com/en-us/dotnet/api/system.reflection.assembly.load?view=netframework-4.5 1.Assembly.Load()、Assembly.LoadFrom()和Assembly.LoadFile()的区别 Assembly.Load()是从String或AssemblyName类型加载程序集,可以读取字符串形式的程序集,也就是说,文件不需要写入硬盘 Assembly.LoadFrom()从指定文件中加载程序集,同时会加载目标程序集所引用和依赖的其他程序集 例如: Assembly.LoadFrom("a.dll"),如果a.dll中引用了b.dll,那么会同时加载a.dll和b.dll Assembly.LoadFile()也是从指定文件中加载程序集,但不会加载目标程序集所引用和依赖的其他程序集 例如: Assembly.LoadFile("a.dll"),如果a.dll中引用了b.dll,那么不会加载b.dll 2.Assembly.Load()的实现示例 (1)编写测试程序 测试程序的代码如下: using System; namespace TestApplication { public class Program { public static void Main() { Console.WriteLine("Main"); } } public class aaa { public static...
-
SharpGen利用分析
0x00 前言 SharpGen是我认为特别棒的一个工具,它能够用来对其他.Net程序集进行整合、重组并加密,二次编译后可生成一个全新的工具 本文将要研究SharpGen的细节,介绍调用其他开源库的详细方法,分析利用思路 参考链接: https://github.com/cobbr/SharpGen https://cobbr.io/SharpGen.html 0x01 简介 本文将要介绍以下内容: .NET Core开发环境搭建 功能介绍 调用其他开源库的方法 利用思路 0x02 .NET Core开发环境搭建 SharpGen使用.NET Core,优点是支持多平台(Linux,MacOS和Windows) 编程语言使用C#,利用Rosyln编译.NET Framework控制台应用程序或库 注: Rosyln是一个.NET编译器平台,通过Scripting API,能够对脚本文件进行动态编译 测试系统:Win7x64 我在测试系统选择安装.NET Core 2.2.0、ASP.NET Core 2.2.0和SDK 2.2.101,这是为了兼容另一个工具Covenant 对应版本的下载链接如下: https://dotnet.microsoft.com/download/thank-you/dotnet-sdk-2.2.101-windows-x64-installer https://dotnet.microsoft.com/download/thank-you/dotnet-runtime-2.2.0-windows-x64-installer https://dotnet.microsoft.com/download/thank-you/dotnet-runtime-2.2.0-windows-x64-asp.net-core-runtime-installer 安装Git for Windows,下载链接如下: https://github.com/git-for-windows/git/releases/download/v2.23.0.windows.1/Git-2.23.0-64-bit.exe 下载安装并编译SharpGen: git clone https://github.com/cobbr/SharpGen cd SharpGen dotnet build --configuration Release...