elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
25 Mayo 2012, 06:05  


Tema destacado: Suscripción al boletín mensual de elhacker.net

+  Foro de elhacker.net
|-+  Seguridad Informática
| |-+  Bugs y Exploits (Moderador: berz3k)
| | |-+  Auyuda con shellcode "universal"
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Auyuda con shellcode "universal"  (Leído 2,187 veces)
3QU1N0X

Desconectado Desconectado

Mensajes: 16


got_r00t?


Ver Perfil
Auyuda con shellcode "universal"
« en: 3 Septiembre 2006, 05:13 »

Hola, llevo tiempo en el mundillo del hacking pero no me he enfocado lo suficiente en las scode... he aprendido como hacer una scode no universal y para mi es una jodedera inmensa cambiar para cada versión de SO por una librería, así que estos días he estado buscando info de shellcodes universales... me he currado algunos textos de PE y su estructura y las librerias y concluyendo que: todo programa llama a kernel32.dll (obligatoriamente) y consiguiendo el offset de está librería y de sus funciones LibraryLoadA y GetProcAdress podría ejecutar alguna otra librería (como msvcrt.dll) para ejecutar System (tipo texto de Rojodos)... eso es lo que tengo entedido (si estoy cayendo en algo, por favor corregidme). Mi duda viene acá: después que ya he conseguido los offset de kernel32.dll (77E40000h), LoadLibraryA (77EB6FC4h) yGetProcAdress (77E5B332h) como haría para en ensamblador pasarle esos offsets para crear abrir una libería (siendo msvcrt.dll). No soy una bestia del ASM. Si estooy llendome por otro lado corregidme. Gracias de antemano.  :)
En línea

--- In a world without doors i crash a wall ---
sirdarckcat
Troll Buena Onda y
CoAdmin
***
Desconectado Desconectado

Mensajes: 6.947


Lavando Platos


Ver Perfil WWW
Re: Auyuda con shellcode "universal"
« Respuesta #1 en: 3 Septiembre 2006, 06:11 »

http://foro.elhacker.net/index.php/topic,130073.0.html

aunque los argumentos de las funciones tipo C, FILO es:

push Offset"msvcrt.dll"
call DireccionDeLoadLibraryA
push Offset"system"
push eax
call DireccionDeGetProccAdress

es decir si la funcion es:
system("algo");

tu haces:
push OffsetDe"algo"
call system

:P

si tiene mas argumentos, los metes en orden inverso y si es FIFO entonces en orden normal.

Saludos!!
En línea

3QU1N0X

Desconectado Desconectado

Mensajes: 16


got_r00t?


Ver Perfil
Re: Auyuda con shellcode "universal"
« Respuesta #2 en: 3 Septiembre 2006, 06:45 »

Gracias por tu text Sdc... ya lo había leido antes... increible. Con respecto a tu respuesta dejame ver si entendi:

se pushea el offset de la libreria msvcrt y para eso llamo a la dirección de LoadLibraryA (¿se podría entender que su dirección es su offset?), se pushea la dirección de la funcion "system" de la librería antes pusheada mscvrt.dll se pushea eax y finalmente se llama a la dirección (que supongo sepodría entender como el offset) de la función GetProccAdress.

y ese algo sería el cmd.exe y como dice el texto de Rojodos (increible manual) podría:



push ebp         ---------- Empezando la variable
mov ebp,esp   ---------- Empezando la variable
xor edi,edi       --------- Aki se ponen el null
push edi           ----------- Se pushea el null
sub esp,04h     ---------- Se sustraen 4 bytes para "CMD.EXE"/0
mov byte ptr [ebp-08h],63h   ---------  C
mov byte ptr [ebp-07h],6Dh   -.------- M
mov byte ptr [ebp-06h],64h   ---------D
mov byte ptr [ebp-05h],2Eh    ------- .
mov byte ptr [ebp-04h],65h   ------- E
mov byte ptr [ebp-03h],78h  -------X
mov byte ptr [ebp-02h],65h  ----- E
lea eax,[ebp-08h]    ------------------------- Se lee el CMD.EXE/0
push eax     ----------------------- Se pushea el CMD.EXE/0
push Offset"msvcrt.dll"
call DireccionDeLoadLibraryA
push Offset"system"
push eax
call DireccionDeGetProccAdress
mov ebx, Offset"system"
call ebx

¿Se podría hacer algo así? quedando:

