Mod_Rewrite Raking en Google, Seguridad por obscuridad y anti SQL Inyección.
By: Date: agosto 21, 2013 Categories: Consultoria y Manuales,Personal

La reescritura de una URL esta presente en la mayoría de los servidores WEB, en este articulo hablare de Apache WebServer.

Lo impresionante no es reescribir la URL, eso suena como algo muy aburrido, lo verdaderamente útil es que hacer con la reescritura y como usarla a nuestro favor.

Tradicionalmente la reescritura se usa con fines muy estéticos, la mayoría de los sitios dinámicos en internet y los más conocidos basados en PHP hacen que se vea horrible el manejo de las URL

http://algunsitio.com/categoria.php?categoria=1&orden=numerico

No solo se ve horrible la URL con todos esos parámetros sino que además un atacante la ve y sabe que el archivo categoría.php por lo tanto es PHP lo que hay que atacar, luego sabe que ahí hay 2 parámetros y que posiblemente están conectados una consulta SQL por lo que no dudaría en intentar inyectar algo

Con la reescritura la URL podría quedar posiblemente así:

http://algunsitio.com/categoria1/ordenum.html

El cambio es brutal, lo primero que se piensa al ver esa url es que el sitio es estático un simple archivo .html que no hace nada que no consulta nada, obvio si estas en una página responsiva y ves que en un formulario metes datos y luego te encuentras con una URL .html que está adaptada a tus datos pensaras que algo dinámico tiene que tener ¿pero que es?

Picándole podrías ver que el 1 cambia a otros números pero podría pensarse que se trata de que hay muchas carpetas numeradas, al final no se sabe por OBSCURIDAD el nombre real del archivo que es categoría.php, ni que es un PHP igual podría ser un CGI , Python, ASPX, podría ser cualquier cosa. Incluso si te da verguenza decir que programas en PHP podrias reescribir tu url para que todos piensen qu eres pitonero o rubiero.

Lo que el atacante no sabe es que no existe ningún directorio o carpeta llamado categoria1 y tampoco sabe que no existe ese archivo html, si entrara a tu servidor y lo buscara jamás lo encontraría por qué no puede encontrar lo que no existe

La reescritura se hace por medio de expresiones regulares, estas expresiones ponen una barrera tipo firewall en el servidor WEB por qué tiene que cumplirse una expresión regular para que ocurra la reescritura.

Si un atacante descubriera que el directorio no existe y se diera cuenta que el parámetro es el número del directorio. Si el cambia ese número por una inyección, la reescritura no se efectúa debido a que ahí obligatoriamente debe haber un número y no un carácter para la inyección, igual se podría aplicar a cada parámetro.

En este ejemplo se está reescribiendo datos de un archivo y de un método GET, pero el mod_rewrite también intercepta y reescribe el stdin de los métodos POST y también los puede reescribir, se pueden aplicar reglas para que cuando encuentre una secuencia típica de una inyección en el flujo de datos las descarte o las reescriba así aunque un sitio es vulnerable no importa porque no pueden inyectar el QUERY y si lo hacen mod_rewrite lo intercepta frustrando a un atacante incluso jugando con sus sentimientos haciéndole creer que puede lograr algo, cuando sabemos que no podrá.

Las reglas de reescritura se pueden aplicar en los archivos .htaccess o en los archivos de configuración de apache para hacerlos globales a todos los virtual host de apache.

Originalmente la reescritura de URL se hizo por estética y para ranking de google, en los rank de google pesa más una página estática por que saben que no va a cambiar una .html que una php asi que da cierta ventaja a la hora de indexar un sitio además de los firewall que aplica a los servidores WEB

Como ejemplo

RewriteRule ^archivo([1-9])s([a-c]).html oculto.php?v1=$1&v2=$2

Esa expresión regular dice que es verdad SI/IF en la URL existe una cadena “archivo” seguida de un numero obligatorio y ese número tiene que ser cualquiera del 1 al 9 pero no contempla 0, después del numero debe ir el carácter s y después de la s debe ir un carácter en minúsculas que puede ser a,b o c pero solo esas letras

Si las condiciones se cumplen ocurre la reescritura, se llama al archivo oculto.php y el valor 1 es el resultado del primer paréntesis, el valor 2 del segundo paréntesis. Si la regla no se cumple ocurre un error 404 y el atacante nunca se entera que el archivo que en realidad hace la consulta se llama oculto.php

Un video que muestra el efecto de la reescritura:

2 thoughts on “Mod_Rewrite Raking en Google, Seguridad por obscuridad y anti SQL Inyección.

  1. Usa: Google Chrome Google Chrome 28.0.1500.95 en Windows Windows 7 - Detectado...

    con django/python ese tema esta resuelto , pero es muy buen articulo para los peacheperos

  2. Usa: Mozilla Firefox Mozilla Firefox 27.0 en Windows Windows 7 - Detectado...

    Muy buen artículo, aunque no le entendí muy bien, dirás que soy un noob u.u y tendrás toda la razón, lo que dices es que para prevenir ataques de inyección SQL, recomiendas que se cambie las url en este ejemplo tomando wordpress, en la configuración de enlaces permanentes, se personalicen para generar un archivo .html ¿eso lo permite wordpress? O se tiene que hacer directamente de manera manual en ell .htacces ? desconocia que google diera mas prioridad para indexar a paginas .html pero bueno creo que tendre que documentarme mas, pero de todas maneras, muy buena publicasion, jejeje aun que, me dejo la espinita de la duda :v

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *