comment
IRC Chat
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
  • 1735 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.    No tienes permisos para ver links. Registrate o Entra con tu cuenta("Uso: %s <Palabra> <Veces a imprimir\n", path);
  4. }
  5. int main(int argc, char *argv[]) {
  6.    int x, contador;
  7.    contador = No tienes permisos para ver links. Registrate o Entra con tu cuenta(argv[2]);
  8.    No tienes permisos para ver links. Registrate o Entra con tu cuenta("Imprimiendo %d veces\n", contador);
  9.    for(x=0;x<contador;x++)
  10.       No tienes permisos para ver links. Registrate o Entra con tu cuenta("%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
No tienes permisos para ver links. Registrate o Entra con tu cuenta

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
No tienes permisos para ver links. Registrate o Entra con tu cuenta

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: 1914
  • Actividad:
    1.67%
  • Reputación 15
    • Ver Perfil
« Respuesta #5 en: Febrero 02, 2015, 07:07:19 am »
No tienes permisos para ver links. Registrate o Entra con tu cuenta
No puedo agradecerte en el foro no me sale la opcion alguien podria hacerlo por mi? como puedo hacerlo yo?????

No tienes permisos para ver links. Registrate o Entra con tu cuenta

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: 7851
Ú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: 4770
Ú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: 394
Ú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: 1001
Ú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: 1615
Último mensaje Marzo 28, 2017, 08:23:12 pm
por seth