Notice: La función wp_enqueue_script ha sido llamada de forma incorrecta. Los scripts y estilos no se deberían registrar o poner en cola hasta que se carguen los ganchos wp_enqueue_scripts, admin_enqueue_scripts y login_enqueue_scripts. Este aviso ha sido activado por la gestión de nfd_wpnavbar_setting. Por favor, ve depuración en WordPress para más información. (Este mensaje fue añadido en la versión 3.3.0). in /home1/spotsail/public_html/martra/wp-includes/functions.php on line 6078
Buffer Overflow para negados. I-Parte. – Pere Martra
No se han encontrado widgets en la barra lateral
representacion irónica de un buffer overflowLos Overflow puede ser muy pero que muy elegantes.

Clásico de los clásicos donde los haya, y todavía totalmente en vigencia.

Mediante esta vulnerabilidad alguien puede llegar a ejecutar el código que quiera insertando en ciertas partes de la memoria. Vaaaleeee, esto es complicado! ¿Quién narices va a hacer esto? ¿Mr. Robot? Pues no. Dejando la teoría aparte vamos a ver un ejemplo que nos va a poner los pelos de punta, porque vamos empezar a pensar que no tenemos ni idea de cuántos de estos agujeros podemos tener.

[code language=”c”]
#include <stdio.h>
#include <strings.h>

