Сегодня на примере виртуальной машины Overflow с площадки HTB, рассмотрим скрипт PadBuster, который используется для реализации атаки Padding oracle.
Еще по теме: Как реализовать атаку DCSync
Атака Padding oracle
Padding oracle — это атака на шифрование CBC, при котором сообщение разбивается на блоки длиной X байтов и каждый блок ксорится с предыдущим зашифрованным блоком. Затем результат шифруется. Что очень важно, шифрование выполняется блоками фиксированного размера.
Чтобы гарантировать точное размещение открытого текста в одном или нескольких блоках, часто используется дополнение (padding). Это дополнение может быть выполнено несколькими способами (самый распространенный — PKCS7). В PKCS7 дополнение будет состоять из одного и того же числа: количества недостающих байтов.
Например, если в открытом тексте отсутствуют два байта, то заполнение будет:
1 |
<wbr>x02<wbr>x02 |
Суть атаки заключается в том, что мы, манипулируя данными и получая информацию о верности дополнения, можем вскрыть весь исходный текст.
Атака Padding oracle с помощью скрипта PadBuster
При анализе сайта уязвимой машины Overflow HTB мое внимание привлекла странная последовательность в cookie — auth.

Я решил провести различные манипуляции с этой строкой: декодирование, дополнение и урезание, частичное изменение. В результате этого заметил код ответа 302 и редирект на страницу logot.php с параметром err=1.


Открыв данную страницу в браузере, обнаружил сообщение «Invalid padding» — это говорит о том, что можно использовать атаку Padding oracle.

Для работы будем использовать скрипт PadBuster. Я перерегистрировал пользователя, получил куки и указал их этому чудо‑скрипту для работы.
1 |
padbuster http://overflow.htb/home/index.php Ow%2F5zdCFrSoAl%2FO6Mo3gaD8Y79JztfUX 8 -cookies auth=Ow%2F5zdCFrSoAl%2FO6Mo3gaD8Y79JztfUX |
Нас просят выбрать вариант ответа, уведомляющий об ошибке дополнения. Рекомендован третий вариант, его и указываем.

В итоге мы получаем открытый текст, зашифрованный в cookie: user=ralf. Теперь мы понимаем формат данных для аутентификации. Сервер расшифровывает куки и определяет текущего пользователя.
Но эта атака помогает не только вскрыть зашифрованные данные, но и заново зашифровать свои! Так мы можем указать PadBuster, что нужно зашифровать подобную строку для пользователя Admin.
1 |
padbuster http://overflow.htb/home/index.php Ow%2F5zdCFrSoAl%2FO6Mo3gaD8Y79JztfUX 8 -cookies auth=Ow%2F5zdCFrSoAl%2FO6Mo3gaD8Y79JztfUX -plaintext "user=Admin" |
Спустя некоторое время мы получим куки, применив которые подключимся от имени администратора.
На сайте нам становится доступна административная панель, с которой мы можем получить доступ к CMS Made Simple и найденным ранее логам.

Так как никаких учетных данных у нас нет, нужно проверить существующие эксплоиты, а для этого узнать версию продукта. Исходники Made Simple открыты, и можно подсмотреть путь к файлу с описанием обновлений:
1 |
/doc/CHANGELOG.txt |
В этом файле последней упоминается версия 2.2.8. Утилита searchsploit для поиска эксплоитов в базе Exploit-DB помогает найти PoC эксплуатации SQL Injection для версии меньше 2.2.10.
1 2 |
searchsploit 'CMS made simple' searchsploit -p php/webapps/46635.py |
Но проэксплуатировать уязвимость не выходит, поэтому перейдем к логам.

В самих логах ничего полезного не находим. Однако если посмотреть на запрос в Burp, то сам способ запроса привлекает внимание.

Страница logs.php принимает параметр name.
На этом все. Теперь вы знаете, как использовать PadBuster для реализации атаки Padding oracle.
Полезные ссылки: