[PART-0] CSAAS модель. Cloudflare Challenge. Способ его решения.

D2

Администратор
Регистрация
19 Фев 2025
Сообщения
4,380
Реакции
0
Спойлер: soundtrack
https://soundcloud.com/queen-69312%2Fsets%2Fgreatest-hits-239


Написано - chiefchain
Для - XSS



1. Введение
1.1 О чём эта будущая трилогия статей?
Ответ один и единственный, будем с вами разбираться со множеством капч, и тем как они работают, будем искать подходы для каждой. Первую статью решил разместить в криптографии (мне кажется, что это более подходящий вариант нежели другие). Много капч работает на криптографии, другие же отслеживают, то как ты дергаешь мышкой, другим просто нужно ввести текст с картинки, а кто-то совмещает это всё вместе. И нельзя сказать точно, где можно будет их размещать. Мы не остановися только на одном Cloudflare, но начал я с него, ибо множество людей, разработчиков сталкиваются с проблемами когда он есть, а так же, первая статья же должна быть взрывной, не так ли? В завершении этих статей, хочется создать множество авторешений под капчи, а возможно и напишем какой-нибудь сайтик, так скажем создадим свой CSAAS.
1.2 Чё это за CSAAS?!! Я впервые такое слышу.
На самом деле с приставкой "AAS" можно придумать уже всё что угодно, начиная от RATAAS и заканчивая HAAS (hoe-as-a-service), в последнее время на сторонних форумах это уж слишком популяризировалось, по этому, тут все началось как снежный комок, который собирает все что можно сократить под "Хайповую" аббревиатуру. CSAAS - Captcha Solver As A Service, впринципе на этом этапе уже всё ясно, сервис, который решает нам наши капчи. Цена на капчи у каждого сервиса своя, непонятно как они на самом деле оцениваются и т.д., я не экономист, мне не понять. Так же у одного сервиса я заметил странную вещицу, что они предлагают работу с доходом "$0.50 for 1-2 hours, depending on service load", из разрядa, мы тебе даем капчу, ты решаешь ее клиенту за копейки, а мы овепрайсим ее решенную клиенту. Раз сегодня мы разберем Cloudflare challenge, надо сравнить цены на рынке (надо же понять, какую выгоду мы извлекем из этой статьи)
- Capsolver - 1.2$/1000 запросов
- 2captcha - 1$/1000 запросов
- Capmonster - 1.3$/1000 запросов

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

2. Cloudflare.
2.1 Cloudflare - рак 21 века в интернете.
Cloudflare (сокращенно буду называть "CF") - вкратце, компания, которая проксирует ваши сайты, защищая их от DDOS-атак и тому подобное, СDN-сервис. Громкое название для подпункта, но мне остается только подтвердить своё мнение аргументами, давайте начнём с того, что вся ваша безопасность при использовании сайтов с CF равняется нулю, как я подметил ранее, он проксирует сайт, следовательно, эта корпорация-гигант просто работает в режиме MITM, а теперь давайте представим, что как нибудь в скором времени CF-поляжет от атаки и сольется всё, что только можно, все ваши запросы, абсолютно всё. Прикольно, классно? Это один из первых, и главных отвалов бошки по безопасности. Насколько большой рынок захватила эта компания, даже тяжело представить. Вернемся немного в прошлое и глянем, как настал момент X в нашем веке. Раньше о защите своих сайтов от DDOS-атак, размеренной нагрузки большинство компаний могли лишь мечтать, ибо все просили "огого" какие деньги, но тут приходит наш "альтруист" под названием Cloudflare, говорит: "Ребята! Теперь это всё бесплатно, берите, забирайте сколько можете". Представьте, в каком шоке все были, теперь за бесплатно, а раньше за миллиарды денег. Немного статистики - все CF держит >27 миллионов сайтов, 1.7 миллионов из них это USA, среди всех сайтов с CDN - 76% проксируется через CF. Неплохо, а даже много можно сказать.. Как работают эти защиты, у меня даже слов нет. Вновь представьте, вы обыкновенный клерк, который сидит в корпоративной сети, а вам по работе нужен какой-то сайт. Вы переходите и перед вами эта злостная картина.
1727247825182.png



Так эта машина, еще и отказывается вам верить, что вы человек! Объяснение тут достаточное легкое, раз вы сидите в корпоративной сети, то вероятнее всего CF сказал: "Вы все боты, вы кучу раз пытаетесь зайти! Я вам не поверю, никогда и ни за что, проваливайте". На этом моменте, можно уже сделать заметку для нашего будущей решалки, что прокси, должны быть чистенькие.
2.2 Разработчики бегут в ужасе от CF*
Звёздочка обозначает, что это сугубо мое мнение, сформировавшееся на моём опыте. На рынке разработке ПО, куча всякого бреда, множество разработчиков отказываются браться за сайты с CF, множество заказчиков не понимает, что из себя представляет CF, что им придется потратиться на хорошие прокси, так же на сервисы для решения этого самого CF. И этого реально куча, просто тысячи. Пару выдержек.

1. Что вам нужно написать полное ТЗ: Нужен человек, который разбирается в чекерах для Valorant. Нужно сделать обход Cloudflare. ( https://authenticate.riotgames.com/api/v1/login )
2. На каком языке программирования вам нужно это сделать: Python
3. Какие сроки на выполнение: 1 Day
4. Сколько готовы заплатить за работу: 30-50 $

1727251559673.png



2.3 Cloudflare Challenge.
Окей, пора плыть к сути, что это такое и зачем оно вообще есть. на чем оно концентрируется и так далее. Увидеть, что это вы можете на предыдущей картинке, вы со 100% вероятностью, конечно сталкивались с этим, бесспорно. Действует их эта защита по принципу IUAM (I'm Under Attack Mode), в основе это было сделано конечно против DDOS-атак. Но при написании этого проекта, я преследовал другую цель, которые могут помочь в таких ПО как скраперы, валидаторы и т.д.. Это выглядит так, что вы просто ждёте пока страница прогрузится, а это так называемая прокладка просто, на которой проводится множество тестов за счёт JS-скриптов. Я не гуру, и обойти CF на запросах, у меня к сожалению пока не вышло, но в следующем пункте статьи, мы разберем решение, которое работает в пределах ~5 секунд. Для начало разберем эти браузеры, защиты, что они делают и зачем.
2.4 Как работает эта защита, чему она отдает предпочтение?
Окей, начнем с понятия webdriver, и почему оно нам интересно. Webdriver - это инструмент, который помогает в куче сфер автоматизировать тесты, и прочие штуки. Понимаем, что CF это ни в коем случае не понравится, как можно понять webdriver у вас аля нет? Всё достаточно просто. Откройте консоль в браузере и введите "navigator.webdriver"
1727248587147.png



В браузере которым вы пользуетесь, точно не будет true, но понимаем этот момент, а так же понимаем, что CF точно не будет так глупо это проверять, а по другим микроэлементам, по которым можно сделать соответствие, что это вебдрайвер(эмуляция). Так-же напоминаю из пункта 2.1 нам требуется чистота прокси, не прям идеальные конечно, но они тоже потребуются нам. Стоит помнить и про TLS-fingerprint, они реализуются в случае запросах через библиотеку curl-cffi, именно она может вам помочь, банальные библиотеки requests и т.д., вам уже не подойдут. Но как я говорил ранее, решение всё же будет на эмуляции, где это уже и так будет встроенно. Так-же стоит помнить про такую технику как Opengl + Canvas, которая прям в браузере позволяет нам отрисовать условный 3D-куб, который будет крутиться, такие проверки тоже присутствуют в Cloudflare, по этому мы ограничены в том, чтоб использовать --headless режим.

Подведем маленькие выводы, что нам следует соблюдать:
- Использовать браузер, который не будет детектиться как webdriver
- Браузер должен поддерживать OpenGl + Canvas
- Нельзя использовать --headless режим
- TLS-фингерпринты важны
- Чистые прокси (желательно)


3. Максимально нативная решалка. Заключение.
3.1 Максимально нативная решалка.
В качестве браузера, который не будет детектиться как webdriver используем уже проверенную штуку как undetected-browser этому репозиторию уже куча лет, но он по каким-то непонятным причинам, до сих пор не детектится, насчёт чистых прокси, я не стану с этим эксперементировать, в любом случае, подвязать прокси под конец в готовый скрипт, я думаю у каждого с минимальными знаниями получится.
Попробуем сделать максимально по тупому, просто перейти на страницу, чуть подождать и получить куки.

Python: Скопировать в буфер обмена
Код:
import undetected_chromedriver as uc
from selenium.webdriver.common.by import By
import time

options = uc.ChromeOptions()
driver = uc.Chrome(options=options)

try:
    driver.get(f"https://notletters.com")
    time.sleep(116)
    cookies = driver.get_cookies()
    for cookie in cookies:
        print(cookie)
finally:
    driver.quit()

1727249994242.png



Скажу сразу, ничего не вышло, абсолютно ничего, все 116 секунд оно просто крутилось, хотя мы же вроде соблюдали все правила, но ничего не вышло. Очень грустно, но наш первая попытка сделать MVP развалилась в пух и прах. Решение уже было найдено, я честно, не знаю как оно до меня дошло, но оно достаточно банальное и примитивное, суть его заключается в том, чтоб не делать целевой страницу где находится эта защита UIAM. То есть, мы для начала создаем html-файл, в котором хранится наша ссылка на сайт с защитой, после чего переходим по ней, НО, очень важное НО, ни в коем случае не переключаемся на эту вкладку через возможности драйвера, иначе мы всё запоганим, да у этого метода есть свои минусы, такие как скорость, невозможность получить результат мгновенно и т.д., но наша цель сделать MVP-решалку, которая будет жить, работать, и мы с помощью неё сможем получить нужный нам результат.

Python: Скопировать в буфер обмена
Код:
import undetected_chromedriver as uc
from selenium.webdriver.common.by import By
import time
import os

file_path = os.path.abspath("test.html")
options = uc.ChromeOptions()
driver = uc.Chrome(options=options)

try:
    driver.get(f"file:///{file_path}")
    link = driver.find_element(By.ID, "link")
    link.click()
    time.sleep(7)
    driver.switch_to.window(driver.window_handles[1])
    cookies = driver.get_cookies()
    for cookie in cookies:
        print(cookie)

finally:
    driver.quit()
HTML: Скопировать в буфер обмена
Код:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
    <a href="https://notletters.com/" id="link" target="_blank">go</a>
</body>
</html>

Немного объяснений, в html мы обязательно используем target="_blank", чтоб создавалась именно новая вкладка. Ограничение в 7-секунд поставлено самостоятельно на основе данных из статьи самих CF, и тестов.
3.2 Заключение.
Решалка у нас вышла, да тупая, да нативная, но решающая исправно и работающая. В результате работы скрипта, мы имеем решалку этой капчи.
1727250824625.png


И вывод всех куков с целевого сайта:
Код: Скопировать в буфер обмена
{'domain': '.notletters.com', 'expiry': 1758786809, 'httpOnly': True, 'name': 'cf_clearance', 'path': '/', 'sameSite': 'None', 'secure': True, 'value': 'xLTX06ypCvGJHq4OTDi3ntnYo0S6tBO9XQU7prk74FU-1727250802-1.2.1.1-PHS18HVrngZAdwWIgrPXWO1Riwuc1XvB99HBbZvRWpORztIyaGPbGlVYNndnDUGWrGIdwV87NclUdkfq4pVgQm3_eFYz2KSqBisKOe6jmz1XP4B5cvrFhlbWs6Rj.t.VaoJW6T.7eavG98SWZG62tKJ1dJ65R5fVHB8NbhDabmFdzRLCP2HxMJ72a0st4tjFAx3J3xBydUm75UdH60Bfcf97TOF5GgtWJSYZ5xJbUj_KtzI3f6j9pMyeJfc_A1fk8KIAi.X.2_I4aavz9ovKYK0MH4fXU02KjKrwQeAA3X4hmXeKZd5kcRShJrESmPSPecsRLVi5nMdo27PJEqC6CoCrU7kboAK.HGZKNH_E3gHxsoIZr6Mlt.47PTZjtjeBIucw17lCLzCvs_3aF5MWBDyg4TJvdnoQSvxkaDekRhU'}

Мы получили, что в среднем мы получаем нужный кук, с помощью которого потом можно ползать по сайту через запросы за примерно ~7-8 секунд, давайте посмотрим, сколько секунд нам предлагают уже готовые сайты

1727251689576.png


И на втором сайте к сожалению не было указано
1727251755560.png


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

Так-же стоит подметить, что в случае если вы будете использовать этот кук с user-agent, который не совпадает с тем, который был использован при решении, вы получите ровным счётом ничего, СF вас отбросит.
Python: Скопировать в буфер обмена
Код:
from curl_cffi import requests

cookies = {
    'cf_clearance': 'F5O4DSMh6OgREvS0wpQ1r69bByIKb.JVps.yCxRrO54-1726817174-1.2.1.1-SK12HabVngVW_DAG4vtZJN9PenblUVOgG8AbrpABO5kOt4VSIQGhon5KbREWf_RjNNeK_nfxQH3oxg21wMeayFhaSmMcakMk6iwrXbOtiatLx8GiHcNk0GNCvcMBbDpIJjKgaQ0YSG4.GVLTlvoZ3L5.Ozh9psyhDX0xWTtOakLP0zNtb.BcrtYrTBptRlWna8aBR4hP5_ikA0v6gXOZnbFdiFeggQJri11asFyU5WUdDLvaabLev8Et86ZLsWT1yaR5VgjSo4.rgSkPgbdqNfRM9U1rruxS2dWorhNt30Y2ElbH0Yq5j4HG2eAga.hbGCT5GIwX.3UoVvD1sn1w6eDD5AGaF1mPcYBLswVOuYol2jKi5k4LRq1otsrvNaXP.WpwweH.Z97QlEATlqSLl5GNkl2cz5uSV3H8tUEZgko'
    }

response = requests.get('https://notletters.com', cookies=cookies, impersonate = 'safari_ios')
print(response.text)

То есть, такой скрипт не сработает, нужно еще установить соответствующий 'User-Agent'.

Как из этого организовать свой сервис по решалке CF?
- Всё банально просто, докрутите к скрипту использование прокси, которые будет засылать клиент, так же добавьте возврат кукисов клиенту и хедеров, используемых при решении.
- Сделайте API для своего сервиса, подкрутите БД.

И в путь.

На этом можно закончить, у нас есть MVP, который работает и всё прекрасно. Если вам, что либо не понравилось, пишите об этом. В следующий раз, будем разбирать решалку IMG2TXT, конкретно, напишем свою CNN-модель.
 
Сверху Снизу