免杀非一蹴而就

此内容基于对cs生成的Powershell Payload进行免杀。cs版本为4.5

注:以下内容除http请求分离以外在本主机均被秒杀

准备

首先对cs生成一个监听器,这里不再赘述,然后选择payload模块生成一个32位powershell格式的,因为32位的代码和64位整体大差不差,相较于更容易看得懂

base64加密混淆

1.最先base64

将32位的DoIt变量内容进行base64加密,然后修改代码内容,将得到的变量先解密再传到ifelse处执行

实测这样传到win10上去是秒杀的

2.添加变量混淆

(1).加密后添加

就是在加密内容中添加任意字符,先对字符替换为空再解码

(2).加密前添加

在源码中添加任意字符,加密后,先解码,然后再替换字符为空后执行

事实上,这种方法也是秒杀

http请求分离

我们将上面的代码部分保留,部分放到http服务器上,让靶机去远程下载我们的payload实现上线

这种方法实测,上传至win10不会被马上杀掉,而是执行期间被杀,也算是有了一点进步。

当然我们可以通过使用网上的混淆脚本再对其进一步打乱特征。问题是我们还是需要通过http请求的方式获取最重要的payload,所以最看重的一步还是在这里。也就是写一套只有自己使用的代码,我能做的就是对网上的脚本二开,打乱他的特征。

所以我下面介绍的项目并没有直接嵌套在这上面

二进制混淆

我们将上线代码转换成二进制,再修改其变量名和函数名混淆

将代码转换为二进制

将原先的代码段(也就是上面划红线的位置)替换为二进制的数组

接着替换变量名,函数名

仅仅是这样当然是过不了的。我们和网上的混淆脚本合体

混淆脚本项目合体免杀

此项目名为powershell-obfuscation,源自https://github.com/test1213145/powershell-obfuscation

现在如果直接将cs4.5生成的代码用该项目已经过不了杀毒软件了,我们将上面的二进制和他合体。更多命令请见上述链接。

使用“powershell-obfuscation -f 文件名.ps1"生成的文件内容如下,我用的刚才的二进制文件

也是和刚刚一样替换文件名,变量名,最后成了这样。test-function是我添加的垃圾数据,可以不管。原先的两句话执行代码被我修改成几段,已注释。

这样的方式传入win10,只有在运行的时候会被检测到并且杀掉。如果先关闭掉df,上线完成后再打开,df不会有任何反应。就算是成功了一把。。。

木马测试

将文件上传至微步在线,哈勃,virustotal平台,看下面吧

还得练。。。