本人初学SSTI,知识很有限,只能以新手的角度解析这道题
解题步骤
1.打开题目链接, 出现以下页面
提示需要传入一个名为flag的参数,题目又叫SSTI,从而得到了可以使用模板注入的基本条件
2.根据经验,一般secret-key中存在有价值的东西,或者说在config中,从而构建url:http://114.67.246.176:18558/?flag={{config}}
得到如下页面
看到secret_key中存在着flag
如果理解了题目的含义,那么也可以构建如下url:http://114.67.246.176:18558/?flag={{config.SECRET_KEY}}
从而直接获取config里面secret_key变量的值,也就是flag
总结:这是一个关于python和jinja 2的极为基础的ssti模板注入题目,只需要了解基础的jinja语法和网页页面渲染方式。就是通常用户需要提交一个姓名到网页,然后这个网页就会出现你每次访问,出现hello,某某某的效果。而如果有ssti的漏洞,那么我们在提交姓名时,提交一个恶意代码,在这里是jinjia 2引擎,我们提交一个jinjia2语句,然后jinjia2引擎就会渲染解析这个语句,而jinjia 2语句里面又会套用python语句,总而言之利用这些语句我们可以查看敏感信息,代码执行或者getshell。根据经验,我们一般会查看config信息,在这个题目中告诉了我们flag是可以传入的ssti模板注入点,利用它获取config信息,而网页源码也有提示是在secretkey处有猫腻。类似于xss的代码执行,由于我们在url中传入的参数flag的值为一个jinjia 2语句{{ }},这是一个变量语句,其中有函数config,通过网页的二次渲染执行了这个语句,从而得到了想要的信息
彩蛋:我们一般也会查看网页源代码,可以看到以下提示
他告诉了你是flask模板,同时一般会设置一个secret_key这样一个变量