免杀对抗—python&分离免杀&无文件落地&图片隐写&SOCK管道

前言

之前就基本把所有语言都讲了一遍了,C/C++,Java,python,golang,汇编。今天就开始讲免杀的技巧以及手法,分离免杀之前讲过一点,就是通过http或者参数获取shellcode,今天把其他的分离方式也讲了。

实验环境

火绒,360,WD,VT

分离免杀

内存免杀是将shellcode直接加载进内存,由于没有文件落地,因此可以绕过文件扫描策略的查杀。为了使内存免杀的效果更好,在申请内存时一般采用渐进式申请一块可读写内存,在运行时改为可执行,在执行的时候遵循分离免杀的思想。分离免杀包含对特征和行为的分离两个维度,把shellcode从放在程序转移到加载进内存,把整块的shellcode通过分块传输的方法上传然后再拼接,这些体现了基本的"分离“思想。

通俗来讲:分离免杀,内存免杀,无文件落地这三个都是一种东西来对,更专业一点应该叫加载器分离。

文本加载

今天的实验都是用python来进行,因为python获取资源写起来简单,像C/C++可能要几十行代码才能实现python两三行代码的功能。那什么是文本加载呢,其实很简单,就是我把shellcode放在一个文本中,加载器放在一个py文件,执行的时候py文件去读取文本获取shellcode,以此来逃过杀软。

通过下面的代码,实现shellcode从文本中获取,注意shelcode要事先base64编码,这样比较方便。

with open('s.txt','r') as f:
    s=f.read()

shellcode=base64.b64decode(s)
....... //加载器省略

把shellcode进行base64编码之后,存储在s.txt

我们将其编译成exe试试免杀性,python打包成exe前面讲过了,就不再多讲了,火绒成功查杀到。

360也是能查杀到。

WD查杀不到exe,但是查杀了我们的s.txt。

既然WD查杀了我们的s.txt,那么我就加入一下垃圾字符进去,然后在解码之前去除就行。在shellcode中混入wlw这个垃圾字符,解码前去除就行。

s=s.replace('wlw','')

此时我们的s.txt再放进去就不会被WD查杀了。

试一下,成功上线。

还有一个玩法就是,我把加载器也分离出去,也就是我们把shellcode存在s.txt,把加载器存在z.txt,先读取s.txt的内容且解码,然后再读取z.txt的内容再解码,再利用exec函数去执行它。

import base64

def sc():
    with open('s.txt', 'r') as f:
        s = f.read()              //编码后的shellcode
    sc = base64.b64decode(s)
    return sc

def zx(s):
    sc=s                         //传入加载器的是变量SC,要和加载器的保持一致
    with open('z.txt', 'r') as f:
        z = f.read()            //编码后的加载器
    zx = base64.b64decode(z)
    exec(zx)

s=sc()
zx(s)

360可以查杀到,然后火绒的话能躲过静态查杀但是运行就告警,WD能过。

VT报7个,按理来说效果还行呀。

参数获取

这个之前介绍过的了,就是把shellcode当做参数来获取,sc获取加密后的shellcode,zx获取加密后的加载器。

if __name__ == '__main__':
    s=sys.argv[1]
    sc=base64.b64decode(s)
    z=sys.argv[2]
    zx=base64.b64decode(z)
    exec(zx)

测试结果呢,火绒和WD都没有被查杀到,但是火绒运行就会告警,360能查杀到。我怀疑是打包器的问题,我用的是pyinstaller打包的,用py2exe或者nuitka可能效果好很多,但是我懒得测试了,哈哈哈。

http获取

这个之前也是讲过的了,我们把shellcode放在公网上面,然后在代码中去请求这个文件资源。这里说一下就是尽量把文件放到一些绿标网站上去,比如百度后者阿里云这些存储资源的地方,然后请求它就会返回文件资源,这样子一个Waf检测到资源是来自阿里云或者百度就会认为是正常文件。

把上线代码编码成base64。

把111.txt也就是刚刚的base64编码放到公网上,由于我没有阿里云的OSS资源,我就直接放在公网服务器了。

编译成exe试试效果咯,360和WD免杀成功,执行起来也没有掉线啥的,但是火绒还是一执行就会告警,我真TM怀疑是打包器问题。

VT报5个,效果还可以啊。

SOCK管道传输 

这个就是简历一个sock隧道或者说是管道,来进行shellcode的传输,python写的sock传输脚本网上一大堆,这个是服务端,可以看到监听本地的2222端口,执行传输过来的data数据。

这是客户端,连接132主机的2222端口,进行数据传输。

把服务端编译成exe放到靶机上运行,本地再运行客户端传输shellcode。

成功上线。

免杀效果如何呢,用pyinstaller打包的话火绒和360都能查杀到,要是用py2exe只有360能查杀到,火绒的静态查杀是可以过的,至于动态查杀没有试。py2exe要比pyinstaller好用感觉,但是就是老是莫名其妙出问题,烦死了。

py2exe打包的话,VT报8个,中规中矩吧。

图片隐写

这个又是啥玩意呢,就是我把shellcode藏在图片里面,然后再去读取这个图片获取shellcode,其实就和上面的文本加载差不多,只是把文本换成了图片了。

脚本也是网上找的,值得一提的是,这个文章并不是专门用于安全方面,而是一位python研究的博主写的,只是我们把它用于安全方面而已。其实有时候只要思路能打开,很多不是用于免杀的东西,也可以作用到免杀这个领域,这种效果往往是非常好的,就像一般人饿了就去吃饭,而你偏要去吃屎,这谁想得到。

我们试试隐写效果,把wlw这个密文加密到1.png中去,生成一个2.png。

解密效果。

这时我们可以把wlw这个密文换成shellcode,再改一下代码,让它执行解密出来的密文不就可以实现上线了。

我们可以再原来的基础上加上加载器,func就是我们解出的密文,然后再让加载器去加载fun。

运行成功上线。

打包试试效果如何,我发现了一个问题,只要是用pyinstaller打包的exe都会被火绒查杀到,我估计是提取指纹了我操。用py2exe打包的火绒、360、WD都能过,但是我的这个打包器估计出了问题,打包出来的exe运行不了,真的服了。

VT报七个,中规中矩吧。

总结

今天主要是这个分离免杀,其实思路是很不错的,至于脚本那些,可以自己改进,或者说换个其他的语言来实现。

最后,以上仅为个人的拙见,如何有不对的地方,欢迎各位师傅指正与补充,有兴趣的师傅可以一起交流学习。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值