
Это эксплойт для обхода фильтра, который приводит к произвольной загрузке файлов и удаленному выполнению кода в class.upload.php <= 2.0.4
Это эксплойт, обходящий фильтр, что приводит к произвольной загрузке файлов и удаленному выполнению кода. Скрипт class.upload.php фильтрует «опасные файлы и содержимое» и переименовывает их в расширение txt. Он также выполняет различные преобразования загруженного изображения, которые обычно уничтожают любую внедренную нагрузку, даже если фильтр расширений файлов удалось обойти.
Фильтр расширений файлов использует черный список, поэтому каждый раз, когда появляется новое расширение (в данном случае pht) или какое-то было пропущено, можно загрузить PHP-файл. Однако содержимое должно оставаться корректным изображением и все равно будет проходить через функции imagecreatefromjpeg и подобные. Для этой цели я написал скрипт inject.php, который по сути перебирает различные изображения, пока не найдет такое, в котором нагрузка не будет уничтожена обработкой в class.upload.php. Это фактически дает нам произвольную загрузку файлов и очень скрытое выполнение кода, так как изображение остается валидным и будет отображаться как таковое на страницах, куда оно загружено.
Скрипт inject.php скоро будет переписан, чтобы стать более общим инструментом для атак такого типа, но пока он просто включен в виде отдельных скриптов в этот выпуск CVE.
Скрипт upload.php является примером кода из github verot.net. Я решил, что лучше всего продемонстрировать эту уязвимость на их собственном примере кода.
user@ayu:/var/www/html# php inject.php
-=Imagejpeg injector 1.8=-
[+] 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.pht
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