从代码层面分析Jenkins未授权访问CVE-2017-1000353

首先是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 Channel is done by C
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值