想研究很久了,這次終於初步了解了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令牌是一種分布式的跨域驗證機製造。其允許跨...