尝试利用简单的混淆/编码/反射来躲避一些常规的静态检测
0x01简单混淆
此处暂以混淆Invoke-Mimikatz.ps1脚本为例进行演示,下面几句话的大致意思,替换方法名,剔除注释,剔除多余空格,替换参数名,最后把脚本重命名,如果有些杀软真的是靠这些静态特征来检测的话,这种方式很容易就绕过了,包括其它的脚本亦是如此,注意多灵活变通
下面是处理后的Invoke-Mimikatz.ps1脚本,一眼看上去还是非常干净得,一些敏感的静态特征也被改的差不多了,当然,不一定非要手工,还有很多自动化的powershell混淆工具可以用,比如,Invoke-Obfuscation...暂不细说
接着把混淆好的Invoke-Mimikatz.ps1脚本挂到自己的cs上,实际上你可以直接把后缀改成一些压缩格式的后缀,比如,zip,rar,7z,因为这些压缩格式默认情况下大部分杀软都不会主动检测,在远程加载的过程中能帮我们避开一些简单的侦测
此时,我们再用改过后的Invoke-Mimikatz.ps1脚本尝试在目标机器上远程加载抓明文,如下,工作正常
同样,如果目标机器在内网且"断网",也可以直接把脚本先传上去再尝试在目标机器本地加载执行抓明文,如下,在很久很久以前,像这种简单的静态混淆还是能绕过一些杀软的,但现在对于大多杀软早已不行了,还是瞬间能被秒出来,暂时还不太清楚杀软检测的点到底在哪里
0x02尝试编码后执行
先在自己本地机器上把要执行的ps代码base64一下,然后把编码后的内容存到指定文件中,如下
然后,再到目标机器上带上-encodedcommand选项执行上面那段base64,其实,这么干还是很容易会被杀,杀软可能会先识别是不是base64如果是,先解码,然后一解码就看到里面的真实url了,直接就给拦掉了,也许多重不同编码效果会好一点
# powershell -exec bypass -encodedcommand base64encode
0x03反射加载[内存执行]
如下,直接在目标机器上尝试远程反射加载最新版mimikatz,前提目标机器能正常出网,这种方式,对于国内的某些杀软来讲,暂时还是有效的,但对于nod32,趋势,卡巴...这种依然会瞬间被秒,因为本身进程注入的动作就很敏感
除了Invoke-ReflectivePEInjection.ps1脚本,另外还有一款稍微有些类似的工具,SafetyKatz.exe,它是先通过系统apidump出lsass.exe进程数据,然后再利用pe加载mimikatz到内存中进行读取,一键式获取系统明文密码,nod32暂时没杀,随着用的多了,应该就很快了
# SafetyKatz.exe
0x04关于其它的一些hash抓取脚本
Get-PassHashes.ps1[模仿meterpreter的hashdump功能],实际的免杀效果还不错,如下,直接在目标机器上尝试远程加载抓hash,容易被拦powershell.exe进程[依然仅限于国内的某些杀软来讲]
先把脚本传到目标机器本地,然后尝试直接在目标机器本地加载抓hash,相对安全,还是那句话,脚本自身可能会被杀
Invoke-PowerDump.ps1脚本,从注册表读取结果,相对其它的抓取方式,免杀效果暂时还行[依然仅限于国内的某些杀软来讲]
小结:
再次强调,在做这些操作之前必须已事先拿到目标机器管理权限才行
作者:klion