22.12.2015

Практический веб-хакинг. Часть 2 - Выполнение произвольного кода через функцию Eval()

image

В первой части мы рассматривали обход XSS-фильтров на стороне клиента. Во второй (Уровень 2) будет рассказано о том, как выполнять произвольный код через функцию eval() языка PHP.

Автор: 1N3(@CrowdShield)

В первой части мы рассматривали обход XSS-фильтров на стороне клиента. Во второй (Уровень 2) будет рассказано о том, как выполнять произвольный код через функцию eval() языка PHP.

Как работает функция eval()

По функционалу калькулятора можно догадаться, что в серверной части используется схожий код, вычисляющий результат:

<?php eval(\"$num1\" \"$operand\" \"$num2\"); ?>

Рисунок 1: Внешний вид веб-калькулятора

Исследование поля операнда

Поскольку весьма вероятно, что на стороне сервера есть защита от ввода нецелых чисел в переменные $num1 и $num2, мы можем попробовать отредактировать поле операнда для запуска инжектируемого PHP-кода. В браузере наводим мышкой на нужный элемент, щелкаем правой кнопкой мыши и выбираем "Inspect Element".

Рисунок 2: Исследование элемента поля операнда

Внедрение PHP-кода

Чтобы внедрить PHP-код, мы будем редактировать поле операнда, как показано ниже. Подобный способ позволяет избежать ошибок при выполнении функции.

<option value=" + 1; phpinfo(); 1 + "> + 1; phpinfo(); 1 + </option>

Рисунок 3: Внедрение PHP-кода в поле операнда

Результат

После нажатия на Submit вы заметите, что инжектированный PHP-код выполнился, и отобразились результаты выполнения. Чтобы избежать подобного рода атак, следует отказаться от использования функции eval(). Кроме того, все данные, вводимые пользователем, должны обрабатываться самым тщательным образом.

Рисунок 4: Внедрение кода завершилось успешно

Видео демонстрация внедрения PHP-кода: