Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
anubis-fetch — Как curl, но обходит бот-защиту Anubis и Cloudflare. | Kitploit
Инструменты/GitHubGitHub/fzakaria/anubis-fetch
Скриптинг и автоматизацияОбход WAFВеб-безопасностьУтилиты и фреймворкиАнти-БотПодмена Цифрового Отпечатка
GitHubfzakaria/anubis-fetch

anubis-fetch

Как curl, но обходит бот-защиту Anubis и Cloudflare.

Репозиторий
3011 месяц назадПроверено Kitploit

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

anubis-fetch

Built with Nix CI License: MIT

root@kitploit:~
$ nix run github:fzakaria/anubis-fetch -- https://lore.kernel.org/linux-mm/some-thread/T/

Быстрый CLI (на Go) для получения URL из-за стен proof-of-work Anubis и проверок отпечатков Cloudflare — решает challenge внутри процесса и обращается к настоящему браузеру, только когда это необходимо.

Всё больше сайтов — lore.kernel.org, GNOME, kernel.org и многие другие — находятся за Anubis, бот-стеной, которая заставляет ваш браузер решать proof-of-work на SHA-256, прежде чем отдать какой-либо контент. Она отлично останавливает скраперов. Но она также отлично останавливает вас, когда вы просто хотите получить ветку списка рассылки через curl:

root@kitploit:~
$ curl -s https://lore.kernel.org/linux-mm/some-thread/T/ | grep -o '<title>.*</title>'
<title>Making sure you&#39;re not a bot!</title>   # 🤢

anubis-fetch возвращает вам реальную страницу:

root@kitploit:~
$ anubis-fetch https://lore.kernel.org/linux-mm/some-thread/T/ | grep -o '<title>.*</title>'
<title>[PATCH 0/2] ...</title>                     # 🥳

Как это работает

Бот-стены работают на двух разных уровнях, и anubis-fetch обрабатывает оба, начиная с самого дешёвого шага:

  1. Повторное использование сохранённой cookie. Anubis выдаёт подписанную auth-cookie (techaro.lol-anubis-auth) после того, как вы один раз прошли проверку; при следующем визите браузер не проходит проверку заново — и мы тоже. Cookies сохраняются для каждого хоста (см. Сохранение cookie).
  2. Решение proof-of-work внутри процесса. Запрос отправляется через req, имитирующий настоящий Chrome — тот же отпечаток TLS/JA3 + HTTP/2, — что также обходит пассивную проверку отпечатков Cloudflare. Если в ответе оказался challenge от Anubis, мы перебором подбираем nonce и отправляем его. Без браузера, ~0.6s.
  3. Откат к настоящему браузеру. Для всего, что не может сделать быстрый путь, мы управляем headless Chromium через chromedp, который выполняет любой JavaScript, отдаваемый сайтом.

[!NOTE] Откат срабатывает для: методов challenge preact / metarefresh от Anubis, неизвестного/будущего метода, слишком высокой для перебора сложности, отклонённого решения, или активного JS-challenge от Cloudflare (Managed Challenge / Turnstile / "I'm Under Attack"). Имитация обходит пассивную проверку Cloudflare; активные JS-уровни обходит только браузер. Поэтому anubis-fetch становится «медленнее», но никогда не «ломается».

Почему бы просто не использовать браузер для всего?

Потому что это ~4× медленнее и тащит ~200 МБ Chromium в каждый запрос. Внутрипроцессный решатель — обычный случай; браузер — страховочная сеть.

ПутьВремя ожиданияНужен Chromium
Решатель (Anubis proof-of-work)~0.6sнет
Откат к браузеру~2.0sда

Кратко о proof-of-work Anubis

Anubis встраивает challenge в страницу в виде JSON:

root@kitploit:~
{"rules":{"algorithm":"fast","difficulty":4},
 "challenge":{"id":"…","method":"fast","randomData":"6214bd88…","difficulty":4}}

Решение означает поиск такого nonce, чтобы hex(sha256(randomData ‖ nonce)) начинался с difficulty нулей (nonce — это его строковое представление в base-10). Затем мы отправляем ответ обратно:

root@kitploit:~
GET /.within.website/x/cmd/anubis/api/pass-challenge?id=…&response=<hash>&nonce=<n>&redir=<url>&elapsedTime=<ms>

…что устанавливает auth-cookie и перенаправляет на реальную страницу. Сложность 4 (значение по умолчанию на lore/kernel.org/GNOME) — это ~65k хешей, что занимает в Go менее миллисекунды.

Установка

Запустите напрямую:

root@kitploit:~
$ nix run github:fzakaria/anubis-fetch -- <url>

Установите в свой профиль:

root@kitploit:~
$ nix profile install github:fzakaria/anubis-fetch

Или добавьте его в свой flake:

root@kitploit:~
{
  inputs.anubis-fetch.url = "github:fzakaria/anubis-fetch";
  # then, e.g. in home.packages / environment.systemPackages:
  #   inputs.anubis-fetch.packages.${system}.default
}

Использование

root@kitploit:~
$ anubis-fetch [flags] URL
root@kitploit:~
# HTML to stdout
$ anubis-fetch https://lore.kernel.org/linux-mm/some-thread/T/

# readable plain text
$ anubis-fetch --text https://lore.kernel.org/linux-mm/some-thread/T/

# lean/fast only — useful in scripts; exits 3 if it would need a browser
$ anubis-fetch --no-browser https://example.com/ && echo "got it"

Сохранение cookie

После успешного получения страницы auth-cookie записывается в $XDG_CACHE_HOME/anubis-fetch/cookies/<host>.json (с откатом на ~/.cache/…). Следующий запуск для этого хоста проходит без препятствий — без proof-of-work, без браузера — точно так же, как повторное посещение браузера. Cookies, полученные через откат к браузеру, тоже сохраняются, поэтому последующий запуск может пойти по быстрому HTTP-пути. Используйте --no-cache для отключения или просто удалите файл, чтобы принудительно решить заново.

Разработка

Всё настроено через flake:

root@kitploit:~
$ nix develop          # dev shell: go, gopls, chromium, treefmt
$ go test ./...        # unit tests (hermetic — no network)
$ nix build            # build the wrapped binary
$ nix flake check      # build + tests + formatting
$ nix fmt              # format Go + Nix via treefmt (gofmt + alejandra)

Реализация proof-of-work привязана к опубликованному самим Anubis тестовому вектору (sha256("hunter" + "0")), поэтому отклонение в конструкции хеша приводит к падению модульного теста, а не к молчаливому возврату мусора.

Предшественники и благодарности

  • TecharoHQ/anubis — бот-стена, с которой этот инструмент вежливо договаривается.
  • imroc/req — HTTP-клиент, чья имитация Chrome обходит пассивную проверку отпечатков Cloudflare.
  • chromedp/chromedp — управляет откатом к headless-браузеру.
Скачать инструмент
ФлагНазначение
--textвыводить читаемый обычный текст вместо HTML
--timeout MSтаймаут на каждом шаге в миллисекундах (по умолчанию 30000)
--ua STRINGпереопределить User-Agent
--browserпропустить решатель и сразу перейти к headless-браузеру
--no-browserникогда не использовать браузер; завершиться с кодом 3, если решение неприменимо
--no-cacheне читать и не записывать постоянное хранилище cookie