首先是Jenkins环境的部署(都是烂大街的东西,就不写的太多了)
wget https://repo.huaweicloud.com/jenkins/redhat-stable/jenkins-2.190.3-1.1.noarch.rpm
rpm -ivh jenkins-2.190.3-1.1.noarch.rpm
启动jenkins服务
systemctl start jenkins
查看jenkins状态
systemctl status jenkins
记得关掉防火墙
查看密码
在这里插入图片描述
CVE-2017-1000353 (Jenkins 远程代码执行漏洞)
CVE-2017-1000353 是一个与 Jenkins CI(持续集成工具)相关的漏洞,该漏洞可能导致远程代码执行。
由于我之前自己配制的jenkins环境有问题,所以后期我选择了vulhub靶场进行复现
具体攻击手法我就不再多赘述了,网上的复现都烂大街了,我就从它的源代码层面来分析一下这个漏洞的形成原因
代码层面的漏洞成因
Jenkins有一个专门进行命令执行的模块
而该反序列化漏洞就是出现在jenkins利用http协议进行双向通信的过程中,在该快代码中发生的
大致历程就是这样的:
创建双向channel->启动Reader Thread->读取command对象->反序列化漏洞执行cmd
双向通道构成
双向通道入口函数位于
jenkins-2.46.1/core/src/main/java/hudson/cli/CLIAction.java
@Extension @Symbol(“cli”)
@Restricted(NoExternalUse.class)
public class CLIAction implements UnprotectedRootAction, StaplerProxy {
private transient final Map<UUID,FullDuplexHttpChannel> duplexChannels = new HashMap<UUID, FullDuplexHttpChannel>();
......
@Override
public Object getTarget() {
StaplerRequest req = Stapler.getCurrentRequest();
if (req.getRestOfPath().length()==0 && "POST".equals(req.getMethod())) {
// CLI connection request
throw new CliEndpointResponse();
} else {
return this;
}
}
private class CliEndpointResponse extends HttpResponseException {
@Override
public void generateResponse(StaplerRequest req, StaplerResponse rsp, Object node) throws IOException, ServletException {
try {
// do not require any permission to establish a CLI connection
// the actual authentication for the connecting Chann