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
[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
0x08048065 in shellcode ()
y en esa direccion se encuentra
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
mov byte[esi + 0x9], al
Alguien sabe que podria estar fallando?
No tengo Linux y no puedo depurar, pero para empezar, retorna las funciones:
[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.
si sirve de algo, escribi el codigo del ejemplo, es para AT&T, tambien lo compile pero me muestra el mismo error
.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