[RootersCTF2019]I_<3_Flask
前言
写这篇文章的时候,这道题已经是前一天做的了,虽然题目很简单,但是这次还是学到了一些新的东西。之前,在安装tplmap的时候遇到了一些麻烦导致我这里一直都用不了tplmap。这次的题目我去看了看大师傅们写的WP,看到很多师傅们都在用tplmap,索性我就直接下定决心要把tplmap搞好。当然就这道题来讲,还不是那种非用不可的水平,很简单的一道题目,手注就行。
正文
手注
首先拿到道题目,截图如下。
打开题目没什么思路,于是去看了看别人的WP,发现大师父们都在用一个叫arjun的参数爆破脚本。于是在kali中用arjun进行爆破。
发现了一个get请求的参数name,于是向里面随便传一个参数。
可以看到里面有回显,所以猜测这里存在SSTI,用{{1}}测试一下。
看来是真的存在了,这里用如下的payload,去列一下目录。
{%%20for%20c%20in%20[].__class__.__base__.__subclasses__()%20%}{%%20if%20c.__name__==%27catch_warnings%27%20%}{{c.__init__.__globals__.__builtins__[%27eval%27]("__import__(%27os%27).popen(%27dir%27).read()")}}{%%20endif%20%}{%%20endfor%20%}
这里要解释一下为什么要用这个payload,因为在我进行注入尝试的时候发现我之前可以利用的一些类在这道题的环境里面不是同一个位置,也就是说我无法通过之前积累的subclasses中的一些位置来定位可用类,只能通过这种现找的方式。结果如下
然后就是将上面的payload稍微改一下,将里面的命令改成cat flag.txt然后就行了。
上脚本
emm,事实上题目在刚才就已经结束了,但是这道题对我来说最大的收获还是关于脚本的使用。所以接下来介绍利用tplmap进行脚本注入的过程。
上面的结果显示,这个url是可以进行SSTI的,所以我们尝试直接获得他的shell
加上–os-shell参数,我们可以通过tplmap直接获取它的shell。结果如下
后记
最近学校的课程开始多起来了,我感觉应该是保持不住之前的更新频率了,只能等这阵子过去了。作业实在是太多了。