mirror of
https://github.com/9001/copyparty.git
synced 2025-08-16 08:32:13 -06:00
88 lines
2 KiB
Python
88 lines
2 KiB
Python
#!/usr/bin/env python3
|
|
|
|
import itertools
|
|
import re
|
|
import sys
|
|
import time
|
|
|
|
from copyparty.authsrv import AuthSrv
|
|
from copyparty.httpcli import HttpCli
|
|
|
|
from . import util as tu
|
|
from .util import Cfg
|
|
|
|
atlas = ["%", "25", "2e", "2f", ".", "/"]
|
|
|
|
|
|
def nolog(*a, **ka):
|
|
pass
|
|
|
|
|
|
def hdr(query):
|
|
h = "GET /{} HTTP/1.1\r\nCookie: cppwd=o\r\nConnection: close\r\n\r\n"
|
|
return h.format(query).encode("utf-8")
|
|
|
|
|
|
def curl(args, asrv, url, binary=False):
|
|
conn = tu.VHttpConn(args, asrv, nolog, hdr(url))
|
|
HttpCli(conn).run()
|
|
if binary:
|
|
h, b = conn.s._reply.split(b"\r\n\r\n", 1)
|
|
return [h.decode("utf-8"), b]
|
|
|
|
return conn.s._reply.decode("utf-8").split("\r\n\r\n", 1)
|
|
|
|
|
|
def genlen(ubase, ntot, nth, wlen):
|
|
args = Cfg(v=["s2::r"], a=["o:o", "x:x"])
|
|
asrv = AuthSrv(args, print)
|
|
# h, ret = curl(args, asrv, "hey")
|
|
|
|
n = 0
|
|
t0 = time.time()
|
|
print("genlen %s nth %s" % (wlen, nth))
|
|
ptn = re.compile(r"2.2.2.2|\.\.\.|///|%%%|\.2|/2./|%\.|/%/")
|
|
for path in itertools.product(atlas, repeat=wlen):
|
|
if "%" not in path:
|
|
continue
|
|
path = "".join(path)
|
|
if ptn.search(path):
|
|
continue
|
|
n += 1
|
|
if n % ntot != nth:
|
|
continue
|
|
url = ubase + path + "fa"
|
|
if n % 500 == nth:
|
|
spd = n / (time.time() - t0)
|
|
print(wlen, n, int(spd), url)
|
|
|
|
hdr, r = curl(args, asrv, url)
|
|
if "fgsfds" in r:
|
|
with open("hit-%s.txt" % (time.time()), "w", encoding="utf-8") as f:
|
|
f.write(url)
|
|
raise Exception("HIT! {}".format(url))
|
|
|
|
|
|
def main():
|
|
ubase = sys.argv[1]
|
|
ntot = int(sys.argv[2])
|
|
nth = int(sys.argv[3])
|
|
for wlen in range(20):
|
|
genlen(ubase, ntot, nth, wlen)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
try:
|
|
main()
|
|
except KeyboardInterrupt:
|
|
pass
|
|
|
|
|
|
"""
|
|
nice pypy3 -m tests.ptrav "" 2 0
|
|
nice pypy3 -m tests.ptrav "" 2 1
|
|
nice pypy3 -m tests.ptrav .cpr 2 0
|
|
nice pypy3 -m tests.ptrav .cpr 2 1
|
|
(13x faster than /scripts/test/ptrav.py)
|
|
"""
|