Underc0de

[In]Seguridad Informática => Seguridad web y en servidores => Mensaje iniciado por: elefren en Abril 06, 2016, 08:24:27 AM

Título: Bypasseando mod_security y ejecutando inyecciones SQL
Publicado por: elefren en Abril 06, 2016, 08:24:27 AM
Buenas chicos, aquí os dejo este "artículo" que escribí inicialmente en un blog que tengo, y lo publico aquí para que sea de utilidad a los que desconozcan este método de bypassear el modsecurity.

Introduccion
Como muchos conocemos, por allá por el 2005 con la aparición de las inyecciones SQL y demás agujeros de seguridad en php, Apache implementó un modulo llamado mod_security el cual funciona como una especie de WAF (Web Application Firewall) que bloquea nuestras peticiones a la aplicación cuando detecta valores sospechosos por GET, POST, COOKIE, etc... Hoy en día siguen habiendo muchas aplicaciones web (desde la de la tienda del chapuzas de la esquina, hasta gubernamentales) con este modulo activado en su servidor pensando así sus administradores que está libres de posibles inyecciones y demás.

¿Cómo funciona mod_security?
El mod_security actúa en una capa sobre la ejecución de código, filtrando las peticiones al servidor a las que lleguen parámetros sospechosos como puede ser por ejemplo en una variable GET un "AND 1=1", UNION, entre otros... Entonces si este es el caso el servidor bloquea la peticion mostrándonos una pagina de error. De esta manera nos impide poder realizar una inyección SQL.


Rompiendo el mod_security
Sabiendo que el mod_security se blinda funcionando con un filtrado de expresiones, para evitarlo tan solo hay que saltar ese filtrado, pero claro si en el están incluidas palabras como UNION, UpdateXML, SELECT, WHERE, etc.. ¿cómo conseguimos ejecutar nuestras sentencias? pues muy sencillo, en MySQL existe una sintaxis para ejecutar dichos parámetros solo si el MySQL que se ejecuta es bajo una versión en concreto (ideal para los dump) la cual funciona de la siguiente manera:


/*!40101 DELETE FROM ejemplo WHERE version=4 */
/*!50000 DELETE FROM ejemplo WHERE version=5 */


El código anterior si lo ejecutamos en una versión 4.x de MySQL solo ejecutará la primera sentencia, pues en la segunda le estamos diciendo que sea en versiones mayores a la 5. ¿Qué conseguimos con esto? pues que el mod_security no tiene filtrada esta sintaxis, es decir que cuando introducimos una petición GET con la sentencia en este formato se la tragará y nos ejecutará la inyección, aquí dejo algunos ejemplos:


http://www.victima.com/acceso.php?codigo='/!*50000OR*/ 1=1
http://www.victima.com/ver?idc=265' /*!50000AND*/ updatexml(null,concat(0x3a,(SELECT pass FROM tabla LIMIT 0,1)),1)
http://www.victima.com/tfno.php?id=.4'/*!50000UNION*//*!50000SELECT*/1,2,3,4,5,6,7--


Conclusión
Como conclusión final de esta entrada pues creo que sobra decir, que lo mejor es hacer nuestras aplicaciones seguras, y evitar llegar a practicas como estas, pues un WAF, ya sea mod_security u otro en muchos casos no es seguro y la seguridad de nuestra web puede caer. Y en caso de que el WAF fuera seguro, imaginaros que en un momento por algún despiste del administrador, actualización o algo este se desactive, nuestra aplicación quedaría expuesta, así que lo mejor es no depender de estos módulos.
Título: Re:Bypasseando el mod_security y ejecutar inyecciones SQL
Publicado por: rreedd en Abril 06, 2016, 12:54:21 PM
Hola !!
muy bueno su post compañero @elefren (https://underc0de.org/foro/index.php?action=profile;u=52481)  :D
Título: Re:Bypasseando el mod_security y ejecutar inyecciones SQL
Publicado por: arthusu en Abril 06, 2016, 02:01:45 PM
Me agrada cuando hablas de tiempos atras C': Buen Post! +1
Título: Re:Bypasseando el mod_security y ejecutar inyecciones SQL
Publicado por: DeBobiPro en Abril 06, 2016, 04:17:57 PM
Interesante, corto y preciso.
da para pensar bastante .

Muchas gracias!
Título: Re:Bypasseando el mod_security y ejecutar inyecciones SQL
Publicado por: EPSILON en Abril 06, 2016, 06:48:25 PM
Muy bien redactado y claro, me gusto. te dejo +c0in.

Saludos!, EPSILON
Título: Re:Bypasseando mod_security y ejecutando inyecciones SQL
Publicado por: ceroMee en Octubre 09, 2016, 02:30:32 AM
oww no sabia esto man  ??? esta muy intersante +1