@GrigoriyD

Как могли использовать уязвимость функции copy() в PHP?

Подскажите пожалуйста какая строка может быть передана в $_POST['path'] для загрузки вредоносного файла ( из вне ) на сервер? Может ли путь /var/www/dir_1/ быть как-то экранирован ?

$path = "/var/www/dir_1/" . $_POST['path'];
copy($path, $newPath);


Считалось что так как $path уже содержит часть пути /var/www/dir_1/ , то копируемый файл обязательно будет браться локально с сервера. Но это было ошибочное суждение, был загружен PHP файл, которого точно не было до этого нигде на сервере.
  • Вопрос задан
  • 517 просмотров
Пригласить эксперта
Ответы на вопрос 4
revenger
@revenger
49.5
Так вот просто принимать $_POST не очень хорошо.
Я бы разрешил пропускать только a-z0-9, к примеру.
Не проверял, но подозреваю, что передача конструкции типа ../../../ приведет к переходу на каталог выше.
Ответ написан
Комментировать
sergiks
@sergiks Куратор тега PHP
♬♬
Предположение не проверял.
Может, парсер параметров copy() как-то особенно разбирает строки, и там символ form_feed или carriage_return позволяет перезаписать/игнорировать прилепленное в начале "/var/www/dir_1/"?

Тогда переданный в него "\rhttp://site.com/bad_script.php" закачивает этот файл на сервер?
Ответ написан
Если перемененная $newPath сохраняется как не .php файл, то что мешало в $_POST['path'] засунуть тот же "../site.com/config.php" или любой другой файл, в котором есть подключение к чему либо? (админка, бд)
После подобных манипуляций у злоумышленников не возникнет трудности залить любой другой файл, но уже используя админ панель.
Ответ написан
Комментировать
@alekssamos
Программист любитель
есть функция basename, оборачивай POST в неё.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы