Good in study, attitude and health

  • Office Persistence on x64 operating system

    0x00 前言 在之前的文章《Use Office to maintain persistence》介绍了在Office 软件中植入后门的常用方法,但并不全面,缺少64位系统的测试。而对于64位操作系统,支持32位和64位两个版本的office软件,不同office版本的利用方法是否不同呢?本文将要给出答案。 0x01 简介 本文将要介绍如下内容: 64位系统安装64位Office软件的利用方法 64位系统安装32位Office软件的利用方法 根据测试结果优化POC 0x02 64位系统安装64位Office软件的利用方法 测试系统: Win8 x64 开发工具:vs2012 注: 32位系统下安装vs2012支持生成64位的dll 默认主要文件安装目录:C:\Program Files\Microsoft Office 1、Word WLL 32位dll,无法加载 64位dll,成功加载 2、Excel XLL 32位dll,无法加载 64位dll,成功加载 注: 添加导出函数xlAutoOpen的方法: 1、使用传统的模块定义文件 (.def) 新建dll工程,不选择导出符号 如下图 添加同名文件.def,内容如下: EXPORTS xlAutoOpen 如下图 编译成dll,使用IDA查看导出函数 显示正常 如下图 2、使用vs2012提供的便捷方法 新建dll工程,选择导出符号 如下图 设置导出函数为xlAutoOpen...

  • Use Excel.Application object's RegisterXLL() method to load dll

    0x00 前言 Ryan Hanson‏@ryHanson最近分享了一个技巧,利用Excel.Application object's RegisterXLL()能够加载dll。我对其分享的POC作了测试,接着做了扩展,添加功能实现远程下载执行,并且分析该方法相关的利用技巧,详细介绍脚本开发中的细节。 0x01 简介 本文将要介绍如下内容: POC测试 添加功能实现远程下载执行 扩展用法1:通过powershell实现 扩展用法2:结合rundll32使用 0x02 POC测试 POC地址如下: https://gist.github.com/ryhanson/227229866af52e2d963cf941af135a52 前提是系统已安装Microsoft Office软件,共提供三种利用方式 1.rundll32 rundll32.exe javascript:"\..\mshtml,RunHTMLApplication ";x=new%20ActiveXObject('Excel.Application');x.RegisterXLL('C:\\test\\messagebox.dll');this.close(); 2.js var excel = new ActiveXObject("Excel.Application"); excel.RegisterXLL("C:\\test\\messagebox.dll"); 3.powershell $excel = [activator]::CreateInstance([type]::GetTypeFromProgID("Excel.Application")) $excel.RegisterXLL("C:\test\messagebox.dll") 注: 测试的messagebox.dll来自于:https://github.com/3gstudent/test/blob/master/msg.dll 大小3kb,源代码及编译方法可参照文章《Use Office to maintain persistence》 0x03 添加功能 Jscript基础知识: 1、输出内容 js代码如下: WScript.Echo("1"); 直接执行js脚本会弹框 cmd执行:cscript.exe...

  • Use Office to maintain persistence

    0x00 前言 对于Windows平台,Microsoft Office的普及率很高。站在攻击者的角度,通常会选择在Office软件中植入后门。 我在一篇博客上看到了Office后门的多种利用方法,我对其进行了研究测试,挑选其中较为通用、隐蔽的方式,编写POC脚本实现自动利用。 博客地址: https://labs.mwrinfosecurity.com/blog/add-in-opportunities-for-office-persistence/ 作者: William Knowles@william_knows POC: https://github.com/3gstudent/Office-Persistence 0x01 简介 本文将要介绍以下内容: 针对Word、Excel、PowerPoint的四种后门利用方法 编写Powershell脚本实现自动利用 比较优缺点,分析防御方法 0x02 Word WLL 1、手动测试 开发工具:VC6.0 新建dll工程,代码如下: BOOL APIENTRY DllMain( HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { switch (ul_reason_for_call) { case DLL_PROCESS_ATTACH: MessageBox(NULL,"hello world,I'm 3kb","title",MB_OK); case DLL_THREAD_ATTACH: case DLL_THREAD_DETACH: case DLL_PROCESS_DETACH: break;...

  • Use msxsl to bypass AppLocker

    0x00 前言 Casey Smith@subTee在twitter分享的一个技巧,使用包含微软签名的msxsl.exe能够执行JScript代码,从而实现对Applocker的绕过。 如图 twitter地址如下: https://twitter.com/subTee/status/877616321747271680 POC地址如下: https://gist.github.com/subTee/47f16d60efc9f7cfefd62fb7a712ec8d 0x01 简介 本文将要对这项技术进行介绍,分析可供进一步利用的方法,同时对其扩展,介绍使用msxsl.exe执行VBScript代码的方式 0x02 msxsl 1、msxsl.exe XSL(Extensible Stylesheet Language)转换器 命令行工具 带有微软数字签名 下载地址: https://www.microsoft.com/en-us/download/details.aspx?id=21714 执行如下图 参考Casey Smith的POC: customers.xml: <?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="script.xsl" ?> <customers> <customer> <name>John Smith</name> <address>123 Elm St.</address> <phone>(123) 456-7890</phone> </customer> <customer> <name>Mary Jones</name> <address>456 Oak Ave.</address> <phone>(156) 789-0123</phone>...

  • 本地密码查看工具LaZagne中的自定义脚本开发

    0x00 前言 LaZagne是一款用于检索大量存储在本地计算机密码的开源应用程序。 因为每个软件储存密码的方式不尽相同(明文、API、定制算法、数据库等),所以该工具使用多种方法获取软件密码,目前支持的软件如下图 该工具通过python开发,易读、易维护,所以本文就尝试对其扩展,编写python脚本实现对360极速浏览器的密码导出,并且介绍脚本开发过程的细节。 0x01 简介 本文将要介绍以下内容: 解决LaZagne中的bug 开发脚本导出360极速浏览器密码 使用py2exe将python脚本转成exe 使用PyInstaller将python脚本转成exe 0x02 LaZagne中的bug LaZagne下载地址: https://github.com/AlessandroZ/LaZagne python版本:2.7 下载后执行\LaZagne-master\LaZagne-master\Windows\laZagne.py 报错,缺少第三方扩展包pyasn1和psutil 安装第三方扩展包: ` C:\Python27\Scripts\easy_install.exe pyasn1` ` C:\Python27\Scripts\easy_install.exe psutil ` 再次执行\LaZagne-master\LaZagne-master\Windows\laZagne.py 仍然报错,提示如下: ImportError: No module named memorpy 经过搜索,并没有第三方扩展包memorpy,猜测是输入错误,正确的应该为memory_profiler 安装扩展包memory_profiler: C:\Python27\Scripts\easy_install.exe memory_profiler 并且修改源文件: 路径为\LaZagne-master\LaZagne-master\Windows\lazagne\softwares\memory\memorydump.py Line14:from memorpy import * 修改为 from memory_profiler import * 成功执行laZagne.py,如下图...

  • 渗透技巧——Windows平台运行Masscan和Nmap

    0x00 前言 在内网渗透中,信息搜集尤为重要。 面对内网的复杂环境,虽说网络扫描容易暴露自己,但通过扫描可以发现内网的存活主机、开放端口,运行服务、操作系统等信息,为进一步渗透奠定基础。 扫描工具的选取,不仅要考虑功能,更要考虑工具的适用性。 现实中的跳板通常并不是一台Linux服务器,没有合适的环境安装Nmap、Zmap和Masscan。 换句话说,可在Windows下直接使用的命令行扫描工具有哪些呢? 知名的开源扫描工具Nmap、Zmap和Masscan,三款工具在功能上各有特色。 在适用性上,Zmap在Windows下使用需要安装Cygwin,因此不在考虑范围内。 Masscan支持Windows平台的编译,Nmap提供命令行版本,看起来Masscan和Nmap符合要求。 但是,Masscan和Nmap的使用均需要WinPcap的支持,也就是说,使用前均需要安装WinPcap。 那么,能否通过命令行安装WinPcap呢? 0x01 简介 本文将要要解决以上问题,介绍内容如下: Windows平台编译Masscan Windows命令行安装WinPcap Masscan使用介绍 Nmap配置和使用介绍 0x02 Windows平台编译Masscan Masscan下载地址: https://github.com/robertdavidgraham/masscan/ 编译工具:vs2012 编译选项中未添加vs2012的编译配置,所以直接编译会报错 解决方法: 在string_s.h中添加vs2012配置信息 位于misc-string_s.h,添加代码如下: #if defined(_MSC_VER) && (_MSC_VER == 1700) /*Visual Studio 2012*/ # include <stdio.h> # include <string.h> # define strcasecmp _stricmp # define memcasecmp...

  • 利用JS加载.Net程序

    0x00 前言 最近James Forshaw开源了一个工具DotNetToJScript,能够利用JS/Vbs脚本加载.Net程序,很有趣。 Casey Smith和Cn33liz都对此做了进一步研究,开源了他们的利用代码。 本文将要对该技术作系统整理,帮助大家更好的认识。 0x01 简介 本文将要介绍以下内容: DotNetToJScript编译方法 DotNetToJScript使用方法 利用JS/Vbs执行shellcode 利用JS/Vbs执行powershell脚本 0x02 DotNetToJScript编译方法 DotNetToJScript下载地址: https://github.com/tyranid/DotNetToJScript 使用工具VS2012进行编译 报错1: 缺少程序集引用NDesk.Options 解决方法: 需要添加引用NDesk.Options 下载地址: http://www.ndesk.org/Options 解压缩,工程-添加引用-浏览-\ndesk-options-0.2.1.bin\ndesk-options-0.2.1.bin\lib\ndesk-options\NDesk.Options.dll 接下来,将目标框架指定为.NET Frameword 2.0,重新编译 报错2: 缺少程序集引用Linq 解决方法: 添加对System.Core.dll 3.5的引用 位置: C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.5\System.Core.dll 添加引用后编译成功,分别在两个目录生成DotNetToJScript.exe和ExampleAssembly.dll 0x03 DotNetToJScript使用方法 1、生成js脚本 参数如下: DotNetToJScript.exe -o 1.js ExampleAssembly.dll 执行后,生成1.js 执行1.js,调用ExampleAssembly.dll中的public TestClass()...

  • 利用API NtQueryInformationThread和I_QueryTagInformation实现对Windwos日志监控的绕过

    0x00 前言 在上篇文章《渗透技巧——Windows日志的删除与绕过》中提到一个绕过Windows日志监控的思路:使用API NtQueryInformationThread和I_QueryTagInformation获取线程对应的服务,关闭对应日志记录功能的线程,能够破坏日志功能,并且Windows Event Log服务没有被破坏,状态仍为正在运行。本文将要对其详细介绍,分享使用c++在编写程序上需要注意的细节。 0x01 简介 本文将要介绍以下内容: 程序自身提权 遍历进程中的所有线程 根据线程tid,获取对应的进程pid 根据线程tid,获取对应的服务名称 结束线程 0x02 程序实现 开发工具: VS2012 开发语言: c++ 1、定位eventlog服务对应进程svchost.exe的pid powershell代码如下: Get-WmiObject -Class win32_service -Filter "name = 'eventlog'" | select -exp ProcessId 通过回显能够找出进程svchost.exe的pid 2、程序自身提权,以管理员权限执行 因为进程svchost.exe为系统权限,所以对其线程进行操作也需要高权限,因此,程序需要先提升至管理员权限 提权至管理员权限的代码如下: BOOL SetPrivilege() { HANDLE hToken; TOKEN_PRIVILEGES NewState; LUID luidPrivilegeLUID; if(!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &hToken)||!LookupPrivilegeValue(NULL, SE_DEBUG_NAME,...

  • 渗透技巧——Windows日志的删除与绕过

    0x00 前言 在渗透测试过程中,Windows日志往往会记录系统上的敏感操作,如添加用户,远程登录执行等。 对于一次完整的渗透测试,通常会选择对Windows日志进行清除和绕过,而对于防御者来说,了解常用的绕过方法也有助于更好的保护自己的系统。 所以本文将要介绍常见的Windows日志清除与绕过方法,分享经验,帮助大家。 0x01 简介 本文将要介绍以下内容: Windows日志的常用清除方法 Windows日志的两种绕过方法 0x02 Windows日志 Windows日志包括五个类别: 应用程序 安全 Setup 系统 转发事件 查看方式: 1、 通过面板 位置如下: Control Panel\System and Security-View event logs-Windows Logs 如下图 2、 通过Powershell 常用命令如下: (管理员权限) 查看所有日志: Get-WinEvent 查看应用程序类别下的日志: Get-WinEvent -FilterHashtable @{logname="Application";} 0x03 Windows日志的常用清除方法 1、wevtutil.exe 操作系统默认包含,支持系统:Win7及以上 常用命令如下: (1) 统计日志列表,查询所有日志信息,包含时间,数目 wevtutil.exe gli Application...

  • Use AppDomainManager to maintain persistence

    0x00 前言 从Casey Smith@subTee学到的一个技巧:针对.Net程序,通过修改AppDomainManager能够劫持.Net程序的启动过程。 如果劫持了系统常见.Net程序如powershell.exe的启动过程,向其添加payload,就能实现一种被动的后门触发机制。 学习链接: http://subt0x10.blogspot.com/2017/06/attacking-clr-appdomainmanager-injection.html 0x01 简介 本文将要介绍以下内容: 劫持自己开发的.Net程序 劫持系统.Net程序powershell_ise.exe 一种针对Visual Studio的利用思路 0x02 相关概念 CLR: 全称Common Language Runtime(公共语言运行库),是一个可由多种编程语言使用的运行环境。 CLR是.NET Framework的主要执行引擎,作用之一是监视程序的运行: 在CLR监视之下运行的程序属于“托管的”(managed)代码 不在CLR之下、直接在裸机上运行的应用或者组件属于“非托管的”(unmanaged)的代码 对于在CLR监视之下的程序,程序启动的初始化过程可参考如下链接: http://mattwarren.org/2017/02/07/The-68-things-the-CLR-does-before-executing-a-single-line-of-your-code/ 值得注意的地方: 如果能从程序启动的初始化过程中找到一个可供利用的位置,在程序启动之前加载我们自己的代码,那么就可以“滥用”CLR的功能,实现对程序的劫持 更理想的情况下: 如果可被劫持的程序是一个系统常用程序,随开机自启动,那么,这个方法就能作为一个持续性后门 下面介绍Casey Smith@subTee分享的后门思路:AppDomainManager 0x03 劫持自己开发的.Net程序 注: 代码引用自:http://subt0x10.blogspot.com/2017/06/attacking-clr-appdomainmanager-injection.html 1、编写示例程序 使用Visual Studio,选择c#开发环境,新建控制台应用程序,工程名:program,代码如下: using System; public class Program { public static void Main() {...