Skip to content

Instantly share code, notes, and snippets.

@starenka
Created March 5, 2011 12:37
Show Gist options
  • Save starenka/856326 to your computer and use it in GitHub Desktop.
Save starenka/856326 to your computer and use it in GitHub Desktop.
Poll pwn
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
# script to forge requests to webapps/polls w/ proxies,ua,postdata...
# f.e to add vote in ip restricted polls
# pollock http://soutez.cenypodlupou.cz/index.php -d'SITE=ajax&url=soutez_hlas&id=105' -l /junk/proxylist -v
#
# you can find proxies f.e via https://gist.github.com/749299
#
# @author: starenka
# @email: 'moc]tod[liamg].T.E[0aknerats'[::-1]
# @version: 1.0
# @since 3/5/11
# @depends pycurl
import sys,pycurl
from optparse import OptionParser
from random import choice
class Log(object): pass
class StdOutLog(Log):
def __new__(self,buff):
print buff
class DevNullLog(Log):
def __new__(self,buff): pass
class Pollock(object):
PROXY_TYPE = pycurl.PROXYTYPE_SOCKS5
PROXY_TYPE = None #auto
UAS = '''Mozilla/5.0 (Windows; U; Windows NT 6.1; %s; rv:1.9.2.14) Gecko/20110218 Firefox/3.6.14
Opera/9.80 (X11; Linux i686; U; %s) Presto/2.7.62 Version/11.01
Mozilla/5.0 (Windows; U; Windows NT 5.1; %s; rv:1.8.1.6) Gecko/20070725 Firefox/2.0
Mozilla/5.0 (Windows; U; MSIE 9.0; WIndows NT 9.0; %s))
Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_6; %s) AppleWebKit/530.5 (KHTML, like Gecko) Chrome/ Safari/530.5
Mozilla/5.0 (Windows; U; Windows NT 6.0; %s) AppleWebKit/525.19 (KHTML, like Gecko) Chrome/1.0.154.42 Safari/525.19
Mozilla/5.0 (iPod; U; CPU iPhone OS 2_2_1 like Mac OS X; %s) AppleWebKit/525.18.1 (KHTML, like Gecko) Mobile/5H11'''
UA_LANGS = ('en-GB','en-US','de','cs-CZ','en-AU','pl')
def __init__(self,target,post=None,timeout=30,logger=StdOutLog,verbose=False):
self.tar = target
self.post = post
self.timeout = timeout
self.logger = logger
self.verbose = verbose
self.curl = pycurl.Curl()
@property
def user_agent(self):
return choice(self.UAS.splitlines())%choice(self.UA_LANGS)
def _parse_proxies(self,file):
try:
f = open(file)
return f.readlines()
except Exception,e:
print '[-] %s'%e
return False
def _parse_proxy(self,proxy):
proxy = proxy.split(':')
return proxy[0],int(proxy[1]),self.PROXY_TYPE
def make_request(self,proxy=None):
self.curl.setopt(pycurl.URL, self.tar)
#self.curl.setopt(pycurl.HEADERFUNCTION, self.logger)
self.curl.setopt(pycurl.WRITEFUNCTION, self.logger)
self.curl.setopt(pycurl.VERBOSE, self.verbose)
self.curl.setopt(pycurl.CONNECTTIMEOUT, self.timeout)
self.curl.setopt(pycurl.TIMEOUT, self.timeout)
self.curl.setopt(pycurl.USERAGENT, self.user_agent)
self.curl.setopt(pycurl.FOLLOWLOCATION, True)
self.curl.setopt(pycurl.MAXREDIRS, 5)
if self.post:
self.curl.setopt(pycurl.POSTFIELDS, self.post)
if proxy:
proxy = self._parse_proxy(proxy)
self.curl.setopt(pycurl.PROXY, proxy[0])
self.curl.setopt(pycurl.PROXYPORT, proxy[1])
if proxy[2]:
self.curl.setopt(pycurl.PROXYTYPE, proxy[2])
try:
resp = self.curl.perform()
except Exception,e:
print '[-] CURL: %s'%e
return False
usage = '%s target_url'%(sys.argv[0])
oparser = OptionParser(usage)
oparser.add_option('-p','--proxy',action='store',dest='proxy',default = None, help='use proxy ip:port')
oparser.add_option('-l','--proxy-list',action='store',dest='proxy_list',default = None,\
help='read proxies from file and perform action for every line')
oparser.add_option('-d','--post-data',action='store',dest='post_data',default = None, help='POST data')
oparser.add_option('-v','--verbose',action='store_true',dest='verbose',default = False, help='be verbose')
oparser.add_option('-t','--timeout',action='store',dest='timeout',default = 5, help='timeout reqs after...')
(options,args) = oparser.parse_args()
if len(sys.argv) < 2: sys.exit('[-] Specify at least target_url')
req = Pollock(sys.argv[1],post=options.post_data,verbose=options.verbose)
if options.proxy_list:
proxies = req._parse_proxies(options.proxy_list)
if not proxies:
sys.exit('[-] Failed to parse proxy list %s'%options.proxy_list)
for proxy in proxies:
req.make_request(proxy)
else:
req.make_request(options.proxy)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment