Научная статья на тему 'ЗАЩИТА ВЕБ-ПРИЛОЖЕНИЙ ОТ УЯЗВИМОСТИ PHP CODE INJECTION'

ЗАЩИТА ВЕБ-ПРИЛОЖЕНИЙ ОТ УЯЗВИМОСТИ PHP CODE INJECTION Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
303
36
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
ИНФОРМАЦИОННАЯ БЕЗОПАСНОСТЬ / ВЕБ-СТРАНИЦЫ / ВЕБУЯЗВИМОСТЬ / ТЕСТИРОВАНИЕ НА ПРОНИКНОВЕНИЕ

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Беликов Георгий Витальевич, Крылов Илья Дмитриевич, Селищев Валерий Анатольевич

Рассматривается уязвимость веб-уязвимости PHP Code Injection как наиболее опасная угроза современным вэб-сервисам. Изложены основные методы защиты.

i Надоели баннеры? Вы всегда можете отключить рекламу.
iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

PROTECTING WEB APPLICATIONS FROM PHP CODE INJECTION VULNERABILITY

The vulnerability of the PHP Code Injection web vulnerability is considered as the most dangerous threat to modern web services. The main methods of protection are described.

Текст научной работы на тему «ЗАЩИТА ВЕБ-ПРИЛОЖЕНИЙ ОТ УЯЗВИМОСТИ PHP CODE INJECTION»

pact not only on the service life of the product, but also subsequently on the life and health of people and material damage. Therefore, a series of computer simulations was carried out, the purpose of which was to study the effect of cracks in the bridge piers on various parameters.

Key words: research, quality, defect, bridge, support, load, crack.

Shestova Kristina Sergeevna, undergraduate, kristina_shestova@,mail.ru, Russia, Tula, Tula State University

УДК 004.492.3

DOI: 10.24412/2071-6168-2022-5-122-129

ЗАЩИТА ВЕБ-ПРИЛОЖЕНИЙ ОТ УЯЗВИМОСТИ PHP CODE INJECTION

Г.В. Беликов, И.Д. Крылов, В.А. Селищев

Рассматривается уязвимость веб-уязвимости PHP Code Injection как наиболее опасная угроза современным вэб-сервисам. Изложены основные методы защиты.

Ключевые слова: информационная безопасность, веб-страницы, веб-уязвимость, тестирование на проникновение.

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

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

