Categorygithub.com/shysa/TP_proxy
modulepackage
0.0.0-20210316195716-bf0fd3a6f954
Repository: https://github.com/shysa/tp_proxy.git
Documentation: pkg.go.dev

# README

TP_proxy

Написать http прокси сервер и простой сканер уязвимости на его основе (часть функционала burp suite без gui). Язык программирования любой, можно использовать любые библиотеки, кроме тех, которые реализуют функционал http прокси (https://mitmproxy.org и тп).

Пример реализации 1 и 2 пунктов
https://github.com/john-pentest/fproxy
https://github.com/kr/mitm/blob/master/mitm.go

Сделать задание в виде докер контейнера, в котором прокси слушает на порту 8080, на порту 8000 веб-интерфейс (например, /requests – список запросов
/requests/id – вывод 1 запроса
/repeat/id – повторная отправка запроса
/scan/id – сканирование запроса)

  1. Проксирование HTTP запросов – 5 баллов
    Должны успешно проксироваться HTTP запросы. Команда curl -x http://127.0.0.1:8080 http://mail.ru (8080 – порт, на котором запущена программа) должна возвращать

<html>
<head><title>301 Moved Permanently</title></head>
<body bgcolor="white">
<center><h1>301 Moved Permanently</h1></center>
<hr><center>nginx/1.14.1</center>
</body>
</html>

На вход прокси приходит запрос вида

GET http://mail.ru/ HTTP/1.1
Host: mail.ru
User-Agent: curl/7.64.1
Accept: */*
Proxy-Connection: Keep-Alive

Необходимо:

  • считать хост и порт из первой строчки
  • заменить путь на относительный
  • удалить заголовок Proxy-Connection
  • Отправить на считанный хост (mail.ru:80) получившийся запрос

GET / HTTP/1.1
Host: mail.ru
User-Agent: curl/7.64.1
Accept: */*

Перенаправить все, что будет получено в ответ

HTTP/1.1 301 Moved Permanently
Server: nginx/1.14.1
Date: Sat, 12 Sep 2020 08:04:13 GMT
Content-Type: text/html
Content-Length: 185
Connection: close
Location: https://mail.ru/

<html>
<head><title>301 Moved Permanently</title></head>
<body bgcolor="white">
<center><h1>301 Moved Permanently</h1></center>
<hr><center>nginx/1.14.1</center>
</body>
</html>

Убедиться, что

  • проксируются все типы запросов (GET, POST, HEAD, OPTIONS)
  • проксируются все заголовки
  • корректно возвращаются все коды ответов (200, 302, 404)
  1. Проксирование HTTPS запросов – 5 баллов
    Должны успешно проксироваться https запросы. В настройках браузера указать http/https прокси, добавить в ОС корневой сертификат, все сайты должны работать корректно.

Запрос curl -x http://127.0.0.1:8080 https://mail.ru (8080 – порт, на котором запущена программа) должен обрабатываться следующим образом:

CONNECT mail.ru:443 HTTP/1.1
Host: mail.ru:443
User-Agent: curl/7.64.1
Proxy-Connection: Keep-Alive

Необходимо считать хост и порт (mail.ru 443) из первой строчки. Необходимо сразу вернуть ответ (сокет не закрывать)

HTTP/1.0 200 Connection established

После этого curl начнет установку защищенного соединения. Для установки такого соединения необходимо сгенерировать и подписать сертификат для хоста (mail.ru). Команды для генерации корневого сертификата и сертификата хоста https://github.com/john-pentest/fproxy/blob/master/gen_ca.sh
https://github.com/john-pentest/fproxy/blob/master/gen_cert.sh
Необходимо установить защищенное соединение с хостом (mail.ru:443), отправить в него все, что было получено и расшифровано от curl и вернуть ответ.

Убедиться, что получается зайти на сайт mail.ru, авторизоваться и получить список писем

  1. Повторная отправка проксированных запросов – 5 баллов
    Не только проксировать запросы в п.1-2, но и сохранять их в некоторое хранилище (БД, текстовый файл и тп). Написать скрипт для отправки запросов из хранилища.

Убедиться, что получается записать запрос на авторизацию на сайте mail.ru и заново его отправить

  1. Сканер уязвимости – 5 баллов
    В зависимости от варианта реализовать проверку уязвимости для запросов в хранилище из п.3. Можно реализовать предложенную проверку, или придумать свою

Вариант 1. Command injection – во все GET/POST параметры попробовать подставить по очереди ;cat /etc/passwd;
|cat /etc/passwd|
cat /etc/passwd
В ответе искать результат выполнения команды (строчку "root:"), если нашелся, писать, что данный GET/POST параметр уязвим

Болгова Анастасия

# Packages

No description provided by the author
No description provided by the author