未公开
想起来这是前几年在湖里打的印象比较深刻的题目,难度不大,但是非常有意思,最后做出来用的是一个非预期的做法。
题面这里已经找不到当年的题面了,但是业务逻辑非常简单。这里尝试描述下。
主界面大概长这样。输入一段groovy代码并执行。
执行失败,这里打开一个不存在的文件。
成功执行。可惜没有给stdout。
一些危险的代码会被过滤掉,例如 execute 。估计不止字符串过滤。
过滤绕过由于题目并没有给具体的过滤规则,因此只能直接尝试了。最后试出来,下面的代码可以获取flag中的信息,但是没有信息返回到前端。
123File file = new File("flag")x=file.textprintln(x)
事实上根据官方题解,可以通过 UTF-8 进行字符绕过。据说使用 Groovy 自带的API也行。
事实上如果是现在的我,可能直接尝试反弹shell了,然而当时没有vps。
正常解法可以看官方解析,反正我是看不太懂。不会一点web和misc/(ㄒoㄒ)/~~
...