-
Study Notes Weekly No.3(Use odbcconf to load dll & Get-Exports & ETW USB Keylogger)
About: Use odbcconf to load dll Use powershell to get dll exports Use Event Tracing for Windows to log keystrokes from USB keyboards 目录: 介绍为什么通过odbcconf加载dll可以绕过在命令行下对regsvr32的拦截 比ExportsToC++更方便的批量输出dll导出函数的工具——ExportsToC++ 通过ETW实现对USB键盘的键盘记录,记录测试心得 0x01 Use odbcconf to load dll Reference: https://twitter.com/subTee/status/789459826367606784 简介 如图,Casey Smith在twitter分享的一个技巧,如果将执行regsvr32加载dll的代码写在.rsp文件中,再通过odbcconf.exe去调用,这样可以绕过在命令行下对regsvr32的拦截。本文将要介绍为什么可以绕过在命令行下对regsvr32的拦截。 odbcconf: 用于配置ODBC驱动和数据源 详细说明见如下链接: https://msdn.microsoft.com/en-us/library/ee388579(v=vs.85).aspx 用法如图 值得注意的是odbcconf包含一个注册dll的功能,我在之前的文章《Code Execution of Regsvr32.exe》中具体介绍过如何开发可被regsvr32调用的dll,编写一个测试dll进行测试(此处略,不再重复介绍)。 cmd下运行: odbcconf.exe /a...
-
渗透测试中的Application Compatibility Shims
0x00 前言 Application Compatibility是一个框架,主要用来解决应用程序在新版Windows系统上的兼容性问题。然而在渗透测试中它却有着更多的用处,本文将对公开资料进行整理,介绍在渗透测试中的具体利用技术,帮助大家更好的认识它,防御它。 0x01 简介 Shim: 相当于是在应用程序和Windows API之间的逻辑层。 当应用程序创建进程的时候,WindowsLoader首先会检查sysmain.sdb(位于%windir%\AppPatch\),如果存在已注册的sdb文件,IAT将被重定向到Shim,实现功能替换。 本文将介绍以下内容: 创建Shim文件 实际利用方法 相关开源工具 检测和防御 0x02 创建Shim文件 1.Microsoft Application Compatibility Toolkit(ACT) 下载地址: https://www.microsoft.com/en-us/download/details.aspx?id=7352 默认修复方式种类个数为365 启动时加入/x参数可获得更多修复方式,总数807 如图 根据提示创建后生成.sdb文件,需要安装使其生效 可在Microsoft Application Compatibility Toolkit中直接选择安装,如图 0x03 实际利用方法 1.Hiding in the Registry 选择VirtualRegistry Command line填入: ADDREDIRECT(HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run^HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunHidden) 安装shim 启动regedit HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run下键值无法查看,如图 但在cmd下执行如下命令可以查看: reg query HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run 如图 2.Hiding...
-
故障诊断平台在渗透测试中的应用技巧
0x00 前言 近日,Proofpoint的Matthew Mesa和Axel F发现了一种新型钓鱼方式,攻击者将故障排除包(troubleshooting pack)作为邮件附件,欺骗用户运行,隐蔽执行Payload。他们在文章中介绍了攻击者采用的方法和隐藏手段,提示用户对此提高警惕。 文章链接: https://www.proofpoint.com/us/threat-insight/post/windows-troubleshooting-platform-leveraged-deliver-malware 本文将站在技术研究的角度,介绍如何开发一个包含payload的故障排除包,并结合攻击思路分析防御方法,希望能帮助大家对这项技术有进一步的认识。 0x01 简介 Windows故障诊断平台: 英文翻译Windows Troubleshooting Platform,缩写为WTP 开发商可基于该平台编写故障排除包(troubleshooting pack),帮助用户解决遇到的PC问题 WTP结构如图 图片引用自https://msdn.microsoft.com/en-us/library/windows/desktop/dd323706(v=vs.85).aspx 简要流程如下: 检查故障排除包的数字签名,如果不可用,直接退出 依次执行检测脚本(detection scripts)、解决脚本(resolution scripts)、验证脚本(verification scripts),尝试解决故障 生成结果报告和调试报告 故障排除包: 由五个组件构成: 故障排除清单(Troubleshooting manifest) 检测脚本(detection scripts) 解决脚本(resolution scripts) 验证脚本(verification scripts) 本地化资源(localized resources) 详情如图 引用自https://msdn.microsoft.com/en-us/library/windows/desktop/dd323706(v=vs.85).aspx 0x02 开发故障排除包 官方开发工具: TSPDesigner 注: 该工具包含于Windows 7 SDK中 实际测试只有v7.0和v7.1包含此工具 Windows...
-
Netsh persistence
About: Common commands of netsh Matthew Demaske’s way of using netshell to execute evil dlls and persist on a host Write a dll with the InitHelperDll function How to use Detection 目录: 介绍netsh的常用命令 测试Matthew Demaske分享的方法——using netshell to execute evil dlls and persist on a host 如何使用c++编写导出函数为InitHelperDll的helper dll 实际测试利用 防御和检测 Reference:...
-
Use MSBuild To Do More
0x00 前言 最近Casey Smith@subTee更新了一系列关于”MSBuild”的研究进展,对我有很大启发。 本文将基于他公开的POC,并结合我的研究心得,介绍以下MSBuild的应用技巧: Execute PowerShell Commands Execute PE file Execute Shellcode VisualStudio Persistence 0x01 简介 MSBuild是Microsoft Build Engine的缩写,代表Microsoft和Visual Studio的新的生成平台 MSBuild可在未安装Visual Studio的环境中编译.net的工程文件 MSBuild可编译特定格式的xml文件 更多基本知识可参照以下链接: https://msdn.microsoft.com/en-us/library/dd393574.aspx 0x02 常规用法 1. 编译xml文件并执行代码 <?xml version="1.0" encoding="utf-8" ?> <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <Target Name="PrintCurrentDateTime"> <Message Text="The current date and time is: $([System.DateTime]::Now)." /> </Target> </Project> 保存为test.csproj...
-
Study Notes Weekly No.2(Shellcode Via JScript & VBScript)
About: DynamicWrapperX Generate shellcode Write JS and SCT script How to use Detection 目录: 介绍如何配置使用脚本附加库DynamicWrapperX 通过JS/VBS实现对win32 API的调用 如何在js脚本中加载shellcode 结合sct的攻击思路 补充在64位下的使用方法 对该方法的检测 Reference: http://subt0x10.blogspot.com/2016/09/shellcode-via-jscript-vbscript.html 0x00 前言 Casey Smith@subTee近日更新了新的博客,介绍了如何利用脚本附加库DynamicWrapperX实现JS/VBS对win32 API的调用,我很感兴趣,于是对其进行了学习研究。本文用来记录测试心得并补充个人理解。 0x01 DynamicWrapperX简介 1. 下载获得dynwrapx.dll 下载地址: http://www.script-coding.com/dynwrapx_eng.html 注册DynamicWrapperX: regsvr32 /i dynwrapx.dll 卸载DynamicWrapperX: regsvr32 /u /i dynwrapx.dll 注: /i表示对当前用户操作,当前用户权限即可;如何不加/i,代表对所有用户操作,需要管理员权限 /s可去掉注册成功弹出的提示框 2. 通过JS/VBS来调用win32 API 注册组件后就可以通过JS/VBS来调用win32...
-
渗透测试中的Volume Shadow Copy
0x00 前言 之前在《导出当前域内所有用户hash的技术整理》中研究过如何通过Volume Shadow Copy实现对ntds.dit文件的复制, 可用来导出域内所有用户hash。而最近在Carbon Black的博客上面又学到了一些新的利用方法,于是整理成文。 学习链接: https://www.carbonblack.com/2015/08/05/bit9-carbon-black-threat-research-team-unveils-nefarious-intents-of-volume-shadows-copies/ 0x01 简介 本文将详细介绍以下两方面内容: 通过Volume Shadow Copy恢复系统自动还原点内保存的文件 通过Volume Shadow Copy创建一个无文件的进程 流程如下: 创建当前卷影镜像 启动镜像内的程序 删除卷影镜像文件 程序源文件被删除 该进程实现无文件 0x02 背景知识 Volume Shadow Copy Service 用于数据备份 支持Windows Server 2003 及以上操作系统 系统默认在特定条件下自动创建数据备份,如补丁安装后。在Win7系统大概每隔一周自动创建备份,该时间无法确定 禁用VSS会影响系统正常使用,如 System Restore和 Windows Server Backup 可使用VShadow在命令行下手动创建卷影镜像 系统默认不支持VShadow,可在Microsoft Windows Software Development Kit (SDK)中获得该工具 注:...
-
Study Notes Weekly No.1(Monitor WMI & ExportsToC++ & Use DiskCleanup bypass UAC)
About: Monitor WMI Persistence Instructions about ExportsToC++ My test of using DiskCleanup on Windows 10 using DiskCleanup 目录: 介绍如何在系统日志中记录WMI Persistence,测试并分析如何绕过 dll劫持中会用到的一个辅助工具,自动读取dll的导出函数并生成对应的c++代码 实际测试《using DiskCleanup on Windows 10 using DiskCleanup》,记录过程,虽然测试失败,但其中包含的绕过思路值得学习 0x01 Monitor WMI Persistence Reference: https://www.fireeye.com/blog/threat-research/2016/08/wmi_vs_wmi_monitor.html 简介 攻击者通常会利用WMI来实现远程执行(如wmiexec)和后门(如WMI Persistence),然而Windows系统默认不会在日志中记录这些操作。于是Timothy Parisi和Evan Pena提出了他们的解决方法: 利用WMI Persistence的方法记录攻击者调用WMI的操作,并将以下结果写入系统日志中,监控系统实时读取系统日志,及时提醒用户受到攻击 Event Consumer Name Event Consumer Command Process Call Method...
-
Userland registry hijacking
0x00 前言 之前我在研究”Use SCT to Bypass Application Whitelisting Protection”的时候曾有过一个想法:在执行regsvr32命令注册COM组件的过程中,在注册表HKEY_CLASSES_ROOT\CLSID\下会同步创建COM组件的键值,并且classid的子项InprocServer32下会包含scrobj.dll的绝对路径,那么如果修改了子项InprocServer32的键值,能否实现对某些操作的劫持? 然而实际修改HKCR\CLSID\下的键值需要管理员权限,因此没有对这个想法深入研究。直到最近,Matt Nelson@enigma0x3的博客给了我新的思路,只需要普通用户权限就可以实现对高权限系统注册表键值的劫持,让我对userland registry hijacking有了新的认识。 0x01 简介 本文将对userland registry hijacking的原理进行介绍,实例分析在Userland Persistence和BypassUAC两方面的具体应用,借助Process Monitor,介绍一种寻找BypassUAC的方法。 0x02 Userland registry hijacking原理 1、键值同步 修改HKCU:\Software\Classes\下的键值中默认名称的数据,可以同时修改HKCR:\下对应键值默认名称的数据(前提是HKCR:\已存在此注册表项) 例如: 编辑HKEY_CURRENT_USER\Software\Classes\mscfile\shell\open\command的默认值为c:\test\admin.exe 如图 注: 默认HKEY_CURRENT_USER\Software\Classes\下不存在mscfile\shell\open\command,需要自己创建 定位到HKEY_CLASSES_ROOT\mscfile\shell\open\command下,发现默认值被自动修改为c:\test\admin.exe 如图 注: 在HKCU:\Software\Classes\CLSID下新建一个HKCR:\CLSID不存在的键值,并不会更新HKCR:\CLSID的数据 如图 新建HKEY_CURRENT_USER\Software\Classes\mscfile\shell\open\command\1,默认名称的数据设为1,然而HKEY_CLASSES_ROOT\mscfile\shell\open\command并不会新建子项1 2、权限 修改HKCU下的键值只需要普通用户权限 修改HKCR下的键值需要管理员权限 综上,只需要以普通用户的权限编辑HKCU:\Software\Classes\下的键值就可以同步修改对应管理员权限HKCR下的键值。 根据以上介绍的原理,可具体应用在Userland Persistence和BypassUAC两方面: 0x03 Userland Persistence With Scheduled Tasks 如果劫持系统某个计划任务对应的注册表键值,修改其中要启动的dll绝对路径,那么仅需普通用户权限就能实现一个后门,具体操作如下:...
-
Study Notes of WMI Persistence using wmic.exe
0x00 前言 最近学习了Matt Graeber@mattifestation分享的方法《WMI Persistence using wmic.exe》,让我对WMI的攻击技巧有了新的认识,本文将结合之前的研究心得,分享利用wmic的一些技巧。 参考资料: http://www.exploit-monday.com/2016/08/wmi-persistence-using-wmic.html 0x01 简介 在之前的文章《WMI Attacks》、《WMI Backdoor》、《WMI Defense》中分享了通过Poweshell和mof调用WMI实现的攻击技巧, 同样,使用wmic.exe也能达到相同的效果,而且更加直接,只要在cmd下直接运行命令就好。 0x02 搜集信息 获取操作系统相关信息 poweshell代码如下: Get-WmiObject -Namespace ROOT\CIMV2 -Class Win32_OperatingSystem 换成wmic.exe的命令为: wmic /NAMESPACE:"\\root\CIMV2" PATH Win32_OperatingSystem 回显如图 注: 回显内容的格式没有对齐,需要添加参数指定输出格式 按照powershell回显的分行显示,需要添加如下参数: wmic /NAMESPACE:"\\root\CIMV2" PATH Win32_OperatingSystem GET /all /FORMAT:list 如图 依此格式,其他通过powershell调用wmi查询的方法均可用wmic实现,例如: powershell代码: Get-WmiObject -Namespace ROOT\CIMV2 -Class Win32_ComputerSystem 对应...