Created
March 5, 2011 12:37
-
-
Save starenka/856326 to your computer and use it in GitHub Desktop.
Poll pwn
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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