Что такое обход каталога
Впервые уязвимости обхода каталогов были обнаружены в ThinkJS 2. Код показан ниже, цель состоит в том, чтобы вернуть адрес статического ресурса, когда URL-адрес, к которому обращается пользователь, является статическим ресурсом. вpathname
Это путь в URL-адресе, к которому обращается пользователь.Мы обнаружили, что код просто декодируется, а затем соединяется с каталогом ресурсов в строке 22. Это очень очевидная уязвимость обхода каталога.
Почему ты это сказал? Предположим, что URL-адрес, который посещает пользователь,http://xxx.com/../../../xxx.jpg
Тогда окончательный возвращаемый адрес файла станетthink.RESOURCE_PATH
файлы в трех верхних каталогах. Этот способ перечисления каталогов или файлов сервера с использованием недостатков безопасности веб-сайтов становится уязвимостью обхода каталога, также известной как уязвимость обхода пути (англ. Path traversal).
Обход каталога также известен на английском языке как атака ../Dot-dot-slash, лазание по каталогу и поиск с возвратом. Некоторые из его методов атаки также можно разделить на атаки канонизации. с помощью:wikipedia
Опасности обхода каталогов
Самая большая опасность обхода каталогов заключается в том, что любой пользователь может получить доступ к конфиденциальным файлам системы, а затем скомпрометировать весь сервер. Например, после получения файла /etc/passwd под linux пароль пользователя root может быть взломан.
способ защиты
Видно, что суть проблемы в большинстве случаев заключается в../
Характер скачка каталога, поэтому первоочередной задачей защиты является его фильтрация. В дополнение к фильтрации вы также можете оценить окончательный путь к файлу, чтобы убедиться, что первые N символов после полного каталога запрошенного файла точно совпадают с корневым каталогом документа.Если они совпадают, содержимое будет возвращено. В противном случае адрес атаки может быть не возвращен.
Возвращаясь к проблеме с кодом, упомянутой в начале статьи, она окончательно устраняется вышеуказанным методом.После нормализации конечного адреса файла судят, содержит ли началоRESOURCE_PATH
каталог или пустой, если он его не содержит.