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

 

 


Tema destacado: Los 10 CVE más críticos (peligrosos) de 2020


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  problema con una violacion de segmento usando opcodes
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: problema con una violacion de segmento usando opcodes  (Leído 5,038 veces)
Belial & Grimoire


Desconectado Desconectado

Mensajes: 559


Tea_Madhatter


Ver Perfil
problema con una violacion de segmento usando opcodes
« en: 1 Septiembre 2013, 22:23 pm »

Hola

Estaba haciendo un ejemplo de como usar los opcodes para ejecutarlos en un C, por ejemplo

Este codigo es el clasico en esamblador de exit(0), y usando objdump quedo asi

Código
  1. #include <stdio.h>
  2.  
  3. char exits[] = "\xbb\x14\x00\x00\x00"
  4.                   "\xb8\x01\x00\x00\x00"
  5.                   "\xcd\x80";
  6.  
  7. int main(){
  8.  
  9.    int *ret;
  10.    ret = (int *)&ret +2;
  11.    (*ret) = (int)exits;
  12. }

el programa lo compilo de esta forma ya que lo estoy analizando como 32 bits y mi sistema es de 64bits

gcc -m32 -ggdb -mpreferred-stack-boundary=2 -o salida salida.c

pero cuando lo ejecuto me sale una violacion de segmento, me imagino que falla exit(0) y no sale correctamente el programa

Alguien me podria decir porque falla el codigo?



En línea

.                                 
Stakewinner00


Desconectado Desconectado

Mensajes: 1.426



Ver Perfil WWW
Re: problema con una violacion de segmento usando opcodes
« Respuesta #1 en: 1 Septiembre 2013, 23:01 pm »

es raro por que lo compile sin querer usando
Código:
g++ main.cpp
y una vez compilado abri el programa y no hubo error, luego como tu lo compilaste si, supongo que es el compilador

luego probe y me da error si pongo
Código:
-mpreferred-stack-boundary=
para que sirve esa opción? con los valores 2 y 3 me da error pero con el 4 ya no...


« Última modificación: 1 Septiembre 2013, 23:04 pm por Stakewinner00 » En línea

Belial & Grimoire


Desconectado Desconectado

Mensajes: 559


Tea_Madhatter


Ver Perfil
Re: problema con una violacion de segmento usando opcodes
« Respuesta #2 en: 1 Septiembre 2013, 23:39 pm »

Es para alinear el stack

Citar
-mpreferred-stack-boundary

lo que no entiendo, es porque el codigo en ensamblador que compile en 32 bits si funciona cuando lo ejecuto, pero el archivo en C hay una violacion de segmento, solo como tu dices, si lo compilo de forma normal, no sale ningun error, pero acaba compilado como 64 bits, con opcodes de 32 bits


En línea

.                                 
Eternal Idol
Moderador
***
Desconectado Desconectado

Mensajes: 5.770


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: problema con una violacion de segmento usando opcodes
« Respuesta #3 en: 2 Septiembre 2013, 00:03 am »

Supongo que la clave es que exits esta en una sección de datos y no en una de codigo, al menos en Windows muere ahi al depurarlo...
En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
Belial & Grimoire


Desconectado Desconectado

Mensajes: 559


Tea_Madhatter


Ver Perfil
Re: problema con una violacion de segmento usando opcodes
« Respuesta #4 en: 2 Septiembre 2013, 00:21 am »

cierto, ya lo movi a la sección de código y se ejecuto bien... ya funciona, gracias

solo una ultima pregunta, en el archivo asm puse a ebx con 20, no es necesario pero es de practica

mov ebx, 20
mov eax, 1
int 0x80

cuando lo ejecuto, funciona bien y obtengo el registro de ebx

[linux]$echo $?
20

pero con el archivo hecho en C, me aparece un numero aleatorio

[linux]$echo $?
28
[linux]$echo $?
146
[linux]$echo $?
44

es normal?

salu2
En línea

.                                 
Eternal Idol
Moderador
***
Desconectado Desconectado

Mensajes: 5.770


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: problema con una violacion de segmento usando opcodes
« Respuesta #5 en: 2 Septiembre 2013, 01:11 am »

