zoukankan      html  css  js  c++  java
  • zzzphpV1.6.1代码审计

    本文仅为了学习交流,严禁非法使用!!!
    (随笔仅为平时的学习记录,若有错误请大佬指出,第一次编辑代码审计类的文章,文笔太差,逻辑可能有点不通,大佬勿喷)

    毕业论文写了好多天,答辩的时候一直被怼,生活真的太难了,现在终于有时间休息一下。
    来审计一下zzzphpV1.6.1,关于这套cms的审计已经有很多大佬发布了审计文章,故本文章也是借鉴前辈的审计思路进行复现(代码审计还是自己动手多实践,还是自己太菜了)

    因为事先知道该cms存在远程代码执行漏洞,故直接搜索eval存在的文件进行分析

    分析存在eval函数的这段程序,要想实现远程代码执行,则要控制好$ifstr的值,我们先单独Copy一份,看看该字符串如何实现闭合。
    先进行赋值$zcontent={if:111}{end if},打印一下$ifstr的值,因为程序中使用preg_match_all( $pattern, $zcontent, $matches ),故$zcontent必须符合$pattern的匹配规则,不然无法执行

    @eval( 'if(' . $ifstr . '){$flag="if";}else{$flag="else";}' ); 要想不报错的执行该程序,首先要闭合if(,且保证该条件为真,因此这个地方可以填数字,同时屏蔽后面的){$flag="if";}else{$flag="else";};,且poc要符合正则匹配的格式,所以$zcontent='{if:1)phpinfo();//}{end if}';,我们打印一下

    看看效果怎么样,放入到phpstudy的web目录里面

    成功执行,因为该函数处于ParserTemplate类中,全局搜索类的名字,发现有两处调用

    先看看inczzz_client.php是如何调用的

    我们可以看到进入到ParserTemplate类中,调用了$parser->parserCommom($zcontent),所以要弄清楚$zcontent的来源,但进入该循环中,需要的条件是$location=='user'$act共有四个可以选择,他们是case "reg":case "forget":case "login":case "login",因此要弄清楚$tplfile=TPL_DIR. 'user'.$act.'.html';具体是哪个模板,我们使用var_dump,打印出来,因为$zcontent的值是受它控制


    根据$act的选择范围,应该是有三种不同的模板位置

    F:/web/PHPTutorial/WWW/zzzcms/template/pc/cn2016/html/userreg.html
    F:/web/PHPTutorial/WWW/zzzcms/template/pc/cn2016/html/userlogin.html
    F:/web/PHPTutorial/WWW/zzzcms/template/pc/cn2016/html/userforget.html

    只要我们可以修改这三个模板的内容,插入我们事先调试好的poc就可以实现远程代码执行,我们访问后台,看看有没有这样的模板

    发现模板管理里面,并没有这样的模板,因此该思路是不行的,看了大佬的文章,发现可以这样

    如果可以进入到else语句中,或许就可以,因为else里面有userinfo,后台模板里也有该模板名称。但条件是必须要登录,前面有登录状态的判断,因此需要注册一个账户,为了确定该模板是不是我后台存在的,我们使用var_dump打印一下else语句里面的$incfile,至于为什么要打印它,因为$zcontent的值受它控制

    注册一个账户,然后再访问http://127.0.0.1/zzzcms/index.php?location=user&act=userinfo,要查看网页源码才可以看到打印模板的位置

    我们进入后台修改该模板的内容,添加一个{if:1)phpinfo();//}{end if},前面已经测试过的,不仅要符合正则匹配的格式,还要满足if()为真,才可以执行phpinfo();//

    因为这是登录后台进行操作的,也是登录的状态,我们访问一下http://127.0.0.1/zzzcms/index.php?location=user&act=userinfo

    成功getshell

    整个思路是:不登录的状态会进入到if (empty($uid))里面,但里面的模板后台是没有的,如果是登录状态则会进入到else语句里面,后台模板也刚好有userinfo.html,把poc写入到该模板后,在登录状态的时候访问 http://127.0.0.1/zzzcms/index.php?location=user&act=userinfo就会进入到else中,从而进入到$parser->parserCommom($zcontent);里面去,而$zcontent已经加入了恶意程序,最后会进入到@eval实现代码执行。

    总结:该cms能够实现远程代码执行的思路还是有很多的,有很多的大佬进行了分析总结,就不一一举例,也是第一次写代码审计的文章,讲解不到位的地方,多多包含,大佬勿喷。

    参考大佬的文章 https://blog.csdn.net/CSDNPM250/article/details/104211233

    此文档仅供学习,参与违法行为与笔者无关

  • 相关阅读:
    在Livemedia的基础上开发自己的流媒体客户端
    开源流媒体处理库live555服务器端、客户端源代码分析总结
    海康、大华IpCamera RTSP地址和格式
    专题:Windows编译x264、SDL、faac、ffmpeg过程
    linux下c/c++ IDE开发工具介绍
    socket选项自带的TCP异常断开检测
    logstash-input-jdbc实现mysql 与elasticsearch实时同步(ES与关系型数据库同步)
    哈希存储、哈希表原理
    APM系列-国外新兴厂商New Relic vs. AppDynamics
    SkyWalking 分布式追踪系统
  • 原文地址:https://www.cnblogs.com/lovequitepcs/p/12842482.html
Copyright © 2011-2022 走看看