push ebp         ---------- Empezando la variable
mov ebp,esp   ---------- Empezando la variable
xor edi,edi       --------- Aki se ponen el null
push edi           ----------- Se pushea el null
sub esp,04h     ---------- Se sustraen 4 bytes para "CMD.EXE"/0
mov byte ptr [ebp-08h],63h   ---------  C
mov byte ptr [ebp-07h],6Dh   -.------- M
mov byte ptr [ebp-06h],64h   ---------D
mov byte ptr [ebp-05h],2Eh    ------- .
mov byte ptr [ebp-04h],65h   ------- E
mov byte ptr [ebp-03h],78h  -------X
mov byte ptr [ebp-02h],65h  ----- E
lea eax,[ebp-08h]    ------------------------- Se lee el CMD.EXE/0
push eax     ----------------------- Se pushea el CMD.EXE/0
push 77BE0000h  ------------- Base de dirección de msvcrt.dll
call 77EB6FC4h     ------------- Offset LoadLibreryA
push 77BF8044h  ------------- Offset System
push eax
call 77E5B332h   ---------- Offset GetProcAdress
mov ebx, 77BF8044h
call ebx


¿No se ha pusheado la dirección de kernel32.dll pq ya está cargada, no?

¿Estaría así creando una shell para cualquier plataforma Win o acaso estoy utilizando indebidamente o más de lo necesario la librería msvcrt.dll?, que no todos los programas la cargan y se ubica diferente dependiendo del servicepack, lenguaje,etc

Aki en este código más de un error debe haber; dudo que la haya pegado todas de una sola XD. Si puedes corregidme mis erores te lo agrdecería mucho, en los años que llevo en el hacking siempre me especialize en la seguridad de redes y su estructura así que ahora estoy en esto.

Gracias de antemano.

P.D: Muy buen texto el tuyo, muy teórico pero excelente y amplio.
 

Salu2
En línea

--- In a world without doors i crash a wall ---
3QU1N0X

Desconectado Desconectado

Mensajes: 16


got_r00t?


Ver Perfil
Re: Auyuda con shellcode "universal"
« Respuesta #3 en: 3 Septiembre 2006, 06:53 »

Joer, ya va, algo de último momento tontísimo que me acabo de dar cuenta... si en el shellcode pusiera el offset de system y de mscvrt.dll (que cambia segun el ServicePack, lenguaje y de más) como diántres estaría haciendo una scode para cualuier Win si los offsets de mscvrt.dll y system, (en la máquina que se vaya a ejecutar es muuuuuuuuuuuy probable que difiera en muchas cosas a mi WinXP) tener el mismo offset ?. Me acabo de dar cuenta apenas postee y quería agregar esto. Gracias.

Ehhhhh, ya va, podría hacer un LoadLibraryA = (msvcrt.dll) y un GetProcAddress = (msvcrt.dll, system) , lo paso a ensamblador y así estaría llamando a la función system pero no directamente con los offsets sino con los offsets se LoadLibraryA y GetProcAdress que vienen de una librería (kernel32.dll) que cargan todos los programas con los mismos offsets obligatoriamente, y siendo los offsets de mi WinXP de la librería kernel32.dll iguales a cualquier otro win y ¡sería universal para Wins! ufff se me estan viniendo ideas. Ahora para pasar eso a ensamblador.... ummmm interesante, imagino algo como... lo que puse en el mensaje anterior, aunque no se me está muy claro sobre todo a estas altas horas de la noche/madrugada XD.

Les agradecería muchísimo que los que me pudieran responder lo hicieran.

Disculpen la lluvia de preguntas pero es sed de conocimineto amigos... (no me sentía con tantas ideas desde que estaba aprendiendo Hijacking DNS avanzado con paquetes spoofing en 3 direcciones con respuestas sin terminar XD).

Y como siempre, gracias de antemano :)

P.D.I: Cantidad de mis ideas y gran parte de código ASM que puse antes es de una shellcode simple de Rojodos, gracias por la ayuda indirectamente XD.

Salu2!!

« Última modificación: 3 Septiembre 2006, 07:16 por 3QU1N0X » En línea

--- In a world without doors i crash a wall ---
byebye


Desconectado Desconectado

Mensajes: 5.093



Ver Perfil
Re: Auyuda con shellcode "universal"
« Respuesta #4 en: 3 Septiembre 2006, 12:13 »

Citar
y siendo los offsets de mi WinXP de la librería kernel32.dll iguales a cualquier otro win y ¡sería universal para Wins!

