flask利用session身份偽造


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

python2和python3 session解密不一樣,而且不都是base64,腳本https://github.com/ZhangAiQiang/Flask/tree/master/%E8%A7%A3%E5%AF%86session%E8%84%9A%E6%9C%AC

參考文章:https://www.cnblogs.com/apossin/p/10083937.html

①首先需要知道的信息

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

②session偽造源碼(https://github.com/ZhangAiQiang/Flask/tree/master/flask-session身份偽造簡單源碼)

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

app=Flask(__name__)
app.config['SECRET_KEY']="HELLO WORD!"#session必須用到的密鑰,偽造身份的關鍵。


@app.route('/')
def index():
    try:
        username=session['username']
        return "hello,"+username    #判斷session里面是否有username的值,有的話就直接登陸狀態。
    except KeyError:     #捕獲異常,如果沒有session的值,會出現KeyError錯誤
        return render_template('login.html') #如果沒有session就跳轉登錄界面

@app.route('/login',methods=['POST','GET'])
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注入點
@app.errorhandler(404)
def page_not_found(e):
    template='''
        {%% block body %%}
        <div class="center-content error">
        <h1>Oops! That page doesn't exist.</h1>
        <h3>%s</h3>
        </div>
        {%% endblock %%}
    '''%(request.url)
    return render_template_string(template),404    
app.run(debug=True,port=8091)

③簡單的說一下代碼的功能:

  • 除了admin需要密碼,其他用戶愛咋地咋地。
  • 直接輸入ip一開始沒有session所以跳轉登錄界面,有了session就可以直接訪問ip看到歡迎信息
  • 想盡辦法偽造admin用戶

④先隨便用個qaq賬戶登陸下試試,登陸成功后##

打開控制台:

session的值為eyJ1c2VybmFtZSI6InFhcSJ9.Dxclgg.FMNAqa5Zk2wqg6S6WPyOQm-nU68  
其中eyJ1c2VybmFtZSI6InFhcSJ9為base64編碼后session的內容。  

解碼:

⑤如果我直接把qaq改成admin然后base64編碼一下不就可以直接登陸上去了?

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

⑥獲取密鑰的辦法:

ssti注入,信息泄露。

這里ssti怎么獲取就不說了,獲取密鑰要緊,以后再討論ssti,輸入ip/{{config}}

可以看到密鑰是HELLO WORLD!

⑦偽造session腳本

https://github.com/noraj/flask-session-cookie-manager

⑧burp抓包,替換session

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM