SSL MITM с помощью mitmdump/mitmproxy

SSL MITM с помощью mitmdump/mitmproxy
Burp классная штука, но есть у него один косяк.


name="'more'">

В Burp нельзя поменять HTTPS сертификат, что является серьезным демаскирующим признаком. Я пробовал подменять файлик burpsuite_free.zipresourcesCryptops.p12, но не сработало.

Тулза mitmdump/mitmproxy из комплекта Kali linux поэтому выглядит гораздо более привлекательным решением, если вам нужно скрытно подампить https.

Далее небольшой гайд.

Генерируем правильный сертификат

openssl genrsa -out CA.key
openssl req -new -key CA.key -x509 -days 1095 -out CA.crt

На вопросы openssl ответить можно, например, так:
C = US
O = VeriSign, Inc.
OU = (c) 2006 VeriSign, Inc. - For authorized use only
CN = VeriSign Class 3 Public Primary Certification Authority - G5

Чтобы сделать сертификат в формате pem, который понимает mitmproxy, достаточно выполнить:
cat CA.crt CA.key > CA.pem

.crt файл необходимо установить в браузер жертвы .
pem файл переместить в каталог .mitmproxy и заменить mitmproxy-ca.pem

Теперь сертификат будет выглядеть намного посимпатичней.
Но проблема с mitmproxy в другом. Она использует уникальный формат дампа, который не совместим более ни с чем.

Работаем с дампом mitmproxy

РазGREPать дамп mitmproxy - это боль главным образом из-за наличия gzip'нутого HTML. Нет импорта в tcpdump/wireshark (ибо mitmproxy не хватает IP заголовки), нет импорта в curl, нет вообще импорта!

Более менее нормально работать с дампом можно только с помощью Python. 
Я набросал скрипт (на базе read_dumpfile отсюда ), который выводит разжатый http response body, который дальше можно читать grep'ом и пр. Может, кому пригодится.

#!/usr/bin/env python
#
# Get ungzipped http response body
# run: python readdump.py dumpfile
#

from libmproxy import flow

import zlib
import sys

with open(sys.argv[1], "rb") as logfile:
freader = flow.FlowReader(logfile)
for f in freader.stream():
try: 
body = f.response.body
        print(zlib.decompress(body, 31))
        print("===================================")

  except:
print("Error")  

To do на след.раз: сгенерировать максимально похожую копию какого-нибудь trusted root CA так, чтобы даже fingerprint был визуально похож на реальный. Кто-нибудь случайно не знает утилиту, которая это может?

Alt text
«Опасное будущее» наступает очень быстро, поэтому мы решили еженедельно мониторить поток новостей. Cмотрите обзор на нашем Youtube канале.  

Артем Агеев

root@itsec.pro:~#