Обзор общих уязвимостей в PHP-коде веб-безопасности

PHP Безопасность SQL XSS

Эта статья от автораТан ЦинсонгЗамечательная публикация «Общие уязвимости в обзоре PHP-кода веб-безопасности» на GitChat, « читать оригинал«Посмотрите, какое общение люди установили с автором.

предисловие

Если рабочий хочет хорошо работать, он должен сначала заточить свои инструменты.我们做代码审计之前选好工具也是十分必要的。下面我给大家介绍两款代码审计中比较好用的工具。

Введение в инструменты аудита

Система аудита кода PHP — RIPS

Функции

RIPS — это программное обеспечение, разработанное на основе PHP для аудита безопасности кода PHP.

Кроме того, это также программное обеспечение с открытым исходным кодом, разработанное иностранным исследователем безопасности Йоханнесом Дассе, программа имеет размер всего 450 КБ, а последняя версия, которую можно загрузить, — 0,55.

Прежде чем писать этот текст, автор намеренно прочитал его исходный код, его самая большая изюминка в том, что он вызывает встроенный в PHP интерфейс парсера.token_get_all ,

Кроме того, Parser используется для анализа синтаксиса и реализовано отслеживание переменных и функций в файлах.Результаты сканирования очень наглядно показывают процесс формирования уязвимостей и передачи переменных, а процент ложных срабатываний очень низок.

RIPS может обнаруживать различные уязвимости, такие как внедрение SQL, межсайтовый XSS, включение файлов, выполнение кода и чтение файлов, а также поддерживает различные стили выделения кода. Интересно, что он также поддерживает автоматическую генерацию эксплойтов.

способ установки

Адрес загрузки: https://jaist.dl.sourceforge.net/project/rips-scanner/rips-0.55.zip.

Разархивируйте в любой рабочий каталог PHP

Введите соответствующий URL-адрес в браузере, вы можете видеть, что на следующем рисунке есть путь, введите путь к файлу проекта, который вы хотите проанализировать, и нажмите «Сканировать».

Скриншот интерфейса

система аудита исходного кода Seay

Функции

Это некоторые особенности первой версии Seay, сейчас последняя версия 2.1.

  1. Глупый автоматический аудит.

  2. Поддержка отладки кода php.

  3. Функция/переменное расположение.

  4. Формировать аудиторские отчеты.

  5. Пользовательские правила аудита.

  6. управление базой данных mysql.

  7. Аудит в один клик на утечку конфиденциальной информации из «черного ящика».

  8. Поддержка регулярной отладки соответствия.

  9. Отредактируйте файл сохранения.

  10. Отправка POST-пакетов.

способ установки

Для запуска среды установки требуется версия .NET 2.0 или выше.После загрузки установочного пакета нажмите «Далее», чтобы установить его, что очень просто.

Адрес загрузки установочного пакета: http://enkj.jb51.net:81/201408/tools/Seayydmsjxt(jb51.net).rar

Скриншот рабочего интерфейса

2. Практика аудита кода

После запуска двух только что установленных инструментов аудита мы можем обнаружить, что будет проанализировано множество скрытых уязвимостей.Давайте рассмотрим причины SQL-инъекций, XSS и CSRF и проанализируем, как проводить аудит кода по причинам.

SQL-инъекция

Уязвимости SQL-инъекций всегда составляли очень большую долю уязвимостей веб-систем.Давайте рассмотрим несколько способов SQL-инъекций.

Классификация уязвимостей SQL-инъекций

С точки зрения использования его можно разделить на два типа: обычное внедрение и широкое внедрение байтов.

Обычный метод внедрения, обычно без какой-либо фильтрации, напрямую сохраняет параметры в операторе SQL, как показано на следующем рисунке.

Очень легко обнаружить, что сейчас разработчики обычно используют некоторую фильтрацию, например, с помощью addlashes(), но фильтрацию не всегда легко использовать.

Метод внедрения кода

Внедрение широких байтов, что здесь происходит?

Программисты, как правило, не пишут аналогичный код выше в реальной среде, который обычно фильтруется путем фильтрации функций, таких как Adddslashes (). Тем не менее, есть предложение под названием, дорога высока, магия высока, мы смотрим, как белые ломаются шляпа. При подключении MySQL с PHP при настройке символа_Set_Client = GBK вызывается уязвимость кодирования. Мы знаем, что Addslashes () преобразует параметры 1 'до 1 \', и мы включаемся в 1 缞 'при отправке параметра 1% DF', то мы ввели 1% DF 'или 1% 23, будут преобразованы 1 缞' или 1 = 1 # '.

Проще говоря, %df' будет экранирован функцией фильтра как %df\', %df\' = %df%5c%27 При использовании кодировки gbk будет считаться, что %df%5c является широким байтом%df% 5c %27=瞞', это вызовет впрыск.

Так как же защититься от этого широкого байта? Я надеюсь, что все разрабатывают веб-сайты в максимально возможной степени с использованием формата кодировки UTF 8. Если преобразование вызывает затруднения, самый безопасный способ - использовать предварительную обработку PDO. Майнинг такого рода уязвимостей в основном предназначен для проверки того, используется ли gbk, поискаguanjianc character_set_client=gbk 和mysql_set_chatset('gbk') .

Вторичная инъекция urldecode, которая также является уязвимостью, вызванной неправильным использованием urldecode.

Мы только что узнали, что функция addlashes() может предотвратить инъекцию. Она экранирует ('), (") и () с обратной косой чертой.

Затем мы предполагаем, что мы включили GPC, и мы отправили параметр, /test.php?uid=1%2527, так как в параметре нет одинарной кавычки, первая расшифровка станет uid=1%27,%25 расшифровано то есть %,

В настоящее время, если программа использует urldecode для декодирования, она будет декодировать %27 в одинарные кавычки ('), и окончательный результат будет uid=1'.

Теперь мы знаем, что оригинал вызван urldecode, мы можем найти вторичную уязвимость URL, выполнив поиск urldecode и rawurldecode в редакторе.

Существует три типа уязвимостей:

  1. может отображаться

    Злоумышленник может напрямую получить нужный контент в текущем контенте интерфейса.

  2. сообщить об ошибке

    Результаты, возвращенные запросом к базе данных, не отображаются на странице, но приложение печатает сообщение об ошибке базы данных на странице.

    Таким образом, злоумышленник может создать оператор ошибки базы данных и получить желаемое содержимое из сообщения об ошибке, поэтому я предлагаю настроить класс базы данных так, чтобы сообщение об ошибке не выдавалось.

  3. жалюзи

    Результаты запросов к базе данных нельзя получить с интуитивно понятных страниц. Злоумышленники могут получить желаемое, используя логику базы данных или задержав выполнение библиотеки базы данных.

Методы извлечения уязвимостей SQL-инъекций

Ввиду вышеперечисленных методов эксплуатации уязвимостей, обобщены следующие методы майнинга:

  1. Место получения параметра, проверьте, используются ли параметры _POST и $_COOKIE напрямую без фильтрации.

  2. Проверка операторов SQL, поиск по ключевым словамselect update insert В ключевой точке оператора SQL проверьте, можно ли управлять параметрами оператора SQL.

  3. Внедрение широких байтов, если на сайте используется кодировка GBK, поискguanjianc character_set_client=gbk а такжеmysql_set_chatset('gbk') Просто сделай это.

  4. Внедрение вторичного urldecode, в некоторых случаях gpc может найти уязвимости вторичного url, выполнив поиск urldecode и rawurldecode в редакторе.

Методы предотвращения уязвимостей SQL-инъекций

Хотя существует множество уязвимостей SQL-инъекций, их довольно просто предотвратить.Вот несколько функций и классов фильтрации:

  • волшебные кавычки gpc/rutime

  • Фильтровать функции и классы

    • addslashes

    • mysql_real_escape_string

    • intval

  • Предварительная обработка PDO

кросс-сайт XSS

предисловие

XSS, также известный как CSS (Cross Site Script), представляет собой атаку с использованием межсайтовых сценариев. Это относится к злоумышленнику, вставляющему вредоносный HTML-код на веб-страницу.Когда пользователь просматривает страницу, HTML-код, встроенный в сеть, будет выполнен для достижения специальной вредоносной цели.

XSS — это пассивная атака, потому что она пассивна и не проста в использовании, поэтому многие люди часто называют ее вредоносной. В эпоху WEB2.0 упор делается на взаимодействие, что значительно увеличивает возможности пользователей по вводу информации.В этом случае, как разработчики, мы должны быть бдительными при разработке.

классификация xss-уязвимостей

  1. Светоотражающий тип, менее вредный, общий

    Принцип рефлексивного XSS заключается в отправке URL-адреса с параметрами кода вредоносного скрипта другим.Когда URL-адрес открыт, определенные параметры кода будут проанализированы и выполнены с помощью HTML, чтобы можно было получить COOIKE пользователя, а затем логин можно украсть. Например, хакер А создает URL-адрес для смены пароля и меняет пароль на 123, но пароль может быть изменен только стороной B, и когда B щелкает URL-адрес, созданный A, когда он вошел в систему, он будет напрямую изменить пароль, не зная его.

    Характеристики следующие: непостоянный, он должен быть вызван переходом пользователя по ссылке с определенными параметрами.

  2. Тип хранения, большой вред, длительное время воздействия

    Принцип хранимого XSS, при условии, что вы открываете обычную страницу статьи, внизу есть функция комментариев. В это время вы прокомментировали и ввели код JavaScript в текстовое поле. После отправки вы обновили страницу и обнаружили, что код, который вы только что отправили, был возвращен без изменений и выполнен.

    В это время, как вы думаете, я собираюсь написать фрагмент кода JavaScript, чтобы получить информацию о файлах cookie, а затем отправить ее на свой сервер через ajax. После создания кода вы отправляете ссылку другим друзьям или администратору веб-сайта, они открывают код JavaScript и выполняют его, ваш сервер получает идентификатор сеанса, и вы можете получить его права пользователя.

3. тип дом, особый вид

тип домаXSSЭто потому, что JavaScript выполняет операции dom, в результате чегоXSSУязвимость, как показано ниже. Можно видеть, что хотя он был экранирован html, этот код возвращается в html и обрабатывается JavaScript как элемент dom. что когда я печатаю?name=<img src=1 onerror=alert(1)> Есть еще XSS-уязвимости.

метод майнинга уязвимостей xss

По некоторым из вышеперечисленных характеристик можно обобщить и проанализировать несколько методов добычи:

  1. Место получения данных, проверьте экранирование _POST и $_COOKIE.

  2. Обычные рефлексивные поиски XSS находят много похожих местоположений.

  3. Тип хранения имеет больше комментариев в статьях.

Методы предотвращения XSS-уязвимостей

  1. Есть два способа экранирования html сущностей: на входе и на выходе, я предлагаю экранировать на входе, чтобы не забыть экранировать при выносе позиции выхода.Если на входе уже экранировали, позицию выхода не нужно чтобы снова сбежать.

  2. В текстовом редакторе часто используются атрибуты некоторых элементов, например, onerror на рисунке выше, тогда нам также необходимо установить черный и белый список для атрибутов элемента.

  3. Даже если есть уязвимость xss, httpOnly может значительно уменьшить вред.

CSRF-уязвимость

Введение в CSRF-уязвимости

CSRF (Подделка межсайтовых запросов) Подделка межсайтовых запросов, обычно обозначаемая аббревиатурой CSRF или XSRF, представляет собой злонамеренное использование веб-сайтов. Звучит как межсайтовый скриптинг (XSS), но он сильно отличается от XSS, который использует доверенных пользователей на сайте.

CSRF, с другой стороны, использует доверенные веб-сайты, маскируя запросы от доверенных пользователей. По сравнению с атаками XSS, атаки CSRF, как правило, менее распространены (и поэтому ресурсов для защиты от них довольно мало), и их трудно предотвратить, поэтому они считаются более опасными, чем XSS.

csrf в основном используется для несанкционированных операций, и на csrf не обращали внимания, поэтому многие программы сейчас не имеют соответствующих профилактических мер.

случай CSRF

Давайте посмотрим на следующий фрагмент кода: при доступе к этой форме пользователь выходит из системы. Предположим, есть форма перевода, вам нужно только заполнить имя пользователя и сумму другой стороны.Если я заранее создам URL-адрес и отправлю его жертве, деньги будут переведены после нажатия.

или я помещаю этот URL на свою веб-страницу через<img src="我构造的URL" , когда другие люди открывают мой сайт, их обманывают.

Метод добычи уязвимостей CSRF

Благодаря приведенному выше описанию мы знаем, что уязвимость оригинала, затем мы можем изучить процесс аудита в следующей форме не имеет суждения.

  1. Есть ли токен проверки.

  2. Есть ли код подтверждения изображения.

  3. Есть ли реф информация.

Если ни одно из трех суждений не существует, то существует уязвимость CSRF, которая не ограничивается GET-запросами, но также и POST-запросами.

Методы предотвращения уязвимостей CSRF

  1. Код проверки изображения, все должны это знать, но пользовательский опыт не очень хорош, мы можем увидеть некоторые методы обработки ниже.

  2. проверка токена.

    Метод проверки токена следующий: каждый раз при доступе к странице формы генерируется непредсказуемый токен и сохраняется в сеансе сервера, а другой размещается на странице, при отправке формы нужно взять этот токен с вам, и сначала проверьте его, когда вы получите форму. Является ли токен законным.

  3. Проверка информации о реферере

    В большинстве случаев браузер получает доступ к адресу, а заголовок заголовка содержит информацию Referer, в которой хранится информация о том, откуда был отправлен запрос.

    Если Referer включен в HTTP-заголовок, мы можем различить, инициирован ли запрос в одном и том же домене или между сайтами, поэтому мы также можем защититься от CSRF-атак, определив, инициирован ли рассматриваемый запрос в одном и том же домене.

    Есть несколько вещей, на которые следует обратить внимание при проверке реферера.

    Если условие оценки состоит в том, содержит ли Referer символы «xxx.com», злоумышленник также может обойти возможность создания папки xxx.com в своем каталоге. Если наиболее подходящее суждение состоит в том, чтобы напрямую судить, равно ли оно текущему доменному имени.

Три, обычные методы предотвращения уязвимостей

расширение безопасности taint PHP

Функции

Taint можно использовать для обнаружения скрытого XSS-кода, SQL-инъекций, Shell-инъекций и других уязвимостей, и эти уязвимости будет очень сложно устранить с помощью инструментов статического анализа.Давайте посмотрим на следующую картинку:

способ установки

  • Скачать taint: http://pecl.php.net/package/taint

  • настроить

/usr/local/php/bin/phpize ./configure --with-php-config=/usr/local/php/bin/php-config make && make install

  • Для получения более подробной информации см.: http://www.cnblogs.com/linzhenjie/p/5485474.html.

Сценарии применения

Команде разработчиков трудно требовать, чтобы все были в полной безопасности, но особенно подходит установка taint в среде разработки.Как только вы видите предупреждающее сообщение, вы обычно возвращаетесь и меняете его.

ngx_lua_waf

Функции

  1. Предотвратите инъекции sql, локальные включения, частичное переполнение, нечеткие тесты, xss, SSRF и другие веб-атаки.

  2. Предотвратите утечку файлов, например, svn/backup.

  3. Предотвратите атаки с помощью инструментов стресс-тестирования, таких как ApacheBench.

  4. Блокировать распространенные сканирующие хакерские инструменты, сканеры.

  5. Блокировать аномальные сетевые запросы.

  6. Заблокируйте разрешение на выполнение php для каталога класса вложения изображения.

  7. Запретить загрузку веб-оболочки.

способ установки

  • Зависимости установки:luajit ,ngx_devel_kit ,nginx_lua_module

  • Установитьnginx ,ngx_lua_waf

  • существуетnginx.conf http добавить конфигурацию в

  • Подробная документация по установке

визуализация

Суммировать

Содержание этого совместного аудита кода и работы с обычными уязвимостями включает в себя три типа, но есть и другие, которые невозможно охватить сразу. В дополнение к проверке параметров только что, тело кода также имеет логический обзор уязвимостей.В следующий раз, если будет время, я сделаю еще один аудит логических уязвимостей.