PHP - язык с динамической типизацией, тип данных в нем определяется не при объявлении переменной, а при присваивании ей значения. Данный язык исполняется на сервере, написанные на PHP программы получают данные от пользователей сайта, обрабатывают их, взаимодействуют с базами данных, возвращают на сайт обработанную информацию [11.

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

Принцип действия атаки. PHP Code Injection - уязвимость ввода вредоносного кода на языке PHP, который исполняется на стороне сервера. Данная уязвимость возникает, когда приложение включает управляемые пользователем данные строкой URL, которая динамически оценивается интерпретатором кода. Если пользовательские данные строго не проверены, злоумышленник может использовать специально созданный ввод для изменения кода, который должен быть выполнен и ввести произвольный код, исполняемый сервером.

PHP-инъекция становится возможной, если входные параметры принимаются и используются без проверки [11.

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

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

С помощью функции «?message» можно проверить страницу на возможность ответа (рис. 1). В первую очередь главное определить возможность проведения атак и сохранения самостоятельно написанных функций на языке PHP.

С А Незащнцено 192.168.1 JS/bWAf'P/phpi.php'mBsage;Hdlo_world|

an ex+remely buggy web app !

Change Po&f+íot¿ Create Lí^er Set Sec*jrtty Level £e<?e+

/ PHP Code injection /

This is just a test page, reflecting back your message...

Helh_wortd

Рис. 1. Исполнение функции «?message»

Так мы проверили возможность проведения данной атаки на веб-странице. Использование функции «?message» является первым шагом в эксплуатации инъекций на языке PHP.

Существует несколько «опасных», чаще используемых функций для данного вида атак:

- eval() - принимает к исполнению строку PHP-кода [2].

- preg replace() (с модификатором «e») - означает замещающую строку, которая после подстановки будет считаться PHP-кодом. И если в этой строке имеются ненадёжные входные данные, то они смогут внедрить исполняемый PHP-код.

- require_once() - Позволяет включать удаленные файлы.

- include_once() - включает и выполняет указанный файл во время выполнения

скрипта.

- include() - Включает и выполняет указанный файл, в заранее написанной директории.

- require() - Однократное включение определенного файла.

- create_function() - Создаёт анонимную функцию из переданных параметров и возвращает её уникальное имя, функция внутри себя делает вызов функции eval().

Демонстрация PHP Code Injection. Для демонстрации уязвимости выберем стенд bwapp (buggy web application). Данный стенд - веб-приложение, находящееся в открытом доступе, свободное для скачивания, был выбран из-за его легкости в обучении специалистов по информационной безопасности. На выбор предоставлено порядка 100 способов атак на веб-приложения, классифицированных «OWASP топ-10», которые можно детально проработать [3].

Для начала работы необходимо ввести в поле «Login» bee, в поле «Password» bug (рис. 2).

Переходим во вкладку с выбором уязвимостей. Используя данный стенд, можно проводить атаки разного уровня "low", "medium", "high". Выберем уровень low, для демонстрации (рис. 2).

Среди предложенных уязвимостей, готовых для эксплуатации выберем «PHP Code Injection» (рис. 3).

После перехода к уязвимости видим, что не появилось поля ввода данных для проведения тестирования уязвимости (рис. 3). Единственный способ, провести атаку, используя строку URL, на которой расположено имя сайта [3].

123

b\N

an extremely buggy web app !

Login Mew Lteer uto rofc* Trar»\g Bíog

/ Login /

Enter your credentials fbeeiiwgj Login

Set the security level

f

MM£

luaini

Eecuifly Audits & Tmrirtj

ssmAAk □

MISSING & EXPLOITED CHILDREN* И

G El

Scan your website for

XSS and

SQL Injection

vulnerabilities

Puc. 2. Стенд bwapp

A Неэащтцвно 192.168.1 JVbWAPP/portal.phi

an extremely bu^gy web app !

CKange Peinaré Create User Sei Security Level Credrte 6*og Logout

/ Por+d /

b'uVAPP, or a buggy web application, is a free and open source ttoibtitatety insecure wob application. H helps security enIhustasis, developers and students to discover and to prevent web vulnorabdilies, b'.VAPP covers all major known web vulnerabilities, inducing all risks from the OWASP Top 10 project? II ts for security-testing and educalional purposes only.

Which bug do you want to hack today? t

if rame injection

LDAP ln|rcitón (Search)

Mail Hejder Injectas i SMTP J

OS Command injection

OS Command Injection - вьм

Servef-swe includes (SSI} injecacn

SQL injection <G€T.'$earcft>

SCH

w'cnm 1NW 14* Г* rJ*

MISSING & EXPLOITED

CHILDREN*

I HtCK I

Puc. 3. Выбор уязвимости

С A He защищено 192.168,1,35/bWAPP/phpi php

an ex+remely buggy web <эрр !

Ownge Powword Creerte User Set Security Level

/ PHP Code injee+ion /

This ts just a test page, reflecting back your message...

Puc. 4. Уязвимость PHP Code Injection

Эксплуатировать уязвимость придется только в строке URL, для этого сначала протестируем ответ с сервера, а после начнем писать функции, которые будут выполнять для нас полезную нагрузку (рис. 4).

Как описано выше, напишем в строке адреса сайта функцию «?message», которая выведет на экран сообщение «Это_научная_статья» (рис. 5): «?message= Это_научная_статья».

< OA Не защищено 192.168.1.35/bWAPP/phpi.php?message=3TOjiay4H аястатья

an ex+remely buggy web ярр !

Buap Chrnje Password Create User Set Security Level

/ PHP Code Injeo-Hon /

This is jusl s lest page, reflecting back your message.., Это_нэучная_статья

Рис. 5. Успешная атака

Мы удостоверились в том, что есть ответ с сервера, поэтому продолжим эксплуатировать уязвимость и дальше.

Выведем на экран версию PHP с подробными параметрами с помощью функции «phpinfoQ» (рис. 6):

192.168.1,3S/bWAPP/pÎipkphp?messoge-phpinfoOl

an extremely buggy web app !

/ PHP Code Injec-Hon /

This is Just a tost page, reflecting back your message...

PHP Verziert 5^.4-2аЬиЫи5~ /

System jnux Oee-twx 2 б 24-)6цепелС ■ r SUP ThuApr 10f 3 23*2 UTC 20&S >664

ЛитИ DJ Г» 27 200920 27 50

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

5 erst' API

ИЛИ* DUWMiy Support ядам

Configuration File ГрЛрМи) Paüi юрлрздркле?

¿НЛО ConfijiuvjBoii File

Рис. 6. Информация о версии PHP

В данном случае мы получили критически важную информацию о вебстранице. Зная версии языков программирования, приложений можно найти для них эксплоиты (скрипты, для эксплуатации конкретной уязвимости), используя которые злоумышленник может с легкостью навредить и использовать ради личной выгоды данные с сервера, на котором находится сайт. Существует база данных эксплоитов «Exploit Database», находящаяся в открытом доступе по адресу https://www.exploit-db.com [4]. Где есть заранее написанный вредоносный код для нашей версии PHP -5.2.4 (рис. 7):

dt EXPLOIT

Database

IS - $wch php 5.2.4

Date г D А V Title Type Platform Author

± ✓ PHP№)MJ2.4/6,04■ MAipieSCH. Inpdkm? WrtlApps PHP JWlV«nMctcftc

2006-07-25 * у PHP Pro Bid 5 2.4 - calegones php'bnierTypc SQL Infection WefaApps PHP Ellip&S Security

200W7.23 2006-07-25 i v PHP Pro Bid 5 2.4 - Vimtodbacfc-phfi' tAitopte SQL inject»»« * v" PHP Pro Bid S 2.4 - 'auctionsearch pfip^adisrc Cross-Sri e Scripting WibApps WefaAppS PHP PHP Ellipse Security Ellipsis security

2007-10-11 ± □ PHP 3^4iemCub»-ioncU»_rwd_fil«- Saft Modt / AnWeJcnctiors В»р»и UeH Mndows slum*

Showing 1 W 5 of 5 «nines (iihered frqm 44,007 toljJ entries)

Puc. 7. Exploit Database

Так как версия PHP - 5.2.4 является устаревшей, то для нее уже написано много скриптов с целью эксплуатации. В каждом обновлении разработчики устраняют проблемы с безопасностью, поэтому чтобы не быть подверженным легким атакам, надо своевременно обновлять версии ПО, с которым вы имеете дело.

Насколько уже понятно, на данном сайте нет ограничений, поэтому можно вводить любые команды и получать на них ответы от сервера. Введем «system('hostname')», чтобы узнать имя целевого хоста (рис. 8).

