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