Скрытие кода, метод 2

Следующий код был выдран из файла хакеров (или взломщиков или скрипткидсов), в закодированной строке был URL на внешний сайт, с которого подтягивался еще один кусок кода.

@eval(decrypt("CODECODE==",$_COOKIE['HASH'])); exit; function decrypt($txt,$key){
    $txt=base64_decode($txt); $res="";
    for($i=0; $i<strlen($txt); $i++){
        $c=substr($txt,$i,1);
        $kc=substr($key,($i%strlen($key))-1,1);
        $c=chr(ord($c)-ord($kc));
        $res.=$c;
    }
    return $res;

Раскодировывается просто, хотя на вскидку сложнее сказать/увидеть, что за манипуляции производятся со строкой:

$text = decrypt( "CODECODE==", "HASH" );

function decrypt( $txt, $key ) {
    $txt = base64_decode( $txt );
    $res = "";
    for ($i = 0; $i < strlen( $txt ); $i++) {
        $c = substr( $txt, $i, 1 );
        $kc = substr( $key, ($i % strlen( $key )) - 1, 1 );
        $c = chr( ord( $c ) - ord( $kc ) );
        $res .= $c;
    }
    return $res;
}

$fp = fopen( 'decoded.txt', 'w' );
fwrite( $fp, $text );
fclose( $fp );

HASH был выдран из соответствующего Кукиса, а сам код был в POST-запросе. Впервые встречаю, чтобы Cookie (куки, печеньки, печенюшки) использовали для таких целей. Умно, но не так уж сложно.

Взломщики часто перестраховываются и внешние куски кода отдают только после проверки строк User Agent и/или Referer, чтобы застраховаться от перехвата. Wget легко вытягивает такие файлы, для этого используются ключи:

-U agent-string
—user-agent=agent-string
—referer=url

Скрытие кода, метод 1

Один из самых популярных способов скрыть код, часто встречается в темах WordPress и других движков и иногда в самих движках. Код выглядит следующим образом:

eval(base64_decode("CODECODECODE=="));
eval(gzinflate(base64_decode("CODECODECODE==")));

Первый вариант ломается легко, стоит только раскодировать строку из base64, второй – сложнее, нужно запихнуть все в переменную и сохранить в файл:

$text = gzinflate(base64_decode("CODECODECODE=="));

$fp = fopen('decoded.txt', 'w');
fwrite($fp, $text);
fclose($fp);

Немного больше телодвижений, но так же просто, главное убрать eval 😉

base64 можно раскодировать в редакторе Notepad++ с плагином TextFX Characters или MIME Tools.

Конкурс c призами

Конкурс на самый самый самый круто закодированный PHP-файл.

1 место – 500 грн
2 место – 100 грн

работы 🙂 присылайте на hahack /собака/ netspider.kiev.ua

условия:
— код может быть как вашим, так и позаимствованным из откуда угодно;
интересные кодировки бывают во всяких вирусах или платных скриптах.
— файл должен быть автономным и работоспособным, т.е. не требовать подключения других файлов или целых библиотек.
чтобы я мог его раскодировать и оценить 😉

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

ProFTPD 1.3.4

Если при рестарте после обновления порта вы увидели такую ошибку:

Fatal: unknown configuration directive 'TLSEngine'
или что-то подобное, то вы везунчик)

В новой ветке ProFTPD, начиная с версии 1.3.4a, модули подгружаются динамически и их нужно ручками дописывать в proftpd.conf, например:

LoadModule mod_tls.c
LoadModule mod_ratio.c
LoadModule mod_readme.c
LoadModule mod_rewrite.c
LoadModule mod_ban.c
LoadModule mod_copy.c
LoadModule mod_deflate.c
LoadModule mod_ifsession.c
LoadModule mod_ifversion.c
LoadModule mod_quotatab.c
LoadModule mod_quotatab_file.c
LoadModule mod_quotatab_sql.c
LoadModule mod_sftp.c
LoadModule mod_sql.c

Учитывайте так же очередность загрузки модулей, модули, зависящие от других, должны загружаться позже, если прописать:

LoadModule mod_quotatab_file.c
LoadModule mod_quotatab_sql.c
LoadModule mod_quotatab.c

получите ошибку:

/libexec/ld-elf.so.1: /usr/local/libexec/proftpd/mod_quotatab_file.so: Undefined symbol "quotatab_register_backend"

Чтобы работал mod_sql нужно установить порт /usr/ports/databases/proftpd-mod_sql_mysql/ или /usr/ports/databases/proftpd-mod_sql_postgres/ (смотря какая у вас база данных)  и в конфиге прописать:

LoadModule mod_sql.c
# и загрузить модуль:
LoadModule mod_sql_mysql.c
# или
LoadModule mod_sql_postgres.с

SQLBackend mysql
# или
SQLBackend postgres

В виртуальных серверах можно использовать разные базы, просто указать нужную через SQLBackend.

GRANT – установка привилегии, не зная пароля

Если у вас есть доступ root (или близкий к нему) в MySQL и нужно установить дополнительный удаленный доступ для существующего пользователя к базе, но нет под рукой пароля, можно сделать так:

1) смотрим, какие уже есть разрешения для этого пользователя с других хостов и какой у него пароль (пароль, естественно, в зашифрованном виде):

use mysql;
select * from user where User like '%USERNAME%';
# где USERNAME - имя пользователя

2) ставим необходимые права с любым паролем:

GRANT ALL ON dbname.* to dbuser@IP.ADD.RE.SS IDENTIFIED BY 'XYXY';

после запроса, XYXY в зашифрованном виде будет выглядеть длинной строчкой, совсем не похожей на те, что были в п. 1.

3) копируем пароль этого пользователя из пункта 1 и выполняем следующий запрос:

UPDATE user set Password='*ABABABABABABABABABABABABABABABABABABABAB' WHERE Host like 'IP.ADD.RE.SS';
FLUSH PRIVILEGES;

N.B.
Пароль начинается на * (звездочку) и должен в точности соответствовать тому, что был в п.1, для верности можно повторить запрос, вывести список доступов пользователя и убедиться, что пароли совпадают.

dnd.name

Если у вас остались домены у DND.name, реселлeра Directi, спасти/перенести домены к другому регистратору или реселлеру можно через панель dnd.myorderbox.com.

парадокс?

Самые лучшие вещи в жизни – бесплатны.

самые лучшие вещи в жизни

объятия, улыбки, друзья, поцелуи, семья, сон, любовь, смех, хорошие воспоминания.