Struts2 Webconsole.html页面Ognl调试流程

OGNL Console

Struts2的开发者模式相信很多Struts2的开发人员都很熟悉了,在这种模式中,如果你发出一个HTTP请求,会生成冗余的日志,资源重新加载,避免我们每次改变属性、校验器或者其他东西后都需要重启服务器。

Struts2 Webconsole.html 页面暴露到底是不是漏洞?

参考:Struts2的webconsole.html(OGNL console)利用

结论

  • 这是调试功能,只有在调试模式下才能使用。
  • struts/webconsole.html的调试功能只有在启用了调试参数的情况下才会生效,否则即使看到此页面,也不具有调试的功能。
  • 只有在开启了Debug模式且ClassPath中使用了struts2- dojo-plugin-*.jar的情况下,webconsole.html页面才有可能存在安全漏洞的风险

Struts2 支持的几种调试方式

  • xml
  • console
  • command
  • browser

比较关注的是console 这种形式,它提供了一个Ognl表达式的shell。

webconsole.html是否能交互

访问struts/webconsole.html,使用浏览器开发者工具

s2_02

webconsole.html页面中加载了几个js脚本

  • 老版本:使用Dojo的js框架来完成请求和应答处理
  • 新版本:使用jQuery框架来完成请求和应答处理

Webconsole.html提交事件如何触发

Webconsole.html页面调用的javascript函数为keyEvent(event),它存在于webconsole.js中,其关键代码如下图:

20161217012342

var the_url = url ? url : window.opener.location.pathname;

注意代码中the_url赋值是从父窗体取变量,所以通过浏览器直接访问struts/webconsole.html页面取不到这个值,浏览器会报异常。通常会以为这个页面没有激活:

f12js

webconsole.html流程

webconsole.html——>Debug——>OGNL表达式——>Struts2 Action

利用前提

  • URL是以action结尾的(http://ip:port/app_name/xxx.action)
  • 集成于com.opensymphony.xwork2.ActionSupport (类似S2-032)

正确利用

如果目标网站devMode=true,在任意一个action后面加载debug=console就会进入到下面的逻辑,此时前端可以拿到pathname这个值,可以进行正常交互。

http://192.168.1.108:8081/example/HelloWorld.action?debug=console

js

通过抓包可以看到console的实现也是走的command模式:

zhuabao

codejs

Struts2沙盒拦截

shaxiang

webconsole执行代码:

利用st2-029漏洞的bypass struts2的安全管理器

20161217013822

POC地址:Struts2-S2-029漏洞分析

st2sx

st2.5.5沙盒不能覆盖

st2-5-5

设置devMode=false,重新部署项目,这个页面也是可以直接访问的!

结论

漏洞能否利用取决于devMode是否开启,webconsole.html知识一个html页面而已,生产项目中是还是建议删除。

参考

Struts2的webconsole.html(OGNL console)利用

原创文章,作者:0c0c0f,如若转载,请注明出处:http://www.mottoin.com/article/web/94199.html

发表评论

登录后才能评论

联系我们

021-62666911

在线咨询:点击这里给我发消息

邮件:root@mottoin.com

工作时间:周一至周五,9:30-18:30,节假日休息

QR code