flask利用session身份偽造

2022-02-28 09:26:21 字數 1508 閱讀 1499

想研究很久了,這次終於初步了解了flask session偽造(得知道金鑰)。

python2和python3 session解密不一樣,而且不都是base64,指令碼

參考文章:

flask是把session存在客戶端的,而且只經過base64編碼和用金鑰簽名,雖然沒有有簽名不可以偽造session,但是有很多資訊我們可以直接從session解碼找出來。

from flask import flask,session,render_template,request,render_template_string

def index():

try:

username=session['username']

return "hello,"+username #判斷session裡面是否有username的值,有的話就直接登陸狀態。

except keyerror: #捕獲異常,如果沒有session的值,會出現keyerror錯誤

return render_template('login.html') #如果沒有session就跳轉登入介面

def login():

if request.method=='post':

username=request.form['username']

if username=='admin' and not password =="8sudehd7eageaade54": #使用者是不知道admin密碼的,這裡考慮session偽造。

return "密碼不對"

session['username']=username

return "hello,"+username

return render_template("login.html")

#ssti注入點

def page_not_found(e):

template='''

'''%(request.url)

return render_template_string(template),404

開啟控制台:

session的值為eyj1c2vybmftzsi6infhcsj9.dxclgg.fmnaqa5zk2wqg6s6wpyoqm-nu68  

其中eyj1c2vybmftzsi6infhcsj9為base64編碼後session的內容。

解碼:

不是的,後邊的內容是簽名,一開始說了,沒有金鑰沒法偽造身份就是因為這個簽名防篡改的作用。

ssti注入,資訊洩露。

這裡ssti怎麼獲取就不說了,獲取金鑰要緊,以後再討論ssti,輸入ip/}

可以看到金鑰是hello world!

可以看到成功的以admin身份登陸

關於Flask的預設session

flask的預設session利用了werkzeug的securecookie,把資訊做序列化 pickle 後編碼 base64 放到cookie裡了。過期時間是通過cookie的過期時間實現的。為了防止cookie內容被篡改,session會自動打上乙個叫session的hash串,這個串是經過...

Flask中的session機制

cookie 中,http請求是無狀態的,第一次和伺服器連線後並且登陸成功後,第二次請求伺服器依然不能知道當前請求是哪個使用者。cookie的出現就是解決了改問題,第一次登陸後伺服器返回資料 cookie是儲存資料的一種格式 給瀏覽器,然後瀏覽器儲存到本地,使用者第二次請求的時候,就會攜帶cooki...

flask之cookie與session區別

使用者身份校驗是web訪問時的重要步驟。常用的身份校驗方式有cookie,session和jwt三種。其中cookie和session是較傳統的校驗方式,其採用將使用者資訊儲存在伺服器或瀏覽器中,使用者訪問時,攜帶相關資訊,有伺服器進行校驗。最近流行的jwt令牌是一種分布式的跨域驗證機製造。其允許跨...