De nadas, no se, fijate si depuras el programa y ejecuta exactamente el codigo correcto, de ser asi no tengo ni idea ...
En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
cpu2


Desconectado Desconectado

Mensajes: 994


Ver Perfil
Re: problema con una violacion de segmento usando opcodes
« Respuesta #6 en: 2 Septiembre 2013, 03:14 am »

lo que no entiendo, es porque el codigo en ensamblador que compile en 32 bits si funciona cuando lo ejecuto, pero el archivo en C hay una violacion de segmento, solo como tu dices, si lo compilo de forma normal, no sale ningun error, pero acaba compilado como 64 bits, con opcodes de 32 bits

Si intentas ejecutar la interrupcion al vector 0x80 en un sistema de 64 bits, tendras problemas tienes que usar la instruccion syscall, es mas rapida que la interrupcion al vector asi que no se porque estas en 32 bits.

Te dejo un codigo, devuelve el valor correcto y esta mucho mas optimizado, ya que solo me limito a saltar a la direccion de la shellcode, y esa misma es menos pesada pero no mas rapida.

Código
  1. char shell[] = "\x6a\x01\x58\x6a\x14\x5b\xcd\x80";
  2.  
  3. int main () {
  4.  
  5. asm ("jmp shell");
  6.  
  7. }

Compilado sin ninguna opcion.

Un saludo.
En línea

Belial & Grimoire


Desconectado Desconectado

Mensajes: 559


Tea_Madhatter


Ver Perfil
Re: problema con una violacion de segmento usando opcodes
« Respuesta #7 en: 2 Septiembre 2013, 04:08 am »

gracias cpu2, tendre en cuenta el codigo que me diste... y tienes razon por lo de 64 bits, por eso tenia la duda de hacerlo funcionar como 32 bits para evitar esos problemas  ;D

y lo otro si era normal, habia olvidado desactivar randomize del kernel  :silbar:

Tambien hay que quitar la proteccion de stack

-fno-stack-protector -z execstack

Y con eso, ya funciona con char en los datos

Código
  1. char exits[] = "\xbb\x14\x00\x00\x00"
  2.                   "\xb8\x01\x00\x00\x00"
  3.                   "\xcd\x80";
  4.  
  5. int main()

salu2
« Última modificación: 2 Septiembre 2013, 04:26 am por Belial & Grimoire » En línea

.                                 
Eternal Idol
Moderador
***
Desconectado Desconectado

Mensajes: 5.770


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: problema con una violacion de segmento usando opcodes
« Respuesta #8 en: 2 Septiembre 2013, 09:33 am »

¿Eso quiere decir que los programas de 32 bits tienen que ser recompilados? En Windows hay una emulacion que da soporte al codigo legacy :silbar:
En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
cpu2


Desconectado Desconectado

Mensajes: 994


Ver Perfil
Re: problema con una violacion de segmento usando opcodes
« Respuesta #9 en: 2 Septiembre 2013, 10:39 am »

No, si tu sistema es multilibreria te permite ejecutar binarios de x86 en una amd64. Me acuerdo cuando utilizaba Gentoo en la instalacion te daba ha escojer un perfil si lo querias multilibreria o un amd64 puro, es decir nada de emulacion de binarios x86 y como ejecutes una interrupcion al vector 0x80 un core dumped.

Pero no se ya hace tiempo que no toco Linux, solo Backtrack. Pero es lo que me sucede con OpenBSD ya que es un sistema de 64 bits puro, es por eso que le dije lo de la interrupcion al vector 0x80.

Un saludo.
En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Problema con violación de segmento « 1 2 »
Programación C/C++
Triper0 17 13,868 Último mensaje 8 Noviembre 2015, 21:34 pm
por alesurf1989
calculadora en lenguaje ensamblador ¨violacion de segmento¨
ASM
larapam 2 4,669 Último mensaje 12 Mayo 2012, 18:58 pm
por CasiqueCasimiro
Violacion de segmento en producto de matrices
Programación C/C++
forakas 2 2,408 Último mensaje 28 Diciembre 2012, 04:53 am
por durasno
Problema con un if ( violación de segmentos en tablas bidimiensionales )
Programación C/C++
Firefoxes 1 628 Último mensaje 8 Enero 2018, 19:32 pm
por MAFUS
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines