Как обойти Turnstile CAPTCHA с помощью сервиса распознавания капчи 2капча - пошаговая инструкция

Cloudflare представила Turnstile, свою новую технологию, которая заменяет традиционные CAPTCHA, в сентябре 2022 года. Это решение разработано как альтернатива, предлагающая пользователям более удобный и конфиденциальный способ верификации без необходимости ввода символов или решения визуальных головоломок. Основная идея Turnstile заключается в использовании неинтерактивных JavaScript-задач для сбора информации о поведении и окружении пользователя, что позволяет адаптировать сложность проверки и упростить процесс для обычных пользователей.

Turnstile использует ротационные наборы проверок, адаптируя их сложность в зависимости от поведения юзера. Система также интегрируется с Private Access Tokens в iOS и macOS, что позволяет проводить проверку без сбора и хранения данных устройств пользователей. Это обеспечивает дополнительный уровень защиты конфиденциальности, в то время как Cloudflare утверждает, что время, затрачиваемое пользователями на прохождение проверок, сократилось с 32 секунд до примерно одной секунды.

Одним из ключевых фактов, отличающих Turnstile от других решений, является его доступность для любого разработчика, независимо от того, является ли он клиентом Cloudflare или нет. Это решение доступно бесплатно, и его можно легко интегрировать в любой сайт, используя предоставляемые Cloudflare инструкции и код.

Дополнительно, Cloudflare работает над плагинами для популярных платформ, таких как WordPress, чтобы упростить развертывание Turnstile. Эти усилия могут со временем убедить администраторов сайтов в преимуществах использования Turnstile вместо существующих решений CAPTCHA.

Переход к системе Turnstile от Cloudflare может затруднить работу специалистов, которые работают с большими объемами данных (тестировщики, парсеры и тп) поскольку она делает автоматическую обработку веб-форм значительно сложнее. Turnstile использует адаптивные проверки, основанные на поведении пользователя, что отличается от простого распознавания символов в традиционных CAPTCHA.

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

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

Для распознавания Turnstile с помощью API сервиса 2Captcha, необходимо создать задачу (createTask) с параметрами конкретной капчи Turnstile. Существует два основных сценария использования: для стандартной капчи и для страницы Cloudflare с капчей. В обоих случаях, ключевыми параметрами являются sitekey, URL страницы, и, в случае страницы вызова, дополнительные параметры как action, cData, и chlPageData.

Стандартная Turnstile CAPTCHA - используется на страницах, где капча Turnstile встроена напрямую. Задача создаётся с параметром sitekey и URL страницы.

Cloudflare Challenge Page - применяется на страницах Cloudflare, которые временно блокируют доступ. Здесь, кроме sitekey и URL, требуется передать дополнительные параметры, такие как action, cData, и chlPageData, которые помогают определить контекст вызова и необходимые действия для преодоления проверки.

Для обоих сценариев после решения капчи сервис возвращает токен, который используется для подтверждения действий на сайте.

Теперь давайте наглядно продемонстрируем, как работает решение Turnstile CAPTCHA на примере демо-страницы 2капча, будем использовать Node.js

Создадим папку и назовем ее Turnstile

Необходимо все подготовить, нам потребуются следующие модули - axios и dotenv

Для установки указанных модулей нужно выполнить следующую команду

npm install axios dotenv

Создадим файл .env и добавим туда наш API-ключ от сервиса 2Captcha, который можно найти на главной странице, предварительно залогинившись в сервисе.

В файле .env будет всего одна строка

API_KEY=YOUR_2CAPTCHA_API_KEY

Замените YOUR_2CAPTCHA_API_KEY на ваш действительный API-ключ.

Создадим в папке файл index.js со следующим содержимым

const axios = require('axios'); require('dotenv').config(); // Инициализация dotenv const YOUR_API_KEY = process.env.API_KEY; console.log("Loaded API Key:", YOUR_API_KEY); // Вывод API-ключа для проверки const TURNSTILE_SITE_KEY = '1x00000000000000000000AA'; const TURNSTILE_URL = 'https://2captcha.com/demo/cloudflare-turnstile?cf-turnstile-response='; async function solveCaptcha() { try { const response = await axios.post('https://2captcha.com/in.php', null, { params: { key: YOUR_API_KEY, method: 'turnstile', sitekey: TURNSTILE_SITE_KEY, pageurl: TURNSTILE_URL } }); if (response.data.indexOf("OK|") !== -1) { const captchaId = response.data.split("|")[1]; console.log("Captcha ID:", captchaId); return captchaId; } else if (response.data.indexOf("ERROR_WRONG_USER_KEY") !== -1) { console.error("Invalid API Key. Please check your 2Captcha API Key."); throw new Error("Invalid API Key"); } else { console.error("Error submitting captcha:", response.data); throw new Error("Failed to submit captcha"); } } catch (error) { console.error("Error:", error); throw error; } } async function getSolution(captchaId) { try { while (true) { const result = await axios.get('https://2captcha.com/res.php', { params: { key: YOUR_API_KEY, action: 'get', id: captchaId } }); if (result.data === "CAPCHA_NOT_READY") { console.log("Captcha not ready yet, waiting..."); await new Promise(resolve => setTimeout(resolve, 5000)); } else if (result.data.indexOf("OK|") !== -1) { const token = result.data.split("|")[1]; console.log("Captcha solution:", token); return token; } else if (result.data.indexOf("ERROR_WRONG_USER_KEY") !== -1) { console.error("Invalid API Key. Please check your 2Captcha API Key."); throw new Error("Invalid API Key"); } else { console.error("Error getting captcha solution:", result.data); throw new Error("Failed to get captcha solution"); } } } catch (error) { console.error("Error:", error); throw error; } } async function bypassCaptcha() { try { const captchaId = await solveCaptcha(); const solution = await getSolution(captchaId); console.log("Final captcha solution:", solution); // Здесь вы можете отправить решение на страницу, на которую хотите попасть // Например: // await axios.post('https://targetwebsite.com/submit', { // 'cf-turnstile-response': solution // }); } catch (error) { console.error("Error bypassing captcha:", error); } } bypassCaptcha();

