前言

很久没有审计了,周末特意找了个了小众的cms来学习学习。这次对象是鱼跃cms,官网下载的最新版,提前去相关漏洞库看了看,基本上都被大佬们挖完了,本人安全小白,就找到了3个的洞,各位师傅嘴下留情。这次主要是分享我在这次阅读代码中的一点感受。

审计之前

工欲善其事,必先利其器。好的工具事半功倍。每个人都有自己习惯的工具和审计套路,也不必过多评价,这里只分享自己的,如果对各位位师傅有用,那也是我的荣幸。

  • phpstorm + phpstudy + burpsuite + 自动化审计工具

    感觉这一套就行了,分别说下我个人认为的优点吧:
  • phpstorm
    相比于一些静态的文本编辑器,它可以动态调试,配合phpstudy来进行debug对像我这种新手来说比较友好,定位函数、跟踪传参呀都比较nice。
  • phpstudy
    本地搭建环境,方便快捷,不需要懂那么多,就能快速上手。
  • burpsuite
    有时候本地环境搭建起来后,会先黑盒搞一搞,这个时候挂上bp的话,我个人觉得最直观的就是有助于上手cms的路由,通过浏览之前的抓包情况,结合MVC框架特点,很快就能搞清楚路由,我觉得这个很重要,因为涉及到一些方法的调用,漏洞的利用等等,不用再从头跟一遍传参呀什么的。
  • 自动化审计工具
    这个种类很多,好坏也很明显,报的很全,但是误报很多。
  • 再提一句,之前看到一位师傅的思路是遍历cms中的文件,然后爆破看是否有未授权,当时觉得这个思路不错,就简单写了个复现,也用在了这次审计中(但是没收获),代码附上(水平有限,见谅见谅):
# 作者:juju
# 日期:2021/11/22 18:21
import os
import sys
import re
try:
    path = sys.argv[1]
    file_ext = sys.argv[2]
    current_root = sys.argv[1].split('\\')[-1]
    list = []
    # path = '/home/jhxie/Workspace/namesort'
    for root, dirs, files in os.walk(path):
        for file in files:
            file_name = os.path.join(root, file)
            if file_ext == file.split('.')[-1]:
                url = file_name.split(current_root)[-1]
                url = re.sub(r'\\', '/', url)
                print(url)
except:
    exit(print('用法:python list_file.py 文件夹路径 后缀'))

审计

  • 本地搭建环境进行审计:

    通过用户名密码进入后台之后发现其url为:
    http://127.0.0.1/yuyuecms_2.2.15/admin/index/index.html
    感觉像是TP的框架,再看一眼目录结构:

    大概可以确定。
    在yuyuecms目录下:

    发现admin、index、install、login模块,每个下面有个存放控制器的文件夹,再结合上面的url,路由的方式应该是
    http://127.0.0.1/yuyuecms_2.2.15/模块/控制器/方法.html
    知道路由后,思路就很清晰,主要看控制器里面的方法:

  • 后台插件上传导致任意文件上传:

    跟进1中发现需要验证verification:

    通过比对登录数据包发现,登录成功后返回一个固定verification,且后台调用方法时都要进行传参
    通过对比2和3处发现,上传时验证了后缀为zip,但是却直接解压文件,并没有对解压后的文件验证,导致了上传
    写个phpinfo,打成压缩包,通过后台上传插件处直接上传:


  • 后台主题上传导致任意文件上传:
    和上面分析一样:

    一样的利用方式导致上传shell:

    在主题上传处上传新主题:

  • 后台任意目录删除:
    发现后台存在deltheme()方法:

    可以看出路径可控,跟进deleteFolder:

    继续跟进delFolder:

    完全没有限制,但是只是删除目录,比较鸡肋
    在根目录新建test文件夹:

    删除:

  • 可能的sqli
    在install下控制器的step3方法中:

    通过post获取name后直接拼接到exec,但是这个是安装时的,没什么实际意义,就没继续跟下去

后话

那个遍历目录爆未授权的方法也测试了,没有收获,可能是这个cms是框架结构,这些方面做的比较好吧

能力有限,时间仓促,就找到了3个简单的洞,若是有师傅找到其他的洞,快快评论一下,师傅们带带我呀

点击收藏 | 0 关注 | 2
登录 后跟帖