经典SSTI有总结吗

极客

经典SSTI有总结吗?我踩坑三年后,终于把这事儿说明白了

说真的,这个问题我被问了不下五十遍——“经典SSTI有总结吗?”

经典SSTI有总结吗

每次看到有人这么问,我都忍不住笑一下,不是笑提问的人,是笑我自己,因为我当年也是这么问别人的,而且问的时候还特别理直气壮,觉得这玩意儿肯定有人整理好了,我直接拿来用就行呗,结果呢?踩了一堆坑,绕了一大圈,最后发现——有总结,但没人告诉你“怎么用”才是关键

今天我就掏心窝子跟你聊聊,经典SSTI(Server-Side Template Injection,服务端模板注入)到底有没有一个靠谱的总结,以及我这些年是怎么从“一脸懵”到“勉强能打”的。

先说结论:有,但别指望一份总结走天下

你要是去搜“经典SSTI有总结吗”,网上能蹦出来一堆文章,什么Flask/Jinja2、Twig、Freemarker、Velocity……每个模板引擎都有自己的payload大全,看着挺全对吧?但我跟你说,那些总结最大的问题就是——它们默认你已经知道自己在干嘛了

我举个自己的例子,刚学SSTI那会儿,我照着某篇“经典总结”抄了个payload,兴冲冲地往目标上一打,结果返回一个500错误,我当时就懵了:不是说这payload通杀吗?怎么到我这儿就歇菜了?

后来我才明白,SSTI不是背单词,是学语法,你光背“{{7*7}}”能弹49,那只是幼儿园水平,真正的总结应该告诉你:为什么是49?什么情况下49出不来?出不来的时候你该往哪个方向想?

那些“经典总结”里没告诉你的事

我翻过不少所谓的SSTI总结文章,说实话,大部分都长一个样:先贴一段漏洞代码,再列几个payload,最后来一句“根据回显判断模板类型”,然后就没了。

没了?!

你知道我第一次遇到不回显的SSTI有多崩溃吗?页面白茫茫一片,啥反应没有,我对着那篇“经典总结”看了半小时,上面压根没提“不回显怎么办”,后来还是在一个犄角旮旯的英文博客里看到——哦,原来可以玩盲注,用时间延迟来判断。

还有一次更绝的,我遇到一个Freemarker的SSTI,按照某篇总结里的payload打过去,直接报错,报错信息里倒是挺大方,把模板路径都给我吐出来了,我心想这不稳了吗?结果换了好几个payload,要么被WAF拦,要么执行不了,最后发现是沙箱限制——那篇总结里只字未提沙箱这回事。

所以你说,经典SSTI有总结吗?有,但那些总结就像菜谱——告诉你放盐少许、糖适量,可“少许”到底是多少?“适量”又是多少?全凭你自己悟。

我自己的SSTI总结思路(纯个人经验)

既然网上的总结靠不住,我干脆自己整理了一套,不敢说多全,但至少能让你少走点弯路。

第一步,别急着打payload,先判断模板类型。 我一般会发几个不同的探测字符,比如${7*7}{{7*7}}<%= 7*7 %>,看哪个能算出49,这一步网上总结都有,但我要多说一句:别忘了看报错信息,有时候回显是空的,但报错里会暴露模板引擎的名字,这比盲猜快多了。

第二步,根据模板引擎找对应的利用链。 这里才是真正考验功底的地方,比如Jinja2,你得知道__class____mro____subclasses__这一套;Twig呢,版本不同利用方式还不一样,我建议你自己搭个环境,把每个模板引擎都装一遍,亲手打一遍payload,别光看总结,看十遍不如打一遍。

第三步,遇到过滤怎么办? 这又是那些“经典总结”最爱忽略的部分,我遇到过把过滤了的,把过滤了的,甚至把都给你吞了的,这时候就得动脑子了——用request.args传参、用attr绕过、用|join拼接……这些技巧分散在各处,你得自己攒。

最后说点掏心窝子的话

我知道你搜“经典SSTI有总结吗”,是想要一份能直接用的东西,但说真的,SSTI这东西,总结再多不如自己动手,你看一百篇总结,不如自己搭个Flask环境,把Jinja2的利用链从头到尾打一遍,那个过程中你遇到的坑、踩的雷、想出来的绕过的姿势,才是真正属于你的“。

别迷信什么“经典payload大全”,那些东西更新慢得很,新版本一出来可能就失效了,我现在的习惯是——关注几个靠谱的安全博客,比如PortSwigger的Research板块,再配合自己搭环境测试,这比任何一份静态的总结都管用。

哦对了,如果你手里有那种“特别全”的SSTI总结,欢迎甩我一份,我保证不照抄,我就想看看——是不是又跟以前一样,只告诉你怎么打,不告诉你打不通的时候怎么办,哈哈。

好了,今天就唠到这儿,如果你也在SSTI的坑里挣扎,别灰心,大家都是这么过来的,记住一句话:payload会过时,但思路不会

文章版权声明:除非注明,否则均为极客网安-咸鱼原创文章,转载或复制请以超链接形式并注明出处。

目录[+]