Underc0de

Foros Generales => Dudas y pedidos generales => Mensaje iniciado por: JNIOR en Febrero 01, 2015, 08:50:02 PM

Título: [SOLUCIONADO] Ayuda con code para curso de seguridad y explotacion.
Publicado por: JNIOR en Febrero 01, 2015, 08:50:02 PM
Buenasss que tal foro? espero haberlo posteado en el lugar correcto ya que en otro lado no encajaba si bien es de programacion, esta relacionado a explotar, pero ustedes ya sabran que hacer con el post. (disculpas).

Estoy haciendo un curssito presencial de seguridad y explotacion el codigo en si es basico y el fin es 'fixearlo' no tiene mucha funcionalidad el programa lo q hace es pedir una palabra y repetirla las veces que le pongamos "hola" "10", asi repetiria hola 10 veces. El reto por asi decirlo es fixear los argumentos porq si no le paso los q me pide tira un segmentation fault!! y ahi es donde un hacker tomaria ventaja.....

Me podrian ayudar???? este es el codigo!

#include <stdio.h>
void funcRepetir(char *path) {
   printf("Uso: %s <Palabra> <Veces a imprimir\n", path);
}
int main(int argc, char *argv[]) {
   int x, contador;
   contador = atoi(argv[2]);
   printf("Imprimiendo %d veces\n", contador);
   for(x=0;x<contador;x++)
      printf("%d - %s\n", x, argv[1]);
}


Lo que me piden son dos 3 cosas, 1) es como fixearlo para que no pase?, 2) es saber cual es la direccion de memoria o del buffer "ARGVC []" donde estan los parametros que le paso antes del segmentation fault..3) el porque del segmfault 'tecnicamente explicado'

Creanme que repase etc pero ouffffff estoy mareado y me esta costando mucho.. mañana deberia estar resolviendolo =( MIL GRACIAS!!!
Título: Re:Ayuda con code para curso de seguridad y explotacion.
Publicado por: shkz en Febrero 01, 2015, 10:29:56 PM
Bueno, algo desprolijo como lo posteastes... pero estoy de humor y creo que puedo ayudarte jej.
(No aclaraste de que manera reversearlo asi que lo hice desde mi gdb bajo linux).

En principio el codigo, recibe en main 2 argumentos. Un entero, y un 'vector de argumentos' argv.
En la linea donde declara "contador = atoi(argv[2]);"
Invoca a la funcion "Ascii to integer". (ATOI), y toma como argumento el segundo (2), para transformarlo en entero ya que cuando se declaro, se declaro como 'char'.

Osea que el programa se ejecutaria ./a.out <mensaje> <veces>.
Si se ejecuta haciendo esto: ./a.out x
Da Segmentation Fault.

La manera de fixearlo es poniendo un Condicional IF y una salida en la funcion funcRepetir.
Lo testie y queda 'corregido' y funcionando de la siguiente manera:

En la funcion funcRepetir, terminala con un exit(1); (y ademas inclui <stdlib.h).
Luego en el main, justo despues de declarar los enteros 'x' y 'contador';
Aplica un condicional if:

   if (argc < 3)
   funcRepetir(argv[0]);


(Si hay menos de 3 argumentos sale..) (el primer argumento siempre es el del programa path/a.out).

Resuelto esto, vamos con la segunda pregunta. Como te dije lo reversie con el gdb de linux, previamente lo recompile con gcc y el flag -g. Como muestra la imagen corri el debugger y le inyecte una cadena 'soyhax0r' ;D asi buscamos el segmentatio fault:

(http://www.subeimagenes.com/img/s1-1216621.jpg)

Vemos el sentido de la pila a la inversa, y ponemos un breakpoint justo antes de que haga el segmentation fault, en 'main'. Como la matriz 'argv[]' es un puntero en realidad.. Este apunta a la cadena de strings que son tomadas como argumentos.. lo confirmamos en esta imagen y listo.

(http://www.subeimagenes.com/img/s2-1216622.jpg)

- Para en el breakpoint que puse en main.
- Examino el valor antes del segmentation fault que arroja 'argv=0xbffff1b4'.
- Examino las 4 primeras direcciones que tiene almacenada la direccion de la matriz argv..
- Compruebo que son los argumentos enviados antes del segmentation fault, el path, el soyhax0r que inyecte, y el segmentation fault........ 0x00000000 <es una direccion out-of-band>. Es decir que se encuentra fuera de los limites de memoria, cuando un programa intenta acceder a esa direccion de memoria se cuelga y falla.

Espero te haya servido.
Saludos.
Título: Re:Ayuda con code para curso de seguridad y explotacion.
Publicado por: JNIOR en Febrero 01, 2015, 11:21:24 PM
Nooooo chabon sos una bestia!!!! jajaja me costo seguirte en algunas cosas pero fixie el programa como me mdijiste y quedo diez puntos!!!!!! Muchisimas gracias loco, la proxima sere mas ordenadoooo!!

MIL GRACIAS nuevamente!
Título: Re:Ayuda con code para curso de seguridad y explotacion.
Publicado por: shkz en Febrero 01, 2015, 11:24:12 PM
De nada che, me alegra que haya funcionado, era la idea.
Saludos.
Título: Re:Ayuda con code para curso de seguridad y explotacion.
Publicado por: JNIOR en Febrero 01, 2015, 11:25:37 PM
No puedo agradecerte en el foro no me sale la opcion alguien podria hacerlo por mi? como puedo hacerlo yo?????
Título: Re:Ayuda con code para curso de seguridad y explotacion.
Publicado por: blackdrake en Febrero 02, 2015, 07:07:19 AM
No tienes permitido ver enlaces. Registrate o Entra a tu cuenta
No puedo agradecerte en el foro no me sale la opcion alguien podria hacerlo por mi? como puedo hacerlo yo?????

http://underc0de.org/foro/underc0de/boton-'gracias'/

Necesias 10 mensajes mínimo, pero yo ya le dí +1 por el gran trabajo ^^

Doy como solucionado el tema, si algún día puedes Agradecerle, solo tienes que entrar aquí y darle +1

Un saludo.