[TOC]

今天收获比较大的就是这一道模板注入题:cookie is so subtle

我是在ctfhub上寻找关于cookie的题目时发现的,后来发现BUUCTF也有这道题,就复现了一遍。

第一步、审查发现漏洞:

主界面是BJDCTF,界面正常,源码检查一下,看了一下cookie也没大问题:

image-20210822102707008

Flag界面提示输入ID(Username)进行提交,

image-20210822102805846

检查源码,也没发现问题,cookie正常:

image-20210822103159775

尝试输入一波:

image-20210822103355006

发现cookie中多出了一个user变量,且输入与回显一致,user这个地方存在问题。

image-20210822103520071

最后是Hint界面,页面未见提示,但是在源码中发现

Why not take a closer look at cookies?

更加使我确信cookie中user变量存在问题,并且它对应的界面正是flag.php。

image-20210822104252014

第二步、漏洞利用:

首先对flag.php界面进行抓包:

image-20210822105820761

查询一番过后发现是模板注入(SSTI)

验证是否为SSTI:

image-20210822110505996

image-20210822110525146

验证通过!!!

接下来判断是jinja2模板还是死Twig模板:(其实在判断为SSTI下的php页面就已经确定其为Twig)

判断方法:

如果输入NaN如果 输出7777777 则是jinja2模板 如果是 49 则是 twig模板

这里输出了49 则这是 twig模板注入了:

image-20210822111455914

image-20210822111532177

接下来调用模板payload就可以了:

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

第三步、总结:

SSTI问题是服务器端常常面临的一个问题,它主要面临的威胁就是在未过滤下会直接回显引擎得到的解析,在这一点上有点类似SQL注入。