思维导图
案例1:过滤器及拦截器相关区别解释
过滤器&拦截器区别:
案例2:Struts2-016远程代码执行漏洞分析-黑盒流程
struts执行流程
术语解释:
Struts2详细执行流程自己总结:https://blog.csdn.net/qq_33322074/article/details/80137667
Struts2 有漏洞,一般在传统企业会用一点,比如:物流,erp 等 ,面试的时候要求你了解Struts的执行流程 ,真实工作开发中一般用的少一些。BS架构web项目SpringMVC ,SpringBoot,SpringCloud 企业中用的相对多一些。
Struts2-016远程代码执行漏洞官方描述:
struts2的defaultActionMapper支持一种方法,可以使用“action:”,“redirect:”,“redirectAction:”对输入信息进行处理,从而改变前缀参数,这样操作的目的是方便表单中的操作。在2.3.15.1版本以前的struts2中,没有对“action:”,“redirect:”,“redirectAction:”等进行处理,导致ongl表达式可以被执行。
该漏洞利用st2特性:1.路由;2.ONGL表达式;3.执行流程
断点调试查看执行代码文件分析
根据st2框架执行流程测试:对比上图
<1>查看web.xml可知,所有的.action请求都经过struts2过滤器
<2>断点调试,未触发关键字-断点文件-调试到过滤器
在rasp.jsp页面第一行代码处打一个断点
发送一个普通请求(未触发关键字),发现调试到过滤器,执行了execute方法
<3>断点调试,触发关键字-断点文件-未调试到过滤器
同样在rasp.jsp页面第一行代码处打一个断点
发送一个包含关键字redirect的请求(触发关键字),发现未调试到过滤器,也未执行execute方法
总结漏洞成因,简单来说,结束本来所有.action请求都经过过滤器,执行execute方法,但是由于st2框架自身特性,当请求中有redirect、redirectAction、method、action四个关键字时,请求会绕过过滤器,直接与系统交互,从而造成漏洞。
分析审计思路:
1.获取配置信息:过滤器(拦截器),框架包,触发请求,框架特性(ognl,路由等)
2.打开st2对应过滤器,配合st2路由配置文件,解读:
分析开源框架的漏洞还是从其源码入手,问题出在了DefaultActionMapper上,这个类主要是用来处理一些灵活的URL调用,比如处理Action中动态调用方法的形式,如
http://www.foo.com/bar/hello.action?foo!bar
foo!bar这种形式是动态的调用action中的方法,其中foo是action,bar是方法名,但是调用的前提是在strtus.xml中事先进行配置。当然这只是一种,这个类还有个重要的作用就是处理redirect、redirectAction、method、action
method用来动态指明调用的方法,如调用hello中的execute方法,则可以传入url为:http;//www.foo.com/bar/hello.action?method:execute。
action用来指定其他的action,有了这个前缀,URL中的默认Action的execute方法不会被执行,而是执行其他action中的execute方法。
redirect一旦写定,同样不会执行默认action中的execute方法,而是重定向到其他的页面,内部通过ServletRedirectResult完成执行。
redirectAction同样会屏蔽默认action的方法,而是重定向到其他的Action,同样依靠ServletRedirectResult实现任务。
至于为什么redirect后面的东西就会当做Ognl执行呢? 参考 Struts2漏洞之S2-016漏洞分析与exp编写:https://blog.csdn.net/u011721501/article/details/41735885
OGNL,全称叫Object Graphic Navigation Language(对象图导航语言),是应用于Java中的一个开源的表达式语言(Expression Language),它被集成在Struts2等框架中,作用是对数据进行访问,它拥有类型转换、访问对象方法、操作集合对象等功能。
总之,S2-016的根本原因就是没有对几个前缀的后面进行严格的过滤,导致黑客可以传入符合Ognl表达式语法规则的字符串,使得Struts2将其当做Ognl表达式在ValueStack中执行,从而造成了任意命令的执行,getshell啊、列目录、echo上传,本质上都是执行java代码。
3.payload加上路由关键字进行OGNL表达式接受处理执行
总结审计思路-struts
案例3:SpringBoot-SpELl表达式注入漏洞分析-白盒思路
Spring Expression Language(缩写为SpEL)是一种强大的表达式语言。在Spring产品组合中,它是表达式计算的基础。它支持在运行时查询和操作对象图,它可以与基于XML和基于注解的Spring配置还有bean定义一起使用。由于它能够在运行时动态分配值,因此可以为我们节省大量Java代码。
审计思路-spring
1.SpringBoot SpEL表达式注入漏洞-分析与复现:https://www.cnblogs.com/litlife/p/10183137.html
2.sql注入漏洞
总结:
学习
攻击JavaWeb应用[1]-javaEE基础:https://www.cnblogs.com/studyskill/p/6957194.htmll
攻击JavaWeb应用1-9[JavaWeb安全系列]
原文:https://www.cnblogs.com/zhengna/p/15190343.html