免杀非一蹴而就
此内容基于对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平台,看下面吧
还得练。。。
Comments NOTHING