Теперь вкратце, как работает указанный код

Сперва происходит импорт модулей

const axios = require('axios'); require('dotenv').config(); // Инициализация dotenv

axios — для отправки HTTP-запросов.

dotenv — для работы с переменными окружения.

Следующим шагом, происходит настройка переменных

const YOUR_API_KEY = process.env.API_KEY; console.log("Loaded API Key:", YOUR_API_KEY); // Вывод API-ключа для проверки const TURNSTILE_SITE_KEY = '0x4AAAAAAAVrOwQWPlm3Bnr5'; const TURNSTILE_URL = 'https://2captcha.com/demo/cloudflare-turnstile?cf-turnstile-response=';

YOUR_API_KEY — API-ключ для 2Captcha.

TURNSTILE_SITE_KEY — site key для CAPTCHA.

TURNSTILE_URL — URL страницы с CAPTCHA.

В нашем случае подразумевается что параметр SiteKey и URL мы подставляем в код самостоятельно, предварительно найдя его на странице с капчей.

После того, как переменные настроены осуществляется решение капчи

async function solveCaptcha() { try { const response = await axios.post('https://2captcha.com/in.php', null, { params: { key: YOUR_API_KEY, method: 'turnstile', sitekey: TURNSTILE_SITE_KEY, pageurl: TURNSTILE_URL } }); if (response.data.indexOf("OK|") !== -1) { const captchaId = response.data.split("|")[1]; console.log("Captcha ID:", captchaId); return captchaId; } else if (response.data.indexOf("ERROR_WRONG_USER_KEY") !== -1) { console.error("Invalid API Key. Please check your 2Captcha API Key."); throw new Error("Invalid API Key"); } else { console.error("Error submitting captcha:", response.data); throw new Error("Failed to submit captcha"); } } catch (error) { console.error("Error:", error); throw error; } }

solveCaptcha отправляет запрос на решение CAPTCHA.

Возвращает captchaId при успешном запросе.

Далее происходит получение решения (в нашем случае это токен)

async function getSolution(captchaId) { try { while (true) { const result = await axios.get('https://2captcha.com/res.php', { params: { key: YOUR_API_KEY, action: 'get', id: captchaId } }); if (result.data === "CAPCHA_NOT_READY") { console.log("Captcha not ready yet, waiting..."); await new Promise(resolve => setTimeout(resolve, 5000)); } else if (result.data.indexOf("OK|") !== -1) { const token = result.data.split("|")[1]; console.log("Captcha solution:", token); return token; } else if (result.data.indexOf("ERROR_WRONG_USER_KEY") !== -1) { console.error("Invalid API Key. Please check your 2Captcha API Key."); throw new Error("Invalid API Key"); } else { console.error("Error getting captcha solution:", result.data); throw new Error("Failed to get captcha solution"); } } } catch (error) { console.error("Error:", error); throw error; } }

getSolution использует captchaId для получения токена решения.

Применяет ожидание и экспоненциальное ожидание для увеличения шансов на успешное решение.

И последним шагом в коде предусмотрено поле, куда вы можете добавить свой вариант, куда отправлять полученный токен

async function bypassCaptcha() { try { const captchaId = await solveCaptcha(); const solution = await getSolution(captchaId); console.log("Final captcha solution:", solution); // Здесь вы можете отправить решение на страницу, на которую хотите попасть // Например: // await axios.post('https://targetwebsite.com/submit', { // 'cf-turnstile-response': solution // }); } catch (error) { console.error("Error bypassing captcha:", error); } } bypassCaptcha();

Так как на этой демо странице используется поле input, значение которого можно поменять следующим образом: document.querySelector('[name="cf-turnstile-response"]').value = 'TOKEN';

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

В видео весь процесс показан максимально емко и понятно, для наглядности можете использовать его.

Начать дискуссию