Good in study, attitude and health

  • 渗透技巧——导出Firefox浏览器中保存的密码

    0x00 前言 在之前的文章《渗透技巧——导出Chrome浏览器中保存的密码》介绍了导出Chrome浏览器密码的原理和利用方法,本文将要对导出Firefox浏览器密码的原理和利用方法进行介绍,分析利用思路。 0x01 简介 本文将要介绍以下内容: 密码保存方式 原理介绍 常用的导出工具 利用思路 0x02 密码保存方式 正常用户在访问网站时,可选择使用Firefox浏览器保存登录的用户密码,用于下次登录的时候Firefox自动填写登录密码 可以通过选择Logins and Passwords进行查看,如下图 包括以下信息: Website address Username Password Created Last modified Last used 所有记录保存在同一个文件中,具体位置为:%APPDATA%\Mozilla\Firefox\Profiles\xxxxxxxx.default\ 注: xxxxxxxx为8位随机字母和数字的组合 不同版本的Firefox保存记录的文件名称不同,具体区别如下: Version大于等于32.0,保存记录的文件为logins.json Version大于等于3.5,小于32.0,保存记录的文件为signons.sqlite 更详细的文件说明可参考: http://kb.mozillazine.org/Profile_folder_-_Firefox 不同版本Firefox的下载地址: http://ftp.mozilla.org/pub/firefox/releases/ 定位logins.json文件的位置可通过cmd命令实现,内容如下: dir %APPDATA%\Mozilla\Firefox\Profiles\*logins.json /s /b 查看logins.json文件的内容,如下图 其中encryptedUsername和encryptedPassword是加密的内容,解密需要获得密钥文件(key和iv)并作3DES-CBC解密 不同版本的Firefox密钥文件的位置不同,具体区别如下: Version小于58.0.2,密钥文件为key3.db Version大于等于58.0.2,密钥文件为key4.db 注: key3.db和key4.db的版本区别来源于https://github.com/lclevy/firepwd/blob/master/firepwd.py#L236 我在我的测试系统(Win7x64)下,安装64位Firefox,测试结果有所不同,具体如下: 如果Firefox的版本低于58.0,密钥文件为key3.db...

  • ProcessHider利用分析

    0x00 前言 ProcessHider能够在任务管理器和Process Explorer之类的监视工具中隐藏指定进程,本文将要介绍实现原理,分析代码细节。 0x01 简介 本文将要介绍以下内容: ProcessHider测试 ProcessHider的实现原理 ProcessHider的代码分析 ProcessHider的检测 0x01 简介 ProcessHider能够在任务管理器和Process Explorer之类的监视工具中隐藏指定进程 地址如下: https://github.com/M00nRise/ProcessHider 支持以下参数: pid 进程名 两种启动形式: exe powershell ProcessHider能够自动识别操作系统版本和进程位数,向32位和64位进程分别注入Payload.dll,通过Hook API NtQuerySystemInformation()实现进程隐藏 注入的代码使用Dll反射,地址如下: https://github.com/stephenfewer/ReflectiveDLLInjection Hook的代码使用NtHookEngine,地址如下: https://www.codeproject.com/Articles/21414/Powerful-x86-x64-Mini-Hook-Engine 参数实例: ProcessHider.exe -n "putty.exe" -x "procexp.exe" 能够在procexp.exe中隐藏进程名putty.exe,并且默认针对以下进程进行隐藏: Taskmgr.exe powershell.exe procexp.exe procexp64.exe perfmon.exe 注: 目前不支持对tasklist.exe的进程隐藏 编译时需要注意的问题: 工程ProcessHider需要编译成32位,不能编译成64位 这是因为工程ProcessHider包含了针对64位进程的识别和利用代码 0x02 ProcessHider的实现原理 工程ProcessHider实现流程如下:...

  • 渗透技巧——通过Kerberos pre-auth进行用户枚举和口令爆破

    0x00 前言 在之前的文章《渗透基础——通过LDAP协议暴力破解域用户的口令》介绍了通过LDAP协议暴力破解域用户口令的方法,最大的特点是会产生日志(4625 - An account failed to log on) 而使用kerbrute通过Kerberos pre-auth进行暴力破解时不会产生日志(4625 - An account failed to log on),于是我对kerbrute做了进一步的研究,使用python实现了相同的功能,并且添加支持TCP协议和NTLM hash的验证。本文将要记录自己的研究过程和学习心得。 0x01 简介 kerbrute的介绍 kerbrute的原理 使用python实现kerbrute的细节 开源代码pyKerbrute Kerberos pre-auth bruteforcing的检测 0x02 kerbrute的适用场景 适用场景:从域外对域用户进行用户枚举和口令暴力破解 由于没有域用户的口令,所以无法通过LDAP协议枚举出所有域用户,而且使用LDAP协议进行暴力破解时会产生日志(4625 - An account failed to log on) 使用kerbrute有如下优点: 使用Kerberos pre-auth bruteforcing的速度更快 不会产生日志(4625 - An account failed to...

  • 渗透基础——通过LDAP协议暴力破解域用户的口令

    0x00 前言 在域渗透中,如果已经掌握了一些域用户的口令,通常会选择寻找口令规律,生成字典文件,尝试对其他域用户的口令进行暴力破解。 站在防御的角度,需要确保域用户没有使用存在规律的弱口令,也需要能够发现暴力破解域用户口令的行为。 本文将要分别介绍在域内和域外暴力破解域用户口令的常用方法,结合利用思路,介绍检测方法。 0x01 简介 本文将要介绍以下内容: 域内暴力破解域用户口令的方法 域外暴力破解域用户口令的方法 检测方法 0x02 暴力破解域用户口令需要注意的问题 多次口令输入错误会导致用户帐户被锁定,默认设置的错误次数为5 用户帐户被锁定后,默认需要等待30分钟才能恢复使用 最后一次口令输入错误的时间会被记录,无法通过修改LDAP数据进行清除,提示如下: Error 0x209A Access to the attribute is not permitted because the attribute is owned by the Security Accounts Manager (SAM). 用户帐户被锁定后,即使输入正确的口令,也会提示口令错误 0x03 域内暴力破解域用户口令的方法 1.获得域内用户的口令策略,避免帐户被锁定 获取口令策略的详细方法可参考上篇文章《渗透基础——域内用户口令策略的获取》 2.获得所有域用户的列表 获取的详细方法可参考之前的文章《渗透基础——活动目录信息的获取》 这里需要额外对用户的属性进行判断,去除被禁用和被锁定的用户 (1)识别被禁用的用户 标识用户是否被禁用的位置位于userAccountControl属性中,具体的位置为0x0002 如下图 参考资料: https://support.microsoft.com/en-us/help/305144/how-to-use-useraccountcontrol-to-manipulate-user-account-properties 使用PowerView查看所有用户的ACCOUNTDISABLE属性,命令如下:...

  • 渗透基础——域内用户口令策略的获取

    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...