Good in study, attitude and health

  • Authenticode签名伪造——PE文件的签名伪造与签名验证劫持

    0x00 前言 在上一篇文章《CAT文件数字签名使用技巧》介绍了证书签名的基础知识,Windows系统下向文件签名有两种方法:添加在文件末尾(Authenticode)和CAT文件(catalog),本文将介绍Authenticode签名的相关利用技巧——PE文件的签名伪造与签名验证劫持 注: 本文介绍的技巧参考自Matt Graeber@mattifestation公开的资料,本文将结合自己的经验,整理相关内容,添加个人理解。 参考资料: https://specterops.io/assets/resources/SpecterOps_Subverting_Trust_in_Windows.pdf http://www.exploit-monday.com/2017/08/application-of-authenticode-signatures.html https://drive.google.com/file/d/0B-K55rLoulAfNms1aW1rbXF1Tmc/view 0x01 简介 本文将要介绍以下内容: PE文件的Authenticode签名伪造 劫持签名验证过程,实现代码执行,作为后门 0x02 PE文件的签名伪造 Authenticode的详细说明文档可参考: http://download.microsoft.com/download/9/c/5/9c5b2167-8017-4bae-9fde-d599bac8184a/Authenticode_PE.docx 部分系统文件会包含微软的签名,例如C:\Windows\System32\consent.exe 通过文件属性能够看到相关签名信息,如下图 通过powershell验证,代码如下: Get-AuthenticodeSignature C:\Windows\System32\consent.exe 如下图 借助工具CFF Explorer获取文件结构,如下图 Security Directory RVA代码数字签名在PE文件中的偏移位置 Security DirectorySize代表数字签名的长度 将这部分内容提取,复制到另一个文件test.exe的尾部,同时使用CFF Explorer修改test.exe对应的Security Directory RVA和Security DirectorySize 这样,就实现了数字签名的伪造 开源工具SigThief可自动实现以上过程,地址如下: https://github.com/secretsquirrel/SigThief 实际测试: 测试系统: Win7 将C:\Windows\System32\consent.exe的数字签名复制到mimikatz.exe中 参数如下: sigthief.py -i C:\Windows\System32\consent.exe -t mimikatz.exe...

  • CAT文件数字签名使用技巧

    0x00 前言 Windows系统中的重要文件常常会被添加数字签名,用来防止被篡改,部分白名单规则的判定也会基于数字签名。 本文作为数字签名研究系列文章的基础内容,介绍两种数字签名的添加方法,分析CAT文件数字签名的特点,并且纠正一名读者对我文章的回复,地址如下: 《利用xwizard.exe加载dll》 基于我的测试,个人认为:移动位置后,CAT文件数字签名不会失效 0x01 简介 本文将要介绍以下内容: 生成证书的方法 将数字签名添加在文件末尾的方法(Authenticode) 将数字签名保存在CAT文件中的方法(catalog) 使用CAT数字签名的文件特点 0x02 将数字签名添加在文件末尾的方法(Authenticode) 曾在隐写技巧的系列文章中研究过在数字签名中隐藏payload的方法,地址如下: 《隐写技巧——在PE文件的数字证书中隐藏Payload》 文中介绍过证书格式,在此不再赘述 向文件尾部添加数字签名后,可通过文件属性查看 实例: C:\Windows\System32\consent.exe 自带微软数字签名,如下图 可通过powershell验证数字签名: Get-AuthenticodeSignature .\mimikatz.exe 也可以使用工具通过命令行查看数字签名 使用signtool.exe查看: signtool.exe verify /v C:\Windows\System32\consent.exe 如下图 使用sigcheck.exe查看: sigcheck.exe -q C:\Windows\System32\consent.exe /accepteula 如下图 注: signtool.exe: 可用于查看文件的数字签名 安装Visual Studio后包含SDK,其中可找到signtool.exe,位于C:\Program Files\Microsoft SDKs\Windows\ 进入开发人员工具的cmd可直接调用signtool.exe Windows 7 SDK下载地址: https://www.microsoft.com/en-us/download/details.aspx?id=8279...

  • 渗透技巧——Token窃取与利用

    0x00 前言 在之前的文章《渗透技巧——程序的降权启动》介绍了使用SelectMyParent降权的方法,本质上是通过token窃取实现的。这一次将要对token窃取和利用做进一步介绍,测试常用工具,分享利用技巧。 0x01 简介 本文将要介绍以下内容; Token简介 Metasploit中的incognito Windows平台下的incognito Invoke-TokenManipulation.ps1用法 利用token获得system权限 利用token获得TrustedInstaller权限 0x02 Token简介 Windows有两种类型的Token: Delegation token(授权令牌):用于交互会话登录(例如本地用户直接登录、远程桌面登录) Impersonation token(模拟令牌):用于非交互登录(利用net use访问共享文件夹) 注: 两种token只在系统重启后清除 具有Delegation token的用户在注销后,该Token将变成Impersonation token,依旧有效 实际测试 使用Test\a登录后注销,再使用administrator登录 查看token: incognito.exe list_tokens -u 能够获取到已注销用户Test\a的token,如下图 利用该token执行calc.exe: incognito.exe execute -c "TEST\a" calc.exe 后台显示进程calc.exe的用户名为a,如下图 0x03 Metasploit中的incognito 在Metasploit中,可使用incognito实现token窃取,常用命令如下: 加载incognito:load incognito 列举token:list_tokens -u 查看当前token:getuid 提示至system权限:getsystem token窃取:impersonate_token "NT...

  • 域渗透——利用SYSVOL还原组策略中保存的密码

    0x00 前言 在之前的文章《域渗透——Local Administrator Password Solution》对LAPS的利用进行了分析。使用LAPS最大的优点是能够确保每台域内主机有不同的密码,并且定期更换。 那么,如果域内未配置LAPS,如何批量设置域内主机的本地管理员密码呢?这其中又存在哪些可被利用的地方呢? 本文将要介绍如何利用SYSVOL还原组策略中保存的密码,分析技术细节,最后给出防御建议 0x01 简介 本文将要介绍以下内容: 域内共享文件夹\SYSVOL介绍 域管理员批量修改域内主机本地管理员密码的方法 组策略中可被利用的地方 实际测试 防御建议 0x02 域内共享文件夹\SYSVOL介绍 在域中,存在一个默认的共享路径: \\<DOMAIN>\SYSVOL\<DOMAIN>\ 所有域内主机都能访问,里面保存组策略相关数据,包含登录脚本配置文件等 例如,测试主机所在域为test.local,可访问共享文件夹\\test.local\SYSVOL\test.local,如下图 0x03 域管理员批量修改域内主机本地管理员密码的方法 1、测试Server 2003系统 对于server2003,想要批量修改域内主机本地管理员密码,常常通过配置组策略执行vbs脚本的方式 给出一个修改密码的vbs脚本(实现方式不唯一),代码如下: strComputer = "." Set objUser = GetObject("WinNT://" & strComputer & "/Administrator, user") objUser.SetPassword "domain123!" objUser.SetInfo 这种实现方式,最大的弊端在于修改后的密码会明文保存在vbs脚本中 而该vbs脚本通常会保存在共享文件夹\SYSVOL 这就存在一个隐患: 任何域用户都能读取该vbs脚本,也就能够获取脚本中保存的明文密码 2、测试Server 2008系统 对于server...

  • Use CLR to bypass UAC

    0x00 前言 在之前的文章《Use CLR to maintain persistence》介绍了通过CLR劫持.Net程序的后门,特点是无需管理员权限,并能够劫持所有.Net程序。那么,如果劫持了高权限的.Net程序,就能够绕过UAC,比如gpedit.msc 最近我在clem@clavoillotte的博客上也看到了相同的利用思路,并且,他的博客里有更多值得学习的地方。于是,我对他博客介绍的内容进行了整理,结合自己的经验,适当作补充,分享给大家。 clem@clavoillotte的博客地址: https://offsec.provadys.com/UAC-bypass-dotnet.html 0x01 简介 本文将要介绍以下内容: 使用CLR绕过UAC的方法 劫持系统CLSID绕过UAC的方法 0x02 使用CLR绕过UAC 我在《Use CLR to maintain persistence》一文中使用了wmic修改环境变量,代码如下: wmic ENVIRONMENT create name="COR_ENABLE_PROFILING",username="%username%",VariableValue="1" wmic ENVIRONMENT create name="COR_PROFILER",username="%username%",VariableValue="{11111111-1111-1111-1111-111111111111}" 在《Use Logon Scripts to maintain persistence》补充了使用powershell修改环境变量的方法,代码如下: New-ItemProperty "HKCU:\Environment\" COR_ENABLE_PROFILING -value "1" -propertyType string | Out-Null New-ItemProperty "HKCU:\Environment\" COR_PROFILER -value "{11111111-1111-1111-1111-111111111111}"...

  • 域渗透——利用DCOM在远程系统执行程序

    0x00 前言 在以前的文章《在远程系统上执行程序的技术整理》整理过域环境下常用的程序执行方法:at、psexec、WMIC、wmiexec、smbexec和powershell remoting,这次将基于Matt Nelson‏ @enigma0x3的研究,详细介绍在域环境下使用DCOM执行程序的方法,分析相关攻防思路。 学习链接如下: https://enigma0x3.net/2017/01/05/lateral-movement-using-the-mmc20-application-com-object/ https://enigma0x3.net/2017/01/23/lateral-movement-via-dcom-round-2/ 0x01 简介 本文将要介绍以下内容: DCOM使用介绍 实际利用思路 命令行配置防火墙的技巧 防御思路 0x02 DCOM使用介绍 相关基础知识暂略,关于DCOM的介绍可参考如下链接: https://msdn.microsoft.com/en-us/library/cc226801.aspx http://blog.csdn.net/ervinsas/article/details/36424127 本节主要选取Matt Nelson‏ @enigma0x3博客中的主要利用方法进行复现 获得DCOM的程序列表: powershell代码: Get-CimInstance Win32_DCOMApplication 注: Get-CimInstance只适用于Powershell 3.0及以上,Win7默认为2.0不支持,可使用以下替代命令: Get-WmiObject -Namespace ROOT\CIMV2 -Class Win32_DCOMApplication 当然,直接使用wmic查询也可以,代码如下: wmic /NAMESPACE:"\\root\CIMV2" PATH Win32_DCOMApplication GET /all /FORMAT:list powershell对WMI的调用可使用wmic命令进行替换,详情可参考: https://3gstudent.github.io/Study-Notes-of-WMI-Persistence-using-wmic.exe 1、对本机测试 管理员权限,powershell代码如下: 获得"MMC20.Application"支持的操作: $com...

  • Empire中的Invoke-WScriptBypassUAC利用分析

    0x00 前言 知名的后渗透测试框架Empire是一个很好的学习模板,其中包含的后渗透技巧很值得深入研究。 本文将要挑选Empire中一个经典的UAC绕过方法Invoke-WScriptBypassUAC进行分析,介绍绕过原理以及在渗透测试中的更多利用技巧。知道如何利用,才能知道如何防御。 Invoke-WScriptBypassUAC地址: https://github.com/EmpireProject/Empire/blob/master/data/module_source/privesc/Invoke-WScriptBypassUAC.ps1 0x01 简介 本文将要介绍如下内容: Invoke-WScriptBypassUAC绕过原理 利用扩展 防御检测 0x02 Invoke-WScriptBypassUAC绕过原理 Invoke-WScriptBypassUAC通过powershell实现,思路上借鉴了Vozzie分享的github,地址如下: https://github.com/Vozzie/uacscript Vozzie提到ZDI和微软选择忽略该UAC绕过“漏洞”,ZDI认为这不是一个远程漏洞,微软认为UAC绕过不属于漏洞范畴 Invoke-WScriptBypassUAC在实现上使用了一些实用的小技巧,所以本文主要对Invoke-WScriptBypassUAC的绕过方法进行分析 该方法只适用于Win7,而Win8、Win10不适用(原因在后面介绍) 测试系统: Win7 x86 由于powershell格式的源代码公开,所以直接介绍该脚本关键的操作流程: 判断操作系统是否为Win7,是否为普通权限 Temp目录释放文件wscript.exe.manifest 使用makecab.exe对wscript.exe.manifest和wscript.exe进行压缩 使用wusa将压缩包解压缩,将wscript.exe.manifest和wscript.exe释放至c:\Windows目录 payload保存在Appdata文件夹的ADS中 使用c:\Windows\wscript.exe执行payload,实现管理员权限执行payload,绕过UAC 0x03 利用扩展 掌握操作流程后,我们完全可以手动进行拆分测试,在这个过程中能发现更多利用思路 1、保存wscript.exe.manifest文件 代码如下: <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3" manifestVersion="1.0"> <asmv3:trustInfo> <security> <requestedPrivileges> <requestedExecutionLevel level="RequireAdministrator" uiAccess="false"/> </requestedPrivileges> </security>...

  • Use powershell to find a writable windows service

    0x00 前言 从DidierStevens的博客学到了一些技巧,本文将要对其中涉及到的技巧进行测试总结,并开源一个powershell脚本,用来寻找可被替换的服务,实现自动化利用。 DidierStevens的博客链接: https://blog.didierstevens.com/2017/09/05/abusing-a-writable-windows-service/ 0x01 简介 本文将要介绍以下内容: 使用c#编写可供Windows服务调用的程序 psexec的-i参数使用技巧 sc命令使用技巧 通过powershell获取服务对应的可执行文件路径 自动化利用脚本开发细节 0x02 使用c#编写可供Windows服务调用的程序 可供Windows服务调用的程序需要能够同SCM(Services Control Manager)进行交互,所以在程序编写上需要注意 Didier Stevens在博客中给出了c#开发的模板,代码如下: using System.ServiceProcess; namespace Demo { public class Service : ServiceBase { protected override void OnStart(string[] args) { System.Diagnostics.Process.Start("cmd.exe"); } } static class Program { static void Main() { ServiceBase.Run(new ServiceBase[]...

  • Use Logon Scripts to maintain persistence

    0x00 前言 依旧是对后门利用方法做介绍,本次介绍的是使用Logon Scripts的方法。然而我在研究过程中发现了一个特别的用法,脚本优先于杀毒软件执行,能够绕过杀毒软件对敏感操作的拦截,本文将要具体介绍这个技巧。 注: 有些杀毒软件是可以做到优先于Logon Scripts启动的 0x01 简介 Logon Scripts用法 绕过360对wmi调用的拦截 特别用法 0x02 Logon Scripts用法 思路来自于Adam@Hexacorn,地址如下: http://www.hexacorn.com/blog/2014/11/14/beyond-good-ol-run-key-part-18/ 简要介绍Logon Scripts的用法 注册表路径:HKCU\Environment\ 创建字符串键值: UserInitMprLogonScript 键值设置为bat的绝对路径:c:\test\11.bat 如下图 bat内容如下: start calc.exe 注销,登录 执行脚本11.bat,弹出计算器 0x03 绕过360对通过wmi修改环境变量的拦截 在之前的文章《Use CLR to maintain persistence》提到过使用wmic修改环境变量的方法 命令如下: wmic ENVIRONMENT create name="COR_ENABLE_PROFILING",username="%username%",VariableValue="1" wmic ENVIRONMENT create name="COR_PROFILER",username="%username%",VariableValue="{11111111-1111-1111-1111-111111111111}" 然而,360会对WMI的操作进行拦截,如下图 其实通过WMI添加环境变量等价于在注册表HKCR\Environment\新建键值 所以对WMI的操作可以通过写注册表的操作进行代替 以上WMI命令可替换为如下powershell代码:...

  • Use COM Object hijacking to maintain persistence——Hijack explorer.exe

    0x00 前言 在之前的文章介绍了两种利用COM对象劫持实现的后门,利用思路有一些区别: 第一种,通过CLR劫持.Net程序 正常CLR的用法: 设置注册表键值HKEY_CURRENT_USER\Software\Classes\CLSID\ cmd下输入: SET COR_ENABLE_PROFILING=1 SET COR_PROFILER={11111111-1111-1111-1111-111111111111} CLR能够劫持当前cmd下所有.Net程序的启动 后门利用思路: 我尝试通过WMI修改环境变量,使CLR作用于全局,就能够劫持所有.Net程序的启动 经实际测试,该方法有效,系统启动后默认会调用.Net程序,加载CLR,后门触发 第二种,劫持CAccPropServicesClass和MMDeviceEnumerator 该方法曾被木马COMpfun使用,所以思路也是从COMpfun学到的 设置注册表键值HKEY_CURRENT_USER\Software\Classes\CLSID\能够指定实例CAccPropServicesClass和MMDeviceEnumerator对应加载的dll 而IE浏览器进程iexplore.exe启动时会调用以上两个实例 所以通过注册表设置CAccPropServicesClass和MMDeviceEnumerator对应加载的dll,能够劫持IE浏览器的启动,实现后门触发 当然,该方法只能算得上是一个被动后门,只有用户启动IE浏览器,才能触发后门 然而,在众多COM对象中,可供利用的劫持对象不唯一,甚至存在能够劫持桌面进程explorer.exe的方法,相当于一个主动后门 例如:劫持MruPidlList 注: 该方法曾被多个已知的恶意软件使用 本着通过研究所有已公开的COM对象后门利用方法,进而总结应对COM劫持防御方法的原则,本文将要介绍另外两种COM劫持的后门利用方法 之前的文章: 《Use CLR to maintain persistence》 《Use COM Object hijacking to maintain persistence——Hijack CAccPropServicesClass and MMDeviceEnumerator》 0x01 简介 本文将要介绍以下内容 通过劫持MruPidlList实现的后门思路 恶意利用实例 总结应对COM劫持的防御方法 0x02 通过劫持MruPidlList实现的后门思路...