int main(int argc, char *argv[]){
int puede_pasar = 0;
char password[12];
char passwordGuardado[12] = "SIoNOoES";
gets (password);
if (strncmp(password, passwordGuardado, 6) == 0){
puede_pasar = 1;
}
if (puede_pasar == 0){
printf("Ehhhh!! ¿que haces tu aqui?");
} else {
printf("Yeah!!! Hola megasuperUsuario!");
}
[/code]

Estudiemos un poco el código muy simple, escrito en C. Se trata de una función, típica que recibe parámetros, compara el password recibido con el password que tiene guardado en el codigo, si coinciden saluda al usuario.

Nos puede parece que el mayor error es el guardar el password a hierro en el codigo, y la verdad es que no es muy elegante, pero no es el mayor problema. El problema más grande y el agujero que se usa para ejecutar código malicioso en el sistema es que NO COMPROBAMOS LA LONGITUD DE LA VARIABLE INTRODUCIDA.

Ahora vamos a ver porque: 

Para empezar, diremos que el valor de todas las variables que aparecen se guardan en una zona de la memoria llamada Stack.

Lo primero que hacemos es guardar el valor “SIoNOoES” en la variable passwordGuardado, es decir, en el Stack.

La función gets, lee una cadena que entra el usuario y guarda el valor en la variable password, tambíen en el Stack.

la función strncmp compara dos strings, en un principio el password que tenemos guardado con el password que ha entrado el usuario, pero realmente compara el contenido de las dos zonas de memoria del stack que ocupan las variables password y passwordGuardado. Si el contenido es el mismo nos devolverá un 0.

Si las variables son iguales, asignamos un 1 a la variables que nos indica que podemos pasar y saludamos el usuario. Como no podía ser de otra manera la variable puede_pasar, también está en el stack.

¿Que problema hay?

Bueno, dejando de lado los obvios, como guardar el password (que no se hace nunca) y encima en el codigo, (que eso si que no se hace nunca), hay otro problema un poco mas escondido (aunque tampoco demasiado) un problema de Overflow:

Casi cualquier password que demos con una longitud mayor de 12 será válido. El programa intenta guardar el valor de lo introducido en el usuario en la variable password, pero en esta variable no cabe todo lo que ponemos, así que ni corto ni perezoso continúa ocupando memoria que no le pertenece, y en este caso la memoria de la variable puede_pasar. Es decir, la variable puede_pasar tiene asignada una dirección de memoria en el stack, a la que le hemos puesto un 0 al inicio del programa. Pero este valor es sustituido por los caracteres que le sobran a password. Como el valor de puede_pasar ya no será un 0, el programa le da la bienvenida al megaSuperUsuario.

representacion irónica de un buffer overflow
Los Overflow puede ser muy pero que muy elegantes.

Resumiendo. 

Los ataques de este tipo, que son los más simples de overflow, solo pueden producirse en algún programa que permita ser llamado, es decir nos ofrece un API, y que encima no este muy bíen codificado, ya que comprobando la longitud de todas las entradas este problema no tendría que darse. Pero nadie nos dice que sea un descuido.

Muchas de las puertas traseras tienen una forma parecida a este error, el programador las puede introducir sin levantar demasiadas sospechas y seguramente pasen desapercibidas. No hace falta guardar passwords secretos, ni ocultar funciones que nadie conoce. Tan solo codificas mal cualquier función que pueda ser llamada externamente y ya tienes una bonita puerta trasera.

En el ejemplo hemos visto que se puede modificar el contenido de una variable, pero eso no es todo, no es ni tan solo lo más peligroso. En el stack se almacena tambien la dirección de memoria que contiene el codigo a ejecutar al volver de la función llamada…. y si! Lo pueden cambiar, y eso ya es más peligroso.

Ahora solo tenemos que pensar en la cantidad de código de terceros que tenemos en nuestros sistemas, cualquiera de ellos puede haber sido víctima de un programador que ha dejado una puerta trasera que mediante un Buffer Overflow puede ejecutar cualquier código.

¿Como? Pues lo vemos en otro post, que es tarde y este ya es bastante largo.

Así toman el control de nuestros servidores.
Un Reverse Shell Web pudo ser la causa de los "Papeles de Panamá"

¿Recordáis unos abogados de Panamá que perdieron unos papeles? ¿Recordáis que tenían wordpress? ¿Recordáis que no tenían wordpress actualizado? Supongo Read more

CEH 02 segundo test para el Certified Ethical Hacker

Segundo test conteniendo 10 preguntas para preparar la certificación oficial de Certified Ethical Hacker. El objetivo de este examen es ayudar ver si estas preparado a presentarte al CEH, pero sobretodo servir también como guia de estudio. Si no aciertas una pregunta busca el por que y entiendelo, no lo repitas, solo para saber cual es la respuesta correcta.

1. An Intrusion Detection System(IDS) has alerted the network administrator to a possibly malicious sequence of packets went to a Web server in the networks external DMZ. The packet traffic was captured by the IDS and saved to a PCAP file. What type of network tool can be used to determine if these packets are genuinely malicious or simply a false positive?

 
 
 
 

2. You are performing a penetration test. You achieved access via a buffer overflow exploit and you proceed to find interesting data, such as files with usernames and passwords. You find a hidden folder that has the administrators bank account password and login information for the administrators bitcoin account. What should you do?

 
 
 
 

3. You’ve just been hired to perform a pentest on an organization that has been subjected to a large-scale attack. The CIO is concerned with mitigating threats and vulnerabilities to totally eliminate risk. What is one of the first thing you should to when the job?

 
 
 
 

4. Which of the following best describes a distributed denial-of-service attack?

 
 
 
 

5. The Open Web Application Security Project (OWASP) is the worldwide not-for-profit charitable organization focused on improving the security of software. What item is the primary concern on OWASPs Top Ten Project most Critical Web application Security Rules?

 
 
 
 

6. Which of the following tools can be used to crack SAM files in Windows?

 
 
 
 

7. This phase is the very first step in Information Gathering, and it will tell you what the landscape looks like, and also  will increase the odds of success in later phases of the penetration test.  Most experts think that  is the most important phase of ethical hacking in which you need to spend a considerable amount of time. Can you name it?

 
 
 
 

8. Which of the following is the greatest threat posed by backups?

 
 
 
 

9. During a security audit of IT processes, an IS auditor found that there was no documented security procedures. What should the IS auditor do?

 
 
 
 

10. Which of the following is true regarding WEP cracking?

 
 
 
 

Introducción a Metasploit. Como hacer un Reverse Shell.

Metasploit es una suite increíblemente potente, de eso os daréis cuenta enseguida. Pero primero una anécdota, que ya veréis guarda Read more

Me he quedado con tu cara (Engañando a los sistemas de reconocimiento facial)

Machine Learning, Biometric Recognition, Artificial Intelligence, Multi Layer Security in the beach... Estamos en una época apasionante para cualquier aficionado Read more

Por Martra

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *