{"id":21417597,"url":"https://github.com/mmikhail2001/technopark_security_hw_proxy","last_synced_at":"2026-05-10T10:13:27.526Z","repository":{"id":194582036,"uuid":"691143411","full_name":"mmikhail2001/technopark_security_hw_proxy","owner":"mmikhail2001","description":"HTTPS прокси-сервер, сохраняющий расшифрованный трафик в БД mongo, и WEB API, предоставляющий интерфейс для просмотра запросов, повторов, сканера уязвимостей.","archived":false,"fork":false,"pushed_at":"2024-02-15T09:51:40.000Z","size":77,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-01-23T05:45:47.127Z","etag":null,"topics":["docker","https","mitm","mongo","proxy"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mmikhail2001.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2023-09-13T15:28:12.000Z","updated_at":"2024-06-16T16:37:22.000Z","dependencies_parsed_at":"2024-02-15T10:50:56.044Z","dependency_job_id":null,"html_url":"https://github.com/mmikhail2001/technopark_security_hw_proxy","commit_stats":null,"previous_names":["mmikhail2001/technopark_security_hw_proxy"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mmikhail2001%2Ftechnopark_security_hw_proxy","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mmikhail2001%2Ftechnopark_security_hw_proxy/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mmikhail2001%2Ftechnopark_security_hw_proxy/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mmikhail2001%2Ftechnopark_security_hw_proxy/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mmikhail2001","download_url":"https://codeload.github.com/mmikhail2001/technopark_security_hw_proxy/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243918629,"owners_count":20368745,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["docker","https","mitm","mongo","proxy"],"created_at":"2024-11-22T19:16:30.367Z","updated_at":"2026-05-10T10:13:27.412Z","avatar_url":"https://github.com/mmikhail2001.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# technopark_security_hw_proxy\n\n[ТЗ](https://docs.google.com/document/d/1QaQ-Nc_eE4dBKZwQbA4E2o8pOJ3CktgsKDAn375iY24/edit)\n\n## Запуск прокси-сервера и web api на хосте, бд в докере\n\n- переименовать `docker-compose-mongo.yml` в `docker-compose.yml`\n- `docker compose up` -- запуск mongodb (слушает порт 27017)\n- `make -B build` -- сборка прокси-сервера и web api, исполняемые файлы сохраняются в папку build\n- `./build/proxy/out` -- запуск прокси-сервера (слушает порт 8080)\n- `./build/webapi/out` -- запуск web-api (слушает порт 8000)\n\n## Запуск прокси-сервера, web api и бд в докере\n\n- `docker compose up` -- сборка и запуск трех контейнеров: proxy, webapi, mongo. Контейнеры слушают порты 8080, 8000 и 27017 соответственно. \n\n## Установка сертификатов (Ubuntu)\n\n- `sudo cp .mitm/ca-cert.pem /usr/local/share/ca-certificates/ca-cert.crt` -- копирование сертификата в список доверенных\n- `sudo update-ca-certificates` -- обновление доверенных сертификатов\n\n## Использование\n\n- `curl -x 127.0.0.1:8080 -v http://example.com`\n- `curl -x 127.0.0.1:8080 -v https://mail.ru`\n- web-api 127.0.0.1:8000 имеет **ручки**: `/requests, /requests/{id}, /repeat/{id}, /scan/{id}` \n- использование в браузере **firefox**: указать адрес прокси (настройки -\u003e прокси), импортировать сертификат (настройки -\u003e сертикаты -\u003e импорт ca-cert.pem). Браузер работает в штатном режиме, любые запросы имеют успех, включая login, logout.\n- Вход в сервис Google Аккаунт. Интерфейс MongoDB Compass.\n- ![image](https://github.com/mmikhail2001/technopark_security_hw_proxy/assets/71098937/2b08b213-7b85-49c4-8421-d0daacef9af5)\n\n\n\n## Использование web-api\n \n![image|300](https://github.com/mmikhail2001/technopark_security_hw_proxy/assets/71098937/aa32906d-f5ae-49bf-8950-15b419bca8b1)\n\n## Пример уязвимого сервера \n- `vulnerable-test-server/main.go` -- уязвимый сервер, написанный на golang. Отправляет в теле ответа get-параметры без валидации.\n- `curl -x 127.0.0.1:8080 -v http://212.233.91.39/?name=mikhail` -- запрос на уязвимый сервер через прокси\n- `request.get_params.name = mikhail` и `response.text_body = Hello, mikhail!`\n- ![image|300](https://github.com/mmikhail2001/technopark_security_hw_proxy/assets/71098937/4cb9a3b0-bb48-4518-8435-f091b61963ea)\n- найдена уязвимость в get-параметре name\n- ![image|300](https://github.com/mmikhail2001/technopark_security_hw_proxy/assets/71098937/4038fc77-d78a-4c3e-a8e4-3a8e9245b1d7)\n\n## Замечания\n- Замечания по работе web-api и прокси сервера\n\t- Для сохранения данных запроса и ответа используется NoSQL база данных **mongodb**\n\t- Удаляется заголовок `Accept-Encoding` для отсутствия сжатия. В ответ от целевого сервера добавляется заголовок `Content-Encoding: identity`\n\t- В ответ от целевого сервера добавляется заголовок `X-Transaction-Id: {id}`, содержащий id http транзакции, данные по которой сохранились в БД по _id = {id}\n\t- Парсинг тела POST запроса происходит в том случае, если клиент выставил заголовок `Content-Type: application/x-www-form-urlencoded`\n\t- Тело ответа сохраняется в БД в бинарном формате. В текстовом формате сохраняется в том случае, если целевой сервер выставил заголовок `Content-Type`, содержащий в значении `text` или `application` (исключение: `application/octet-stream`). Данное решение требует пересмотра.\n- Трудности разработки\n\t- Не удается проэксплуатировать уязвииый веб-сервер при запуске последнего на хосте (`curl -x 127.0.0.1:8080 127.0.0.1/?name=mikhail`). Ошибка ` reverseproxy.go:666: http: proxy error: dial tcp 127.0.0.1:80: connect: connection refused`\n\t- Изначальная реализация предполагала запуск ubuntu контейнеров с приаттаченной директорией с бинарными файлами, которые билдились на хосте. При таком подходе curl выдавал ошибку `curl: (35) error:0A000438:SSL routines::tlsv1 alert internal error`. Далее была предпринята успешная попытка использовать golang контейнеры и билдить код непосредственно в них. \n- Перспективы развития: в первую очередь, устранить следующие проблемы.\n\t- [ ] username и password от БД необходимо передавать через переменные окружения (файл `.env`).\n\t- [ ] Конфигурацию (например, url адреса) нужно хранить в файлах, а не \"хардкодить\" в константах.\n\t- [ ] Докерфайлы создают image, копируя всю директорию, а не соответствующий сервер\n \t- [ ] Отсутствие request.textBody  \n\t- [ ] Отсутствие рефакторинга и ревью.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmmikhail2001%2Ftechnopark_security_hw_proxy","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmmikhail2001%2Ftechnopark_security_hw_proxy","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmmikhail2001%2Ftechnopark_security_hw_proxy/lists"}