estas confuso, serian los mismos offsets que en windows con tu service pack y version. en otro no funcionara al no tener las mismas direcciones. tienes que encontrar primero el manejador de kernel32, es decir su base. despues sacar la funciones GetProcAddress y despues de esto ya puedes sacar las funciones que necesites tan tranquilo. no tienes pq usar system, winexec que esta en kernel32 ejecuta. tampoco tienes pq usar cmd.exe, con usar cmd tb lo ejecuta, asi puedes pushear directamente el valor cmd,1 despues poner donde va el 1 un 0 y ya tienes tu cadena. es decir algo asi:

Código:
jmp datos
seguimos:
      pop eax
      xor byte [eax+3],1
datos:
     call seguimos
db    'cmd',1     
En línea
3QU1N0X

Desconectado Desconectado

Mensajes: 16


got_r00t?


Ver Perfil
Re: Auyuda con shellcode "universal"
« Respuesta #5 en: 3 Septiembre 2006, 19:49 »

Pero la imagen base del kernel32 tampoco es igual en todos los wins... por ejplo en la mia es: 77E40000h mientras que en otra PC con win Xp sp2 32-bits (mi versión es 64 bits) es: 77C80000h  :-\, entonces... ¿de que me guio?, ¿no hay algún manual de shell universales un poco más práctico?, debe haberlo, alguien que haya logrado hacer una y diga como lo logró y sus fundamentos, aunque sea en inglés. He leido que en una estructura PE casi todos los ejecutableds se cargan en: 0004000h y 3h después se encuentra el encabezado de compatibilidad con DOS y 80h más abajo de eso (0004083h) es que empezariamos a explorar, donde empiezan las tablas de importación y eso, pero joder en todos loas manuales dice eso y la estructuras de cada tabla y que hay que obtenerlas y llamarlas y recíprocamente, pero, no sale bien específicado com hacerlo o almenos una pista, solo al final, lo máximo que he visto es una scode universal pasada ya a hexadecimal!  :( que descarga un programa de un servidor web, que creo que nisiquiera lo ejecuta... ¿alguien conoce algún buen manual sobre shellcodes universales que sea un poco (entre más práctico, mejor) práctico?.

P.D: gracias "-" he entendido más o menos tu punto, y lo de los offsets me confundí con sus bases XD era eso de las 3 de la mañana cuando postee, disculpen.

Perdonen errores otográficos. :)

Saludos! y Gracias.
« Última modificación: 3 Septiembre 2006, 19:54 por 3QU1N0X » En línea

--- In a world without doors i crash a wall ---
sirdarckcat
Troll Buena Onda y
CoAdmin
***
Desconectado Desconectado

Mensajes: 6.947


Lavando Platos


Ver Perfil WWW
Re: Auyuda con shellcode "universal"
« Respuesta #6 en: 3 Septiembre 2006, 22:11 »

aqui lee como se obtiene la imagen base de kernel32:
http://foro.elhacker.net/index.php/topic,130073.0.html

hay 2 codigos que explico como se obtiene.

una ves que ya la tienes, rastreas las funciones que deseas..
tambien esta ese codigo..
una ves que lo hiciste, llamas a la funcion, de LoadLibraryA
despues a la de GetProccAddress

y en EAX se guardara la direccion de la funcion que quieres.

lee los documentos que anexe en ese topic tambien.

Saludos!!
En línea

3QU1N0X

Desconectado Desconectado

Mensajes: 16


got_r00t?


Ver Perfil
Re: Auyuda con shellcode "universal"
« Respuesta #7 en: 4 Septiembre 2006, 02:32 »

Joder!!!!! Claro!!!  :D no me había dado cuenta!! el PEB!! ummm... se me había ocurrido sacarla con los SEH pero ya se alargaría mucho... bastante clarito... ahora ya puedo empezar a crear mis exploits si preocuparme de poner los inputs de:

0  ----- para tal SO
1 ------ para cual SO
2  ----- otro SO

(al estilo DCOM vulnerability)

¡Muchas gracias!,  :)  he aprendido mucho estos último 2 días (sobre todo ASM).

Salu2!!
En línea

--- In a world without doors i crash a wall ---
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
AUYUDA CALCULADORA EN ASEMBLER
ASM
resident evil 04 0 1,023 Último mensaje 26 Noviembre 2010, 01:49
por resident evil 04
[Taller] Creando una Shellcode: "Direccion de kernel32 y calls especiales"
Bugs y Exploits
lShadowl 6 1,239 Último mensaje 2 Marzo 2011, 13:08
por 3mp3z@ndo
Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines