[SOLUCIONADO] Violacion de segmento en una shellcode

Iniciado por proxy_lainux, Septiembre 02, 2013, 10:50:33 PM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Septiembre 02, 2013, 10:50:33 PM Ultima modificación: Agosto 27, 2014, 08:57:27 PM por Expermicid
hola

Estaba haciendo una practica de los videos de open security training, pero tengo un problema en una shellcode, tengo una violacion de segmento al momento de ejecutar bash

en el video muestra como reemplazar alguno caracteres para eliminar los null y que la shellcode se ejecute, por ejemplo

/bin/bashABBBBCCCC

al reemplazarlo quedaria

/bin/bash089340000

que seria la ejecucion de execve

int execve(const char *filename, char *const argv[], char *const envp[])

asi es como lo hice

Código: asm
[BITS 32]

section .text

global _start

_start:

jmp callstatment

shellcode:

pop esi
xor eax, eax
mov byte[esi + 0x9], al
mov dword[esi + 0xA], esi
mov dword[esi + 0xE], eax

mov byte al, 11
mov ebx, esi
lea ecx, [esi + 0x9]
lea edx, [esi + 0xE]
int 0x80


callstatment:

call shellcode
shellvariable: db "/bin/bashABBBBCCCC",0


pero me dice que hay una violacion de segmento, hice una depuracion con GDB y me sale este mensaje

Código: php
0x08048065 in shellcode ()


y en esa direccion se encuentra

Código: php
 Dump of assembler code for function shellcode:
   0x08048062 <+0>: pop    %esi
   0x08048063 <+1>: xor    %eax,%eax
=> 0x08048065 <+3>: mov    %al,0x9(%esi)
   0x08048068 <+6>: mov    %esi,0xa(%esi)
   0x0804806b <+9>: mov    %eax,0xe(%esi)
   0x0804806e <+12>: mov    $0xb,%al
   0x08048070 <+14>: mov    %esi,%ebx
   0x08048072 <+16>: lea    0x9(%esi),%ecx
   0x08048075 <+19>: lea    0xe(%esi),%edx
   0x08048078 <+22>: int    $0x80


Imagino que entonces el error se produce aqui

Código: php
mov byte[esi + 0x9], al


Alguien sabe que podria estar fallando?



No tengo Linux y no puedo depurar, pero para empezar, retorna las funciones:

Código: asm
    [BITS 32]
     
    section .text
     
    global _start
     
    _start:
     
    jmp callstatment
     
    shellcode:
     
    pop esi
    xor eax, eax
    mov byte[esi + 0x9], al
    mov dword[esi + 0xA], esi
    mov dword[esi + 0xE], eax
     
    mov byte al, 11
    mov ebx, esi
    lea ecx, [esi + 0x9]
    lea edx, [esi + 0xE]
    int 0x80
   
    ret ; RETORNO FUNCION.
     
    callstatment:
     
    call shellcode
    ret ; RETORNO.

    shellvariable: db "/bin/bashABBBBCCCC",0


Sino estarías creando un bucle infinito.

saludos.

Septiembre 02, 2013, 11:46:32 PM #2 Ultima modificación: Septiembre 03, 2013, 12:54:18 AM por grimoire
si sirve de algo, escribi el codigo del ejemplo, es para AT&T, tambien lo compile pero me muestra el mismo error

Código: asm
.text

.global _start

_start:

jmp MyCallStatement

ShellCode:

popl %esi
xorl %eax, %eax
movb %al, 0x9(%esi)
movl %esi, 0xa(%esi)
movl %eax, 0xe(%esi)

movb $11, %al
movl %esi, %ebx
leal 0xa(%esi), %ecx
leal 0xe(%esi), %edx
int $0x80

MyCallStatement:

call ShellCode
ShellVariables:
         .ascii "/bin/bashABBBBCCCC"

hola

Pues esta solucionado a medias, saque los opcodes, los ejecute como cualquier shellcode en C y me funciono, pero cuando ejecuto el archivo en ASM no funciona, talvez es por meter el string en text, o no tengo idea de porque produce ese fallo