攻防世界-web-Confusion1(python模板注入SSTI、沙箱逃逸)


題目來源:XCTF 4th-QCTF-2018
題目描述:某天,Bob說:PHP是最好的語言,但是Alice不贊同。所以Alice編寫了這個網站證明。在她還沒有寫完的時候,我發現其存在問題。(請不要使用掃描器)

進入界面

首頁是一張圖片,蛇纏住了大象,猜測此系統使用了php+python,並且是Python代碼問題(php的標志是大象,Python的標志是蛇)。

進入登錄和注冊頁面均報404,不過在源碼錯誤信息中提示了flag的位置。

然后就沒有其他信息了。

 

猜測本題存在Python SSTI漏洞,驗證一下,在url后面添加{{1+1}},回車顯示如下

界面返回2,我們輸入的1+1被執行了,說明服務器執行了{{}}里面這一段代碼,存在SSTI漏洞。

猜測這里使用的應該是 Python 的 Flask 框架( Flask 使用 Jinja2 作為模板引擎 ) 。

所以本題的思路就是,利用SSTI讀取flag文件。

嘗試使用經典payload直接讀取flag

''.__class__.__mro__[2].__subclasses__()[40]('/opt/flag_1de36dff62a3a54ecfbc6e1fd2ef0ad1.txt').read()

報錯

說明系統進行了過濾。

經過嘗試,發現系統過濾了class、 subclasses、 read等關鍵方法。

但是並未過濾request。

request 是 Flask 框架的一個全局對象 , 表示 " 當前請求的對象( flask.request ) " 。

所以我們可以利用request.args繞過輸入黑名單,進行沙箱逃逸。

沙箱逃逸,就是在給我們的一個代碼執行環境下(Oj或使用socat生成的交互式終端),脫離種種過濾和限制,最終成功拿到shell權限的過程。其實就是闖過重重黑名單,最終拿到系統命令執行權限的過程。

payload如下

{{''[request.args.a][request.args.b][2][request.args.c]()[40]('/opt/flag_1de36dff62a3a54ecfbc6e1fd2ef0ad1.txt')[request.args.d]()}}?a=__class__&b=__mro__&c=__subclasses__&d=read

得到flag

 

SSTI學習:https://www.guildhab.top/?p=1248

參考:https://blog.csdn.net/qq_41954384/article/details/103830832

 


免責聲明!

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



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