![]() |
В настоящее время PHP — самый популярный язык для создания веб-приложений и сайтов в том числе. Конечно, существует много сайтов написанных на Perl, pythoon; крупных сайтов использующих JSP, C++ и т. д.
Основные уязвимости, взломы направлены именно на PHP-интерператор и на интерпретируемые скрипты в частности. Большинство найденных уязвимостей направленно на интерпретирование скрипта средой |
Константы, объявленные в ядре. Плюс данных констант в том, что не следует использовать кавычки при их использовании. Пример от Expl0ited: PHP код:
[PHP] PHP: [COLOR="#000000"][COLOR="#007700"] fopen - Открыть файл Функции изменения ресурсов, работают не только с файлами. Для каждой заблокированной функции можно найти замену среди других fputs, fwrite - Бинарно-безопасная запись в файл fgetc - Считывает символ из файла fgetcsv - Читает строку из файла и производит разбор данных CSV fgets - Читает строку из файла fgetss - Прочитать строку из файла и отбросить HTML-теги fpassthru - Выводит все оставшиеся данные из файлового указателя fputcsv - Форматирует строку в виде CSV и записывает её в файловый указатель fscanf - Обрабатывает данные из файла в соответствии с форматом fseek - Устанавливает смещение в файловом указателе ftruncate - Урезает файл до указанной длинны readlink - Возвращает файл, на который указывает символическая ссылка tempnam - Создаёт файл с уникальным именем tmpfile - Создаёт временный файл parse_ini_file - Чтение и парсинг ini файлы copy, move_uploaded_file, file_get_contents, file_put_contents, file, readfile - Без коментариев Bzip2 - http://www.php.net/manual/ru/book.bzip2.php Zlib - http://www.php.net/manual/ru/book.zlib.php highlight_file, show_source - выделение синтаксиса файла, возможно использование URL(allow_url_include). readgzfile - выводит gz-файл. Функция так же может читать обычные файлы, и использоваться как readfile. PHP код:
fopen, file_get_contents, file - Без комментариев. Функции работы с базами данных - при некоторых обстоятельствах будет удобно подключиться к удалённой базе данных и передать необходимую информацию в обе стороны. Думаю код данного раздела будет понятен всем, расписывать его не имеет смысла так как примеры находятся во многих источниках. fsockopen, pfsockopen, stream_socket_client — получение данных. dns_get_record - получение DNS записей(UDP). Расширение sockets - socket_create и т. п. функции Cyrus IMAP - http://www.php.net/manual/ru/book.cyrus.php - Работа с IMAP сервером. get_meta_tags — Чтение мета-тегов HTML файла, путь к которому передан в первом аргументе, и return в виде ассоциативно массива. cURL: PHP код:
4. Выполнение system. 5-ый аргумент функции mail. До некоторых версий php возможно выполнение произвольных команд system, exec, passthru, shell_exec(``) - Без комментариев. proc_open и т.п. - Выполняет команду и открывает файловый указатель для ввода/вывода. popen и т. п. - Открывает файловый указатель процесса dl - загружает РНР-расширение на этапе прогона(enable_dl). Классы, объекты Список объявленных классов — get_declared_classes(). Ini:disable_classes — Список запрещённых классов. 0. DOMDocument, XMLReader, XMLWriter, SimpleXMLElement - Работа с XML, HTML. Возможность чтения и записи файлов данного формата. PHP код:
Код:
Code:SOAP (от англ. Simple Object Access Protocol — простой протокол доступа к объектам) — протокол обмена структурированными сообщениями в распределённой вычислительной среде. Первоначально SOAP предназначался в основном для реализации удалённого вызова процедур (RPC). Сейчас протокол используется для обмена произвольными сообщениями в формате XML, а не только для вызова процедур. Официальная спецификация последней версии 1.2 протокола никак не расшифровывает название SOAP. SOAP является расширением протокола XML-RPC. SOAP может использоваться с любым протоколом прикладного уровня: SMTP, FTP, HTTP, HTTPS и др. Однако его взаимодействие с каждым из этих протоколов имеет свои особенности, которые должны быть определены отдельно. Чаще всего SOAP используется поверх HTTP. http://ru.wikipedia.org/wiki/SOAP http://php.su/articles/?cat=pear&page=004&adminmode=true WSDL (англ. Web Services Description Language) — язык описания веб-сервисов и доступа к ним, основанный на языке XML. http://ru.wikipedia.org/wiki/WSDL Текущая PHP реализация не имеет зависимости allow_url_(*). Стандартная работа с SOAP разделена на два блока - клиентскую и серверную. Многие думают что по стандартной схеме клиент - взламываемый ресурс, возможная дописка в CMS, но не всегда это так. Серверную часть тоже можно разместить на сайте, в различных кодах CMS и не занимающийся длительное время в этой области человек просто не разберёт, что делает данный код. Данный протокол и методы его реализации пригодные для нас, и для нестандартных действий можно ещё расписывать страниц на 30, и то не рассказав много. Это сильно выходит за рамки этого текста, тем более что ниже как раз будет основное содержание статьи. Стандартная библиотека PHP (англ. Standard PHP Library, SPL) — коллекция классов и интерфейсов для решения стандартных проблем в PHP. Библиотека была введена в PHP 5 и доступна по умолчанию, начиная с PHP 5. Основное содержание библиотеки — классы-итераторы, решающие задачи итерации по каталогу, массиву, дереву XML. SPL добавляет в PHP новые возможности ООП для работы с :
http://www.php.net/manual/ru/book.spl.php И т. д. ArrayObject - Использование объектов в качестве массивов и работа с ними. [СODE] ArrayObject implements IteratorAggregate , Traversable , ArrayAccess , Serializable , Countable { /* Константы */ const integer STD_PROP_LIST = 1 ; const integer ARRAY_AS_PROPS = 2 ; /* Методы */ __construct ([ mixed $input [, int $flags [, string $iterator_class ]]] ) .. void uasort ( callback $cmp_function ) void uksort ( callback $cmp_function ) public void unserialize ( string $serialized ) } [/СODE] Предпоследние методы принимают Callback function, что так же делает их доступными для выполнения кода. Пример: PHP код:
|
Пример с is_numeric Как то недавно объяснял одному хорошему амину смысл заключения уязвимости. Он не поверил, пока он не попросил залить шелл. В теме приведён упрощённый пример.PHP код:
Далее поле, в которое MySQL записало знаение, извлечённое из HEX дальше используеться в запросе SELECT opros FROM `vote` GROUP BY `opros`, данные из которого используются далее - SELECT count(*) FROM `vote` WHERE opros = $opros, где $opros - это значение извлечённое из HEX где мы и сможем реализовать SQL-inj. Php Multipleupload Overwrite - Перевод PHP - Загрузка файлов: PHP код:
PHP код:
PHP код:
PHP код:
PHP код:
php-5.3.5\main\rfc1867.c: PHP код:
[/PHP] if (is_arr_upload) { snprintf(lbuf, llen, "%s[type][%s]", abuf, array_index); } else { snprintf(lbuf, llen, "%s[type]", param); } register_http_post_files_variable(lbuf, cd, http_post_files, 0 TSRMLS_CC); [/PHP] Исходя из данного кода, когда мы отправляем эту форму: PHP код:
PHP код:
Таким образом мы можем подменить значение нужных нам переменных и совершить ействия с произвольными файлами. Но это только без проверки загрузки файла и использования move_uploaded_file. PHP код:
PHP код:
PHP код:
Для того, что бы исправить данную уязвимость PHP должен отсеивать файлы, заканчивающиеся на [ и т. д. Эту уязвимость следует ещё доработать для последующего использования. Это будет произведено за рамками этой части. Исходный текст: https://students.mimuw.edu.pl/~ai292615/php_multipleupload_overwrite.pdf Данная уязвимость исправлена в PHP 5.3.7: Возможность подстановки части файлового пути из-за некорректного очищения в функции rfc1867_post_handler имен файлов, передаваемых через multipart/form-data POST-запросы. Атакующий может изменить заданный логикой приложения абсолютный путь и создать или переписать произвольные файлы (CVE-2011-2202); Ещё одна уязвимость того автора — HEAD. - https://students.mimuw.edu.pl/~ai292615/php_head_trick.pdf Так как в этой части статьи мы рассматриваем не только авторские материалы, но и материалы других пользователей нам не помешает познакомиться(Для тех кто ещё не познакомился) с неравно-опубликованными паблик уязвимостей. Перевод темы: https://rdot.org/forum/showthread.php?t=1330 |
PHP код:
|
уж лучше так
PHP код:
p.s. файлы можно читать через курл $ch = curl_init('file://example.txt'); |
Цитата:
Цитата:
В cURL и libcURL найдена уязвимость связанная с особенностью обработки редиректов через заголовок "Location:" и позволяет при обращении к внешнему ресурсу перенаправить запрос на URL начинающийся с "file://" или "scp://", инициировав открытие заданного локального файла. Для успешного проведения атаки в конфигурации должен быть активен режим автоматического следования редиректам. Проблема устранена в релизе 7.19.4. |
Цитата:
а если еще учесть, что mysqli будет в новых версия по деволту и использовать mysql_query уже не получится |
Цитата:
подробнее |
Спущено, может надо будет кому-то обратиться.
|
| Время: 02:26 |