<menu id="guoca"></menu>
<nav id="guoca"></nav><xmp id="guoca">
  • <xmp id="guoca">
  • <nav id="guoca"><code id="guoca"></code></nav>
  • <nav id="guoca"><code id="guoca"></code></nav>

    Flask send_file函數導致的絕對路徑遍歷

    VSole2022-07-18 15:38:08

    平時接觸到的 python 項目并不多,對 python 的代碼審計更是沒有接觸,偶然朋友發來了一個漏洞 Flask send_file函數導致的絕對路徑遍歷 ,感覺打開了新世界的大門,于是就以一個初學者的角度,進行復現分析一下。詳情也可以根據 Python : Flask Path Traversal Vulnerability 進行分析學習

    send_file 的妙用

     在以 flask 框架開發的系統中,為了直接實現用戶訪問某一個 URL 時就可以下載到文件,我們就使用 send_file 來實現

    from flask import Flaskfrom flask import send_file
    app = Flask(__name__)
    @app.route('/download')def downloadFile():    path = "test.txt"    return send_file(path)
    if __name__ == '__main__':    app.run()
    

     

    我們看到 如此運行的效果是直接返回了文件的內容,瀏覽器并沒有識別成一個文件下載下來。

    要想讓瀏覽器識別成為文件下載的話,只需要加上as_attachment=True

    from flask import Flaskfrom flask import send_file
    app = Flask(__name__)
    @app.route('/download')def downloadFile():    path ="test.txt"    return send_file(path, as_attachment=True)
    if__name__=='__main__':    app.run()
    


     

     

     當下載的文件名是中文時

    from flask import Flaskfrom flask import send_file
    app = Flask(__name__)
    @app.route('/download')def downloadFile():    path ="測試.txt"    return send_file(path, as_attachment=True)
    if__name__=='__main__':    app.run()
    

     

    Content-Disposition:

     Content-Disposition

     在常規的 HTTP 應答中,Content-Disposition 響應頭指示回復的內容該以何種形式展示,是以內聯的形式(即網頁或者頁面的一部分),還是以附件的形式下載并保存到本地。其可以是inline(默認值,所以可以不指定)或者是attachment,attachment表示附件,瀏覽器看到這個值一般會彈出一個保持文件的確認框,或者像chrome直接下載。

     

     

     

    漏洞分析

     漏洞的觸發是在 send_file 中,我們跟進看一下

     flask.helpers.send_file

     

     繼續跟進查看

     werkzeug.utils.send_file

     

     我們在本地構造一個簡單的語句進行嘗試

    >>>import os.path>>> _root_path ="path/to/mySafeStaticDir">>> path_or_file ="/../../../../../../../etc/passwd">>> os.path.join(_root_path,path_or_file)'/../../../../../../../etc/passwd'
    


     

     我們發現 os.path.join 使用不受信任的輸入調用時不安全的。當 os.path.join 調用遇到絕對路徑時,它會忽略在該點之前遇到的所有參數并開始使用新的絕對路徑。當參數可控時,我們控制惡意參數輸入絕對路徑,os.path.join 會完全忽略靜態目錄。所以,當 os.path.join 來獲取來自 flask.send_file 的不受信任的輸入時,可能會目錄遍歷攻擊。

    漏洞復現

     我們在本地構造簡單的代碼進行測試,獲取從外部傳入的參數 filename

    from flask import Flask, requestfrom flask import send_file
    app = Flask(__name__)
    @app.route('/download')def downloadFile():    filename = request.args.get('filename')    return send_file(filename, as_attachment=True)
    if__name__=='__main__':    app.run()
    


     通過控制 filename 為絕對路徑,就實現了目錄穿越漏洞

     

     

     

    總結反思

    這個漏洞非常的有趣,漏洞的修復是可以使用flask.safe_join加入不受信任的路徑或用flask.send_file調用替換flask.send_from_directory調用。

    這個漏洞雖然很簡單,但是在 github 上很多用 python 開發的項目都用了這個函數,如果不加以修復,會造成很大的危害。

    flask絕對路徑
    本作品采用《CC 協議》,轉載必須注明作者和本文鏈接
    平時接觸到的 python 項目并不多,對 python 的代碼審計更是沒有接觸,偶然朋友發來了一個漏洞 Flask send_file函數導致的絕對路徑遍歷 ,感覺打開了新世界的大門,于是就以一個初學者的角度,進行復現分析一下。
    MTCTF-2022 部分WriteUp
    2022-11-23 09:35:37
    MTCTF 本次比賽主力輸出選手Article&Messa&Oolongcode,累計解題3Web,2Pwn,1Re,1CryptoWeb★easypickle題目給出源碼:。import base64import picklefrom flask import Flask, sessionimport osimport random. @app.route('/')def hello_world(): if not session.get: session['user'] = ''.join return 'Hello {}!\x93作用同c,但是將從stack中出棧兩元素分別導入的模塊名和屬性名:此外對于藍帽杯WP還存在一個小問題,原題采用_loads函數加載pickle數據但本題是loads,在opcodes處理上會有些微不通具體來說就是用loads加載時會報錯誤如下:對著把傳入參數換成元組就行,最終的payload如下
    1、文檔連接釣魚 1)LINK鏈接釣魚 2)LINK快捷方式釣魚 3)CHM文檔釣魚 CHM文檔bypass waf 4)HTA釣魚 5)宏釣魚 宏釣魚 bypass waf 6)OLE(Object Linking and Embedding,對象鏈接與嵌入) 7)嵌入JS元素 8)利用模板文件注入宏指令 9)CVE 2、偽造界面釣魚 1)PPT動
    之前有看到goby反制和松鼠A師傅蟻劍反制的文章,再想到之前寫過sqlmap的shell免殺,覺得思路其實差不多,就寫一篇sqlmap的反制吧。
    服務器的相關信息(真實ip,系統類型,版本,開放端口,WAF等) 網站指紋識別(包括,cms,cdn,證書等),dns記錄 whois信息,姓名,備案,郵箱,電話反查(郵箱丟社工庫,社工準備等) 子域名收集,旁站,C段等 google hacking針對化搜索,pdf文件,中間件版本,弱口令掃描等 掃描網站目錄結構,爆后臺,網站banner,測試文件,備份等敏感文件泄漏等 傳輸協議,通用漏洞,ex
    前言最近一段時間在研究Android加殼和脫殼技術,其中涉及到了一些hook技術,于是將自己學習的一些hook技術進行了一下梳理,以便后面回顧和大家學習。主要是進行文本替換、宏展開、刪除注釋這類簡單工作。所以動態鏈接是將鏈接過程推遲到了運行時才進行。
    避免網站顯示SQL錯誤信息,比如類型錯誤、字段不匹配等,防止攻擊者利用這些錯誤信息進行一些判斷。
    ?上整理的?試問題?全,有些 HW ?試的題,已經收集好了,提供給?家。
    apache一些樣例文件沒有刪除,可能存在cookie、session偽造,進行后臺登錄操作
    漏洞原因 服務器模板注入 是一種利用公共 Web 框架的服務器端模板作為攻擊媒介的攻擊方式,該攻擊利用了嵌入模板的用戶輸入方式的弱點。SSTI 攻擊可以用來找出 Web 應用程序的內容結構。漏洞復現 /vulhub/flack/ssti //進入到ssti的目錄下 up -d && docker-compose build // 加載環境并運行3.然后在瀏覽器上訪問http://your-ip:80004、訪問http://your-ip/?name={{233*233}},得到54289,說明SSTI漏洞存在。
    VSole
    網絡安全專家
      亚洲 欧美 自拍 唯美 另类