Web. Full Path Disclosure Array[] Parameter Injection Illegal Session Injection Direct Access to files that requires preloaded library files Арыков Никита,
Full Path Disclosure(FPD) Full Path Disclosure(FPD)(Раскрытие полного пути) – ошибка, возникающая в результате неправильной обработки входных данных [ну это, как обычно =) ] Цель: вызвать ошибку в работе сервера, чтобы на экран была выведена ошибка с полным путем до файла на сервере.
Reason В php есть директива display_errors. Эта настройка определяет, требуется ли выводить ошибки на экран вместе с остальным выводом, либо ошибки должны быть скрыты от пользователя. ini.display-errors ini.display-errors Если директива на сервере включена(on), то можем эксплуатировать. Пример: Warning: opendir(Array): failed to open dir: No such file or directory in /home/omg/htdocs/index.php on line 84
Secret of the HTTP Помимо стандартного GET запроса 2=foo Можно передавать массивы, например так &trololo=3&ololo[]=4 Найти описание в спецификации HTTP этого не удалось, возможно работает только в php
Arrays in html В html с помощью формы можно оправить массив 1 2 3
What happens on the server? Попробуем просто распечатать наш массив с get параметрами
What happens on the server? Результат для Array ( [ololo] => Array ( [0] => 1 [1] => 2 [2] => 4 ) [trololo] => 3 ) Видно, что в массиве GET содержится массив ololo и переменная trololo
Where is the problem? Пусть в коде сервера исполняется следующий код Результат исполнения: Warning: fopen() expects parameter 1 to be string, array given in Z:\home\test1.ru\www\fullpath\index.php on line 2
Array[] Parameter Injection Данный вид атаки называется Array[] Parameter Injection и возникает из-за того, что функции дают на вход не строку, как она ожидала, а массив. Т.к. входные параметры обычно передаются во многие функции, то вероятность успешной атаки достаточно велика. Для защиты нужно проверять на тип: is_array(), is_string(), is_numeric(), etc. Для эксплуатации просто добавляем [] в URL для get-параметров.
PHP Session Для авторизации в php часто используются сессии: каждому посетителю сайта присваивается уникальный идентификатор, называемый идентификатором сессии (session_id). Чаще всего используются cookie, либо передается через URL(например параметром get).
PHP Session Стандартное имя идентификатора сессии в php это PHPSESSID, но оно может быть и другим, если программист изменил его с помощью session_name(); session_id состоит из a-z A-Z 0-9, (comma) and - (minus) По умолчанию это md5(128bit), но в настройках можно изменить session.hash_function на SHA- 1(160bit). Может использоваться и другая хэш- функция, но это маловероятно.
Illegal Session Injection Null Session Cookie В случае если сайт используется сессии, можно удалить значение для PHPSESSID например введя в строку браузера javascript:void(document.cookie="PHPSESSID="); Это вызовет ошибку на стороне сервера Warning: session_start() [function.session-start]: The session id contains illegal characters, valid characters are a-z, A-Z, 0-9 and '-,' in home/example/public_html/includes/functions.php on line 2
Illegal Session Injection Invalid Session Cookie Достаточно похожа на Null Session Injection, но вместо пустой сессии идентификатор заменяется на недопустимое значение javascript:void(document.cookie='PHPSESSID=AAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'); Warning: session_start(): The session id is too long or contains illegal characters, valid characters are a-z, A-Z, 0-9 and '-,' in /home/example/public_html/includes/functions.php on line 2
Direct Access to files that requires preloaded library files Рассмотрим пример./include/shared.php: – function makeOlolo(){ echo 'ololo'; }./index.php – include_once('./include/shared.php'); – include_once('./TestClass.php');./TestClass.php – class TestClass { – public function TestClass() { – makeOlolo(); – } – $testClass = new TestClass(); всё хорошо выведет ololo выведет ошибку Fatal error: Call to undefined function makeOlolo() in Z:\home\test1.ru\www\fullpath\TestClass.php on line 4
FPD Prevention Нужно проверять передаваемые типы Отключить отображение ошибок: – php.ini: display_errors = 'off –.htaccess: php_flag display_errors off – PHP script: ini_set('display_errors', false);
Useful links e e ure ure Потренироваться можно здесь ce/ Challenge 4 Full Path Disclosure identification via Array, Challenge 5 Full Path Disclosure identification ce/ И здесь какой таск догадайтесь сами =)