Интересная
задачка на HackerLab.
Первое, что мы делаем - идем смотреть исходный код. В ходе изучения, нас привлекут файлы
и
в папке classes.
Видим, что
позволяет нам загружать аватар пользователя, а
содержит класс профиля и метод loadAvatar().
Что мы будем делать? А мы будем загружать свою "аватарку". Но перед этим создадим аккаунт и зайдем в него.
Кстати, нам понадобится утилита
. Версия Community Edition бесплатная, ее можно скачать здесь.
Итак, приступаем к созданию "аватарки". Это будет php код следующего содержания:
PHP:
Код:
theme = print_r(scandir('/'), true); ?>
-наш главный инструмент. Он просканирует содержимое главной директории и выведет все файлы и папки, которые там есть.
Сохраним этот код в какую-нибудь папку и назовем, скажем,
. Заходим в Burp Suite -> вкладка Proxy -> вкладка Intercept. Включаем Intercept и загружаем нашу "аватарку". Страница уходит в загрузку, а в Burp Suite мы видим следующее:
Нас интересуют строки 17 и 18.
Код:
filename="avatarka.php"
мы меняем на
Код:
filename="avatarka.jpg"
, а в
меняем значение на
. Делаем мы это для того, чтобы сервер принял наш файл, ведь, очевидно, файл php туда по умолчанию загрузить нельзя. В Burp Suite нажимаем
. Наша аватарка ломается.
Но это ни в коем случае не плохо! Нам нужно посмотреть исходный код страницы. Там мы увидим следующее:
Видим, что там затесался наш fl4g.txt. Осталось его вытащить. Меняем
следующим образом:
PHP:
Код:
theme = file_get_contents('/fl4g.txt'); ?>
И, повторяя те же шаги с Burp Suite, выводим наш флаг в исходный код.
Если кто-то захочет изучить тему подробнее, такая уязвимость называется
Код:
local file inclusion
. Она позволяет выполнять локальные файлы на сервере.