a733ecc5a4f54efb9d63504948088932.ppt
- Количество слайдов: 18
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. Эта настройка определяет, требуется ли выводить ошибки на экран вместе с остальным выводом, либо ошибки должны быть скрыты от пользователя. • http: //www. php. net/manual/en/errorfunc. configuration. php #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 запроса http: //test 1. ru/fullpath/? param 1=hoo¶m 2=foo • Можно передавать массивы, например так http: //test 1. ru/fullpath/? ololo[]=1&ololo[]=2 &trololo=3&ololo[]=4 • Найти описание в спецификации HTTP этого не удалось, возможно работает только в php
Arrays in html • В html с помощью формы можно оправить массив • <form method="post"> • <select multiple name="id[]"> • <option value="1">1</option> • <option value="2">2</option> • <option value="3">3</option> • </select> • <input type="submit" value="send"> • </form>
What happens on the server? • Попробуем просто распечатать наш массив с get параметрами • <? php • echo '<pre>'; • print_r($_GET); • echo '</pre>';
What happens on the server? • Результат для http: //test 1. ru/fullpath/? ololo[]=1&ololo[]=2&trololo=3&ololo[]=4 • Array ( • [ololo] => Array ( • [0] => 1 • [1] => 2 • [2] => 4 • ) • [trololo] => 3 • ) • Видно, что в массиве GET содержится массив ololo и переменная trololo
Arrays in http • Так же можно задавать ключи • Результат для http: //test 1. ru/? id[key 1]=val 1&id[key 2]=val 2 • Array • ( • [id] => Array • ( • [key 1] => val 1 • [key 2] => val 2 • )
Disabled property • <form action="" method="get"> – – – <input type="text" name="a[]" value="123" /> <input type="text" name="a[]" value="1234" /> <input type="text" name="b" value="xzc" /> <input type="text" name="z" value="zzzz" disabled="true"/> <input type="submit"/> • </form> • <? php • echo '<pre>', print_r($_GET, true), '</pre>'; • //output • Array ( [a] => Array ( [0] => 123 [1] => 1234 ) [b] => xzc ) • Disabled fields not send to server
Where is the problem? • Пусть в коде сервера исполняется следующий код • <? php • $f = fopen($_GET['ololo'], "a"); • ? > • Результат исполнения: Warning: fopen() expects parameter 1 to be string, array given in Z: hometest 1. ruwwwfullpathindex. 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) • По умолчанию это md 5(128 bit), но в настройках можно изменить session. hash_function на SHA 1(160 bit). Может использоваться и другая хэшфункция, но это маловероятно.
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=AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'); • 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 make. Ololo(){ echo 'ololo'; } • . /index. php – include_once('. /include/shared. php'); – include_once('. /Test. Class. php'); • . /Test. Class. php – class Test. Class { – public function Test. Class() { – make. Ololo(); – } – $test. Class = new Test. Class(); • • http: //test 1. ru/fullpath/index. php всё хорошо выведет ololo http: //test 1. ru/fullpath/Test. Class. php выведет ошибку Fatal error: Call to undefined function make. Ololo() in Z: hometest 1. ruwwwfullpathTest. Class. 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 • http: //hakipedia. com/index. php/Full_Path_Disclosur e • https: //www. owasp. org/index. php/Full_Path_Disclo sure • Потренироваться можно здесь http: //securityoverride. org/challenges/reconnaissan ce/ Challenge 4 Full Path Disclosure identification via Array, Challenge 5 Full Path Disclosure identification • И здесь http: //quest. darkbyte. ru/ , какой таск догадайтесь сами =)
a733ecc5a4f54efb9d63504948088932.ppt