![](https://i-blog.csdnimg.cn/blog_migrate/2fe9e9d0f84ac7215c055353f41c48b1.png)
题目肯定ip有关,就可以想到可能与X-Forwarded-For,抓包一下
![](https://i-blog.csdnimg.cn/blog_migrate/eefec46dd3bb26ea6f8ad2acc417f32b.png)
发现这里的IP是可控的,这道题还考到了模板注入:
![](https://i-blog.csdnimg.cn/blog_migrate/ea2f55b18a8fbdc74ac9eb26fe82a177.png)
添加模板算法,{7*7}来判断一下,发现这里居然是SSTI注入(Flask可能存在Jinjia2模版注入漏,PHP可能存在Twig模版注入漏洞)
知识点:SSTI是什么? 就是服务器端模板注入(Server-Side Template Injection),实际上也是一种注入漏洞。
引发SSTI的真正原因:render_template渲染函数的问题。渲染函数在渲染的时候,往往对用户输入的变量不做渲染。也就是说例如:{{}}在Jinja2中作为变量包裹标识符,Jinja2在渲染的时候会把{{}}包裹的内容当做变量解析替换。比如{{1+1}}会被解析成2。如此一来就可以实现如同sql注入一样的注入漏洞。
![](https://i-blog.csdnimg.cn/blog_migrate/399eb0ad7cfc34d6f84bf5a831a811ab.png)
模版中算式被成功执行,尝试一下系统命令:{system('ls')},发现是可以使用的
![](https://i-blog.csdnimg.cn/blog_migrate/eae53b822a74254187165e9480925a76.png)
尝试{system('cat /')}
![](https://i-blog.csdnimg.cn/blog_migrate/5f21d3a076f3ae185f862b4000f7a703.png)
在/目录下查找到flag,读取flag,{system('cat /flag')}
![](https://i-blog.csdnimg.cn/blog_migrate/fb32a53c6eb486b3c6bf60681e42b8d0.png)
获得flag!