Jenkins Job Configure权限命令执行测试

- 2 mins

0x01 简介

最近在测试的过程中,发现一个 Jenkins 允许匿名用户查看 Job ,并且拥有 JobConfigure 权限,但没有 Build 权限,无法通过在 Job 页面点击 Build Now(立即构建) 来触发命令的执行,研究了一下,这里还可以通过 Configure 页面 Build TriggersBuild periodically 选项,即周期构建功能来触发构建,这里记录一下本地复现的过程

0x02 环境搭建

Jenkins 测试版本为2.60.3,使用 docker 搭建

docker run -p 18080:8080 -p 50000:50000 --name=jenkins  jenkins:2.60.3

运行后 console 会输出如下内容

*************************************************************
*************************************************************
*************************************************************

Jenkins initial setup is required. An admin user has been created and a password generated.
Please use the following password to proceed to installation:

f9179271ec10492cb2606b1bd327414d

This may also be found at: /var/jenkins_home/secrets/initialAdminPassword

*************************************************************
*************************************************************
*************************************************************

其中 f9179271ec10492cb2606b1bd327414d 为安装时需要的 password

访问 http://127.0.0.1:18080/login?from=%2F,填入 password,点击 continue

然后选择 Install sugguested plugins,会安装需要的插件,安装过程需要一定时间

插件安装完成后,需要设置 Admin User 的用户名和密码,这里设置为 root/root,点击 Save and Finish

默认安装的情况下,匿名用户是没有任何权限的,这里修改配置,让匿名用户只拥有 查看JobJob Configure 权限

点击 Manage Jenkins - Configure Global Security

修改 Access Control - Authorization 部分的配置,选择 Project-based Matrix Authorization Strategy

这里需要添加一个 root 用户,步骤为在 User/group to add: 填入 root,然后点击 Add,移到最右侧,点击 ✔️,让 root 用户拥有所有权限,此步非常重要,不然保存后会导致 admin is missing the Overall/Read permission 错误

匿名用户勾选 OverallRead 权限,JobConfigureRead 权限,如下图:

点击保存,然后访问 http://127.0.0.1:18080/newJob,创建一个 Job,名称填 Test,类型选择 Freestyle project 点击 Save,创建成功后如下图:

0x03 执行命令

退出 或 开隐私模式,访问 http://127.0.0.1:18080/,可以看到匿名用户可以查看 Job,点击后,可以看到匿名用户拥有 Configure 权限

按照 五、低权限用户命令执行突破 中的说明,点击 Configure,在 Build 部分选择 Execute shell

Command 中填入要执行的命令

id
uname -a

然后点击 Apply,保存后需要回到 Job 页面,点击 左上侧的立即构建,才可以触发命令的执行,原文中图片为

因为这里的匿名用户是没有 Build 权限,即 Job 的页面中是没有 立即构建(Build Now) 按钮,所以这里无法通过点击 立即构建 来触发命令的执行。

通过查看 Configure 页面的选项,得知在 Build Triggers 部分可以设置任务 Build 的触发规则,其中有一个 Build periodically,可以通过类似 Crontab 时间规则来触发,这里填入

*/1 * * * *

即每分钟执行一次 Build,点击 Save

回到 Job 页面,等待一会,在左侧 Build History 可以看到,每分钟都会执行一次 Build,这里点击查看 Console Output

可以看到命令执行成功

0x04 参考

b1ngz
rss facebook twitter github weibo youtube mail spotify instagram linkedin google pinterest medium vimeo