Розкриття локальних файлів/..

Розкриття локальних файлів, яке часто, але не завжди, досягається через Directory Traversal (перехід по каталогах), є поширеною вразливістю вебсайтів, яка дозволяє читати довільні файли з комп'ютера, що хостить вебсторінку.

Це часто досягається шляхом додавання /.. до URL. Вразливі кінцеві точки часто містять звичайні файли, які надаються користувачу, як-от зображення:

https://ozsfd7pb.eu1.ctfio.com/image?file=cat1.jpg

Щоб перевірити, чи вразлива ця кінцева точка:

https://ozsfd7pb.eu1.ctfio.com/image?file=../../../../../etc/passwd

Чому ../?

Це Linux. Одна крапка (.) означає поточний каталог, а дві крапки (..) представляють каталог, який знаходиться вище поточного. Більшість вебсерверів працюють на Linux, і зберігають свої вебсторінки в папці var/www/html. З цієї точки зору ../../../../.. (іноді більше, якщо ви знаходитеся в глибших папках) вказуватиме на корінь файлової системи (/). Якщо ви тепер додасте /etc/passwd, ви отримаєте стандартний файл Linux, який містить паролі комп'ютера, і він часто використовується як доказ концепції (PoC).

Розширення файлів

Іноді застосунки автоматично додають розширення, наприклад .jpg або .csv, до запитуваного файлу, бо вони очікують, що ви запитаєте саме такий тип файлу. Якщо так, то ваш запит на файл (..)/passwd.csv буде недійсним.

Щоб обійти це, додайте одне з наступних до шляху:

  • Нульовий байт %00, який використовувався в C для завершення рядка.
  • Символ ?, щоб він став параметром URL.
  • Символ #, щоб він став коментарем у URL.

Інші способи обминути фільтри

Застосунок також може мати фільтр для ../, ось два підходи для обходу цього:

  1. URL-кодування вашого переходу по каталогах
  • . (крапка)%2e
  • / (косий слеш)%2f
  • ../ (перехід по каталогах)%2e%20%2f
  1. Якщо фільтри блокують "../", ви можете спробувати таке:
  • ....// → Еквівалентно ../
  • ..././../

Тут фільтр шукає ../ і видаляє його. Але після видалення ще залишатиметься інший ../.

Ось як може виглядати повний URL атаки:

GET http://cryptosite.com/download_earnings?u=%2e%20%2f%2e%20%2f%20%2e%2fetc%2fpasswd%00csv HTTP/1.1

Рішення

Щоб LFR працював, запит має бути зроблений на клієнтській чи серверній стороні? серверній

Який протокол використовується для читання файлів з локальних дисків серверів? file://

Який поширений файл Linux/Unix часто читається для підтвердження LFR? /etc/passwd

Перекладено з: Local File Disclosure/..