help_outline
Ayudanos!
play_arrow
Este sitio utiliza cookies propias y de terceros. Si continúa navegando consideramos que acepta el uso de cookies. OK Más Información.

[SOLUCIONADO] Ayuda con code para curso de seguridad y explotacion.

  • 5 Respuestas
  • 1828 Vistas

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

Desconectado JNIOR

  • *
  • Underc0der
  • Mensajes: 15
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
« 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!

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

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!!!
« Última modificación: Febrero 02, 2015, 10:10:44 am por Expermicid »

Desconectado cnfs

  • *
  • Underc0der
  • Mensajes: 103
  • Actividad:
    0%
  • Reputación 3
    • Ver Perfil
    • shad0whack
    • Email
  • Twitter: https://twitter.com/cmind33
« Respuesta #1 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:



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.



- 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.
Security Researcher / Reverse Engineer
https://shad0whack.blogspot.com

Desconectado JNIOR

  • *
  • Underc0der
  • Mensajes: 15
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
« Respuesta #2 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!

Desconectado cnfs

  • *
  • Underc0der
  • Mensajes: 103
  • Actividad:
    0%
  • Reputación 3
    • Ver Perfil
    • shad0whack
    • Email
  • Twitter: https://twitter.com/cmind33
« Respuesta #3 en: Febrero 01, 2015, 11:24:12 pm »
De nada che, me alegra que haya funcionado, era la idea.
Saludos.
Security Researcher / Reverse Engineer
https://shad0whack.blogspot.com

Desconectado JNIOR

  • *
  • Underc0der
  • Mensajes: 15
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
« Respuesta #4 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?????

Desconectado blackdrake

  • *
  • Co Admin
  • Mensajes: 1915
  • Actividad:
    1.67%
  • Reputación 15
    • Ver Perfil
« Respuesta #5 en: Febrero 02, 2015, 07:07:19 am »
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.



 

¿Te gustó el post? COMPARTILO!



[SOLUCIONADO] ¿Kali Linux o Kali Linux Ligth ?

Iniciado por worq

Respuestas: 2
Vistas: 9221
Último mensaje Noviembre 21, 2017, 12:28:54 pm
por Codig0Bit
Crear un archivo .vbs para ejecutar un archivo .bat en invisible

Iniciado por NMS

Respuestas: 2
Vistas: 5192
Último mensaje Marzo 13, 2017, 10:37:57 pm
por sadfud
allegro 5,opngl,sdk para fan game modo storyboard game

Iniciado por Mr.Tru

Respuestas: 2
Vistas: 487
Último mensaje Mayo 23, 2018, 01:19:20 pm
por Mr.Tru
Cómo uso la "/" para hacer un select en una tabla

Iniciado por tetano32

Respuestas: 3
Vistas: 1107
Último mensaje Diciembre 20, 2017, 04:41:12 pm
por tetano32
Parámetros para un script que permita saltar a root con "su"

Iniciado por DUDA

Respuestas: 5
Vistas: 1715
Último mensaje Marzo 28, 2017, 08:23:12 pm
por seth