-
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 对应...
-
隐写技巧——在PE文件的数字证书中隐藏Payload
0x00 前言 为了验证PE文件的来源和完整性,常常会为PE文件添加数字证书。Windows系统下默认会对一些重要文件添加微软的数字签名,如ntdll.dll。恶意文件分析系统在对PE文件的静态分析过程中,如果PE文件有数字签名,则对签名进行验证。若数字签名验证通过,则不再对其进行后续分析。这样做主要考虑的是降低误报,以及减少服务器资源消耗。如果能在保证数字签名有效的前提下,在PE文件中隐藏Payload,那么这种隐写方式将会非常隐蔽。 0x01 简介 来自Deep Instinct Research Team的Tom Nipravsky在BlackHat2016的议题《Certificate Bypass: Hiding and Executing Malware from a Digitally Signed Executable》介绍了这个方法,并且实现了一个Reflective PE Loader,用来加载隐藏在PE文件数字证书中的Payload,值得学习。 议题PDF下载地址: https://www.blackhat.com/docs/us-16/materials/us-16-Nipravsky-Certificate-Bypass-Hiding-And-Executing-Malware-From-A-Digitally-Signed-Executable-wp.pdf 本文将会更加详细的介绍如何实现在保证数字签名有效的前提下,向PE文件中隐藏Payload。 0x02 PE文件格式和数字签名格式 图1引用自Windows Authenticode Portable Executable Signature Format https://msdn.microsoft.com/en-us/windows/hardware/gg463180.aspx 签名过程: 计算PE文件hash 根据hash生成数字证书 数字签名添加在文件末尾,这部分称作Certificate Table 计算文件hash的步骤: Load the image header into memory. Initialize a hash algorithm...
-
隐写技巧——PNG文件中的LSB隐写
0x00 前言 上篇对PNG的文件格式进行了分析,介绍了如何在不影响PNG文件的正常浏览下将payload以辅助数据块tEXt的格式插入到PNG文件中。这次将要介绍一个在图像数据块IDAT下隐藏payload的技巧——LSB隐写 图片引用自http://datagenetics.com/blog/march12012/index.html 0x01 简介 IDAT数据块 储存图像像数数据 在数据流中可包含多个连续顺序的图像数据块 采用LZ77算法的派生算法进行压缩 可以用zlib解压缩 zlib解压缩的python实现代码如下: #! /usr/bin/env python import zlib import binascii IDAT = "789C5D91011280400802BF04FFFF5C75294B5537738A21A27D1E49CFD17DB3937A92E7E603880A6D485100901FB0410153350DE83112EA2D51C54CE2E585B15A2FC78E8872F51C6FC1881882F93D372DEF78E665B0C36C529622A0A45588138833A170A2071DDCD18219DB8C0D465D8B6989719645ED9C11C36AE3ABDAEFCFC0ACF023E77C17C7897667".decode('hex') result = binascii.hexlify(zlib.decompress(IDAT)) print result 引用自http://drops.wooyun.org/tips/4862 LSB隐写 LSB全称least significant bit,最低有效位 PNG文件中的图像像数一般是由RGB三原色(红绿蓝)组成,每一种颜色占用8位,取值范围为0x00~0xFF,即有256种颜色,一共包含了256的3次方的颜色,即16777216 种颜色 人类的眼睛可以区分约1000万种不同的颜色 这意味着人类的眼睛无法区分余下的颜色大约有6777216种 LSB隐写就是修改RGB颜色分量的最低二进制位(LSB),而人类的眼睛不会注意到这前后的变化 每个像数可以携带3比特的信息 0x02 Python实现 关于LSB隐写在github上值得学习的项目: https://github.com/RobinDavid/LSB-Steganography https://github.com/cyberinc/cloacked-pixel 下面对cloacked-pixel进行测试 测试图片: 源文件下载地址: http://www.easyicon.net/language.en/1119182-Enderman_Png_icon.html 1、 加密 运行:...
-
隐写技巧——利用PNG文件格式隐藏Payload
0x00 前言 隐写术(Steganography)由来已久,其中有很多好玩儿的细节,所以打算系统的研究一下,这次先从PNG的文件格式开始。 图片来自于http://null-byte.wonderhowto.com/how-to/guide-steganography-part-1-hide-secret-messages-images-0130797/ 0x01 简介 隐写术可以理解为信息隐藏,在渗透测试中最主要的应用是对Payload的隐藏。本文会对PNG的文件格式进行分析,编写c程序实现自动解析文件格式,并按照其文件格式添加自定义的payload,不仅不会影响图片的正常浏览,同时可将图片上传到网络,使用时将图片下载再以特定格式解密,最终执行payload。 注: 所有程序源码已上传github,地址为: https://github.com/3gstudent/PNG-Steganography 0x02 PNG文件格式 1、PNG文件署名域 前8字节 固定格式,16进制为: 89 50 4e 47 0d 0a 1a 0a 2、数据块 Chunk Type Code(数据块类型码): 4字节,数据块类型码 Chunk Data(数据块数据): 可变长度,存储数据 CRC(循环冗余检测): 4字节,存储用来检测是否有错误的循环冗余码 数据块类型: 1. 关键数据块(critical chunk) (1) 文件头数据块IHDR(header chunk) 包含PNG文件的基本信息 一个PNG数据流中只能有一个IHDR 必须在PNG文件最前面 (2) 调色板数据块PLTE(palette chunk) 包含有与索引彩色图像(indexed-color image)相关的彩色变换数据 必须在IDAT之前 (3)...