< С А Не защищено 192.168.1.35/bWAPP/pl^pi4>hp?message=system(Hhostr»ame')

ar\ ex+remely buggy web лрр '

Change Pas-sword Create Lteer Se+ Seeurttу Level

/ PHP Code injection /

This is just a test page, reflecting back your message... bee-box bee-box

Рис. 8. Имя целевого хоста

Далее можем получить обратное соединение с уязвимой веб-страницы. Получение обратного соединения «Reverse Shell», схемы взаимодействия с удаленным компьютером. При её использовании нужно, чтобы атакующий сначала запустил на своей машине сервер, при этом целевая машина будет играть роль клиента, который подключается к этому серверу, после чего атакующий получает доступ к оболочке целевого компьютера. Обратный шелл используется, если удалённый компьютер находится за NAT (имеет только локальный IP адрес), либо если файервол блокирует входящие соединения — большинство файерволов настроены пропускать исходящие соединения.

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

Для этого напишем в строке URL: «system('nc -lvp 4444 -e /bin/bash')». Используя утилиту netcat, позволяющую установить соединение TCP и UDP, принимать оттуда данные и передавать их обратно. С помощью команды дадим доступ к хосту жертвы на 4444 порт.

Заходим в терминал, используем команду «nc -nv 192.168.1.35 4444» для получения доступа к файлам целевой машины (рис. 9). В этой команде: «192.168.1.35 4444» - ip-адрес и порт целевого хоста. «nc -nv» - команда в netcat, для взаимодействия с ip-адресом напрямую.

9 /home/kali

nc 192*168.1*35 4444

(UNKNOWN) [192.168.1.35] 4444 (?) Open

pwd

/var/www/bWAPP

id

uid-33(www-data) gid-33( www-data) groups=33{www-data)

help

GNU bash, version 3.2.33(l)-release (i486-pc-linux-gnu)

These shell commands are defined internally* Type *help" to see this list.

Type help name" to find out more about the function name'.

Use 'info bash' to find out more about the shell in general.

Use 'man -k' or %info" to find out more about commands not in this list*

A star (*) next to a name means that the command is disabled.

J0B_SPEC [6] ({ expression ))

* filename [arguments] :

[ arg ... ] [[ expression ]]

alias [-p] [name[-value] ... ] bg [job_spec ... ]

bind [-IpvsPVS] [-m keymap] [-f fi break [n]

builtin [shell-builtin [arg ... ]] caller [EXPR]

case WORD in [PATTERN D PATTERN], cd [-Li—P] [dirj

command [-pVvj command [arg ... ] compgen [-abcdefgjksuv] [-o option

complete [-abcdefgjksuv] [-pr] [-o continue [n]

declare [-afFirtx] [-p] [name[-val dirs [-clpv] [+N] [-N]

disown [-h] [-ar] [jobspec ... ] echo [-neE] [arg ... ]

enable [-pnds] [-a] [-f filename] eval [arg ... ]

exec [-cl] [-a name] file [redirec exit [n]

export [-nf] [name[-value] *** ] or false

fc [-e ename] [-nlr] [first] [last fg [job^spec]

for NAME [in WORDS ... ;] do COMMA for {( expl; exp2; exp3 )); do COM function NAME { COMMANDS ; } or NA getopts optstring name [arg]

hash [-lr] [-p pathname] [-dt] [na help [-s] [pattern ... ]

history [-c] [-d offset) [n] or hi if COMMANDS; then COMMANDS; I elif jobs [-Inprs] [jobspec ... ] or job kill [-s sigspec I -n signum I -si

let arg [arg ... ] local name[=value] ...

Рис. 9. Получение доступа

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

Методы предотвращения PHP Code Injection. Показанная последовательность действий является лишь небольшим примером того, как злоумышленники атакуют веб-сайты каждый день. Из-за того, что информация обновляется каждый день, постоянно выходят обновления, а разработчики придумывают более серьезные способы защиты, хакеры придумывают новые, изощренные цепочки атак и возможностей эксплуатации целевого веб-приложения.

Для защиты веб-приложений необходимо при их создании и модификации соблюдать правила:

- PHP конфигурация должна пользоваться преимуществом встроенных механизмов защиты [5].

- PHP сценарии должены быть выполнены в chrooted среде.

- Apache сервер должен отклонять все запросы (GET и POST), которые содержат HTML-тэги (возможная атака межсайтового скриптинга), знаки апострофа "" и двойные кавычки (возможная SQL-injection атака).

- Ни одно из PHP предупреждений или сообщений об ошибках не должно быть доступно пользовательским Web приложениям.

- Должна быть реализована возможность сохранения входящих GET и POST запросов, в текстовом файле, что позволит использовать дополнительную Host-based систему обнаружения взлома (HIDS).

- Кодирование — это способ который позволяет произвести ввод данных пользователем только как данные и не позволяет браузеру обработку как кода.

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

- Content Security Policy (CSP, политика защиты контента).

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

127

какие-либо другие типы файлов, на которые есть ссылки на странице. Это означает, что даже если злоумышленнику удастся провести инъекцию вредоносного контента на вашем сайте, CSP сможет предотвратить его исполнение [6].

Список литературы

1. Книга «Безопасность в PHP» (часть 2). Атаки с внедрением кода ) - [Электронный ресурс] URL: https://habr.com/ru/company/vk/blog/352440 (дата обращения: 27.03.2022).

2. Функция eval() - ) [Электронный ресурс] URL: http://www.php.su/eval (дата обращения: 25.03.2022).

3. Bwapp (buggy web application). [Электронный ресурс] URL: http://itsecgames.com (дата обращения: 25.03.2022).

4. Exploit Database. [Электронный ресурс] URL: https://www.exploit-db.com (дата обращения: 27.03.2022).

5. Защищаем PHP. Шаг за шагом. [Электронный ресурс] URL: https://www.securitylab.ru/analytics/216295.php (дата обращения: 27.03.2022).

6. Улучшение сетевой безопасности с помощью Content Security Policy. [Электронный ресурс] URL: https://habr.com/ru/company/nix/blog/271575/ (дата обращения: 26.03.2022).

Беликов Георгий Витальевич, студент, helikvita'amail.ru, Россия, Тула, Тульский государственный университет,

Крылов Илья Дмитриевич, студент, nikplay2000@mail.ru, Россия, Тула, Тульский государственный университет,

Селищев Валерий Анатольевич, канд. техн. наук, доцент, sel648valgramhler.ru, Россия, Тула, Тульский государственный университет

PROTECTING WEB APPLICATIONS FROM PHP CODE INJECTION VULNERABILITY

G.V. Belikov, I.D. Krylov, V.A. Selishchev

The vulnerability of the PHP Code Injection weh vulnerability is considered as the most dangerous threat to modern weh services. The main methods of protection are descrihed.

Key words: information security, weh pages, weh vulnerability, penetration

testing.

Belikov Georgy Vitalievich, student, helikvita@mail.ru, Russia, Tula, Tula State University,

Krylov Ilya Dmitrievich, student, nikplay2000@mail.ru, Russia, Tula, Tula State University,

Selishev Valeryi Anatolievich, сandidate of technical sciences, docent, sel648val@ramhler.ru, Russia, Tula, Tula State University

i Надоели баннеры? Вы всегда можете отключить рекламу.