<menu id="guoca"></menu>
<nav id="guoca"></nav><xmp id="guoca">
  • <xmp id="guoca">
  • <nav id="guoca"><code id="guoca"></code></nav>
  • <nav id="guoca"><code id="guoca"></code></nav>

    樣本中的CryptAPI

    VSole2021-09-28 21:50:59

    0x00 CryptAPI的概述

    一個CSP是實現加密操作的獨立模塊,要實現加密,至少需要一個CSP。每個CSP對CryptAPI的實現是不同的,使用的算法不同,有些包含了對硬件的支持

    • CryptAcquireContext 獲得指定CSP的密鑰容器的句柄
    • CryptReleaseContext釋放得到的句柄

    在此前提下相關的函數如下

    • CryptDeriveKey 從一個密碼中派生一個密鑰
    • CryptDestoryKey 銷毀密鑰
    • CryptDuplicateKey 制作一個密鑰和密鑰狀態的精確復制
    • CryptGenKey 創建一個隨機密鑰
    • CryptImportKey 把一個密鑰BLOB傳送到CSP中

    用來加解密數據,需要指定一個密鑰,這個密鑰可以是由CryptGenKey、CryptDuplicateKey、CryptImportKey產生。

    • CryptEncrypt 使用指定加密密鑰來加密一段信息
    • CryptDecrypt 使用指定加密密鑰來解密一段密文

    完整的解密過程如下

    #include #include #pragma comment (lib, "advapi32")int main(){    HCRYPTPROV hCryptProv;    HCRYPTHASH hCryptHash;    HCRYPTKEY hCryptKey;
        CryptAcquireContext(&hCryptProv,            // CSP句柄的指針                        NULL,                   // 密鑰容器名稱                        MS_DEF_PROV,            // CSP名稱(如果為NULL,就使用默認的CSP)                        PROV_RSA_FULL,          // CSP類型                        CRYPT_VERIFYCONTEXT);   // 此選項指出應用程序不需要使用公鑰/私鑰對
        CryptCreateHash(hCryptProv,     // CSP句柄                    CALG_MD5,       // Hash算法的標識符                    0,              // 如果哈希算法是密鑰哈希,如HMAC或MAC算法,就用此密鑰句柄傳遞密鑰                    0,              // 保留,必須為0                    &hCryptHash);   // 哈希對象的句柄指針
        static char szPassword[] = "FSD@#fds23"; // 加密密碼    DWORD dwLen = strlen(szPassword);
        // 計算密碼的Hash值    CryptHashData(hCryptHash,                    (BYTE*)szPassword,                     dwLen,                    0);
        // 根據密碼的Hash值派生一個密鑰    CryptDeriveKey(hCryptProv,      // CSP句柄                    CALG_RC4,       // 要產生密鑰的對稱加密算法                    hCryptHash,     // 哈希對象的句柄                    0,              // 密鑰類型                    &hCryptKey);    // 輸出密鑰句柄指針
        // 待加密數據    static char szData[] = "important data";
        DWORD dwLenIn = strlen(szData);    DWORD dwLenOut = dwLenIn;
        CryptEncrypt(hCryptKey,         // 密鑰句柄                0,                  // 如果在加密的同時需要計算Hash值,傳入一個Hash對象句柄                TRUE,               // 標識是否是最后一次加密操作                0,                  // 保留,必須為0                (BYTE*)szData,      // 要被加密的數據                &dwLenOut,          // [in/out] 傳入需要加密的數據長度,傳出已經加密的數據長度                dwLenIn);           // 指出szData的Buffer長度
        CryptDecrypt(hCryptKey,         // 秘鑰句柄                0,                  // 如果在加密的同時需要計算Hash值,傳入一個Hash對象句柄                TRUE,               // 標識是否是最后一個解密操作                0,                  // 保留,必須為0                (BYTE*)szData,      // [in/out] 需要解密數據的地址                &dwLenOut);         // [in/out] 傳入需要解密的數據長度,傳出已經解密的數據長度
        // 清理工作    CryptDestroyKey(hCryptKey);    CryptDestroyHash(hCryptHash);    CryptReleaseContext(hCryptProv, NULL);
    

    0x01 樣本中的使用情況

    該樣本是某組織使用的最新的shellcode,該shellcode先獲取計算機名,然后通過計算機名來獲得IP地址,最后通過IP來計算hash和秘鑰并對下一階段的shellcode進行解密

    具體過程如下

    shellcode通過getComputerNamew和GetAddrInfow來獲取IP信息,通過遍歷addrinfoW鏈表來獲取IP(打碼部分為16進制IP地址),經過一次and操作后存入內存,待后續計算hash使用

    計算并提取hash的過程如下

    1. 創建hash對象CryptCreateHash 
    2. 通過上面的16進制IP計算hash CryptHashData
    3. 查詢hash長度CryptGetHashParam(HPHASHSIZE)
    4. 查詢hash值CryptGetHashParam(HPHASHVAL)

    其他獲取CSP和destroy hash以及釋放CSP的常規操作就不多說了

    然后用IP的hash值進行拼接,復制到內存中(棧中)組合成key blob.通過CryptImportKey將其導入CSP中,設置以初始向量模式進行解密,將舊shellcode中待解密的部分復制到新內存中,用CryptDecrypt解密

    最后還會對解密后的下一階段shellcode再算一次hash

    把這個算出的hash和舊shellcode中存的hash做比較,相同就創建線程去執行下一階段shellcode

    0x02 參考

    https://nixwang.com/2013/04/18/windows-cryptoapi/

    初始向量模式 https://blog.csdn.net/Vieri32/article/details/48345023)https://blog.csdn.net/weixin45303938/article/details/109012292

    csphash函數
    本作品采用《CC 協議》,轉載必須注明作者和本文鏈接
    樣本中的CryptAPI
    2021-09-28 21:50:59
    通過一個樣本來分析一波CryptAPI的使用流程
    看程序圖標是個mfc的程序,先打開看看,隨便輸入一點東西,看到彈窗彈出:直接拖進ida搜索Wrong!!!字符串,借此通過查看引用跳轉到主函數
    半個月前發布了xscan掃描器,這期間又針對很多場景進行了優化,本文來做一個總結。基于dom相似度的爬蟲獲取數據集的一個重要方式就是爬蟲,開源爬蟲中比較好的有projectdiscovery的katana和 crawlergo。此時在之前payload基礎上加一個引號,就能破壞原有結構,此時asdsda經過語義分析后,屬性為 Attribute的name,語義發生了改變,則說明可以XSS了。對url每層路徑也進行一下檢測,也能發現很多XSS。真實世界有趣的XSS國外也有個xss掃描器叫knoxss,它的測試用例不錯,覆蓋了很多場景。
    在BlackHat21中,Specterops發布了Active Directory Certificate Services利用白皮書。盡管ADCS并不是默認安裝,但在大型企業域中通常被廣泛部署。 本文分為上下兩篇,結合實戰,講述如何在域環境中利用ADCS手法拿下域控,哪些對象ACL可用于更好的權限維持,并涉及ADCS的基礎架構、攻擊面、后利用等。
    每個黑客都會遇到這個,第一個賞金。我實際上無法解釋它的感覺,但我知道你們中的大多數人都能理解它的感覺。當我們開始在 Web 應用程序安全中進行漏洞賞金時,我們大多數人都會從 XSS開始,故事從這里開始。
    基于chrome的谷歌瀏覽器的一個漏洞將允許攻擊者繞過網站上的內容安全策略(CSP),以竊取數據和執行惡意代碼。 據PerimeterX網絡安全研究人員Gal Weizman稱,該漏洞(CVE-2020-6519)存在于Chrome, Opera和Edge,以及Win...
    cspparse是一款針對內容安全策略的升級工具,在該工具的幫助下,廣大研究人員可以針對自己所實施的內容安全策略CSP進行安全審計和評估。該工具使用了Google的API來獲取CSP Header,并將獲取到的信息以ReconJSON格式返回給研究人員。除此之外,該工具還能夠解析目標站點的HTML,并檢索HTML代碼中標簽包含的內容安全策略CSP規則。
    公有云安全基于責任共擔模型,將云服務提供商的角色(保護平臺)與客戶的角色(保護其在云中的資產)一刀切開,涇渭分明。這聽起來不錯,但在實踐中,當CISO與某一個云供應商打交道時,責任共擔模型可能會很棘手,而且在多云世界中難度還會成倍增加。
    多個漏洞會影響Cisco的Video SurveMonitoring 8000系列IP攝像機,并可能允許與易受攻擊的攝像機位于同一廣播域的未經驗證的攻擊者使其脫機。第二個高嚴重性建議涉及一個特權升級漏洞,該漏洞影響了Cisco Smart Software Manager On-Prem或SSM On-Prem。在內部測試期間,Cisco發現經過身份驗證的遠程攻擊者可以提升其特權,并以更高的特權執行命令,直至具有管理角色,從而使攻擊者可以完全訪問設備。在修補關鍵和高嚴重性漏洞的同時,該公司還發布了修復程序,以解決另外21個中等嚴重性漏洞。
    2020 Codegate Web題解
    2022-07-07 08:09:51
    Codegate 還是有很多國際強隊參加的,這里記錄 Codegate 的兩道 Web題。
    VSole
    網絡安全專家
      亚洲 欧美 自拍 唯美 另类