sábado, 15 de septiembre de 2007

Form Tampering: Manipulando la verdad

Hace tiempo que no posteaba, y para que KrAmOx no se me mosquee me voy a poner manos a la obra, ya he terminado exámenes y trabajo, así que espero poder tener mas tiempo para escribir… aunque en breve os quiero dar una sorpresita ;)

El tema de hoy es ni más ni menos que una de las vulnerabilidades mas extendidas en la programación web, el Form Tampering.

Básicamente consiste en manipular el contenido de los campos de un formulario antes de ser enviado. Muchos pensareis…”pues vaya utilidad, si quiero cambiarlo, lo hago antes…” y sí, tenéis razón, pero bueno, haremos un pequeño repaso a la historia para que veáis porque puede ser interesante.

La programación de páginas web dinámicas mediante PHP y bases de datos es algo relativamente moderno. PHP nació en 1995, y hasta hoy han pasado 12 años (que es mucho hablando en términos informáticos), pero eso no implica que desde ese año todo hayan sido webs dinámicas.
La programación de webs dinámicas es muy interesante para, por ejemplo, el desarrollo de comercios electrónicos, pudiendo ofrecer a cada cliente una tarifa de precios ajustada y obtenida a través de una base de datos. Permite el uso de sesiones de usuario, por lo cual puede haber varios usuarios haciendo uso de la misma web de comercio sin interferir uno con el otro.

Todo esto esta muy bien… pero claro! Antes de 1995 la gente ya vendía a través de Internet! y muchos mas lo hicieron después mediante paginas web estáticas… puro HTML y JavaScript…
La diferencia estribaba en que no podían obtener los precios de los productos ni las tarifas personalizadas de una base de datos, por lo que eran paginas mas bien genéricas.

Como los precios no se podían obtener de una base de datos y a su vez, tenían que estar en el formulario que se enviaba para el pedido muchos webmasters optaron por utilizar campos ocultos para evitar que la gente pudiera modificarlos, y con ello “ajustarse” su propia tarifa.

OJO! No quiero decir con esto que las paginas dinámicas estén exentas de este tipo de ataque! Pueden ser igual de vulnerables si no se toman las medidas adecuadas. Lo más importante es recordar que nunca debemos coger el valor de un campo del formulario si lo podemos obtener de la base de datos, porque todos los campos son sensibles de ser modificados, pero no la base de datos…

Existen una serie de programas llamados Interceptores HTML que nos permiten modificar las cabeceras, los campos pasados con GET y POST… antes de mandarse definitivamente, lo cual nos sitúa en una posición ventajosa.
Algunos de estos programas son Achilles, Odysseus… cada cual a su gusto, pero yo quiero destacar una herramienta que sirve para este y muchos mas fines:
La Firefox webdeveloper:

Mediante esta sencilla barra podemos mostrar el contenido de los campos ocultos, remover maximos permitidos, desbloquear campos de solo lectura, observar la disposicion de las tablas.... TODO.

Si hacemos como en la imagen:
Mostraremos los campos ocultos y obtendremos información de todos los campos de un formulario. A partir de ahi modificar su valor es cosa de niños:


En este ejemplo podemos modificar la referencia del producto, poniendo la de uno mas caro y pagando un precio inferior...

Este tipo de fallos deben ser reportados lo mas breve posible para evitar que alguien haga uso de ellos, y son bastante comunes.

A partir de aquí os recomiendo que os familiaricéis mas con la Webdeveloper y exprimáis sus capacidades, por ejemplo, remover máximos permitidos es de gran ayuda para intentar inyecciones SQL, convertir métodos puede venir bien para depurar paginas en desarrollo, porque ante todo, esto es una herramienta para desarrollo de webs.... o no? ;)

Salu2!

1 comentario:

Anónimo dijo...

gracias men buen articulo, yo me estoy iniciando en este mundo y espero aprender....