zoukankan      html  css  js  c++  java
  • 基于thinkphp3的cms代码审计

    初期工作

    介绍

    YxtCMF在线学习系统是一个以thinkphp+bootstrap为框架进行开发的网络学习平台系统。

    下载

    百度搜索yxtcmf,有很多下载链接,这里就不贴过来了

    搭建

    将源码放在根目录下,访问有安装向导

    (这里一开始用php5.4版本,后面注册用户的时候报错,换成7.0好了)

    了解结构

    ├─admin                 后台目录
    ├─application           应用目录
    ├─data                  缓存目录
    ├─Expand                存放软件目录
    ├─plugins               存放插件目录
    ├─public                WEB目录(对外访问目录)
    ├─themes                前端文件存放目录
    ├─ueditor               ueditor编辑器目录
    ├─update                更新目录
    ├─uploads               上传文件目录
    ├─yxtedu                系统目录
    
    

    这里特别说一下,我一般接触到前台用户和后台管理员都是分隔在不同表的,此处在同一表下。其实建在一张表中是没问题的,用户和权限分表设计,之后通过用户id进行表间的关联

    漏洞

    文件上传

    前台注册用户后,可以上传头像,黑盒测试发现应该是会对后缀名进行禁用。

    好家伙,发现是白名单,只让传这几个后缀,还是比较难利用的

    目录遍历

    通过seay发现多处直接使用readfile函数,经审计发现此处的$file可以利用

    function downmoban(){
    		$name=htmlspecialchars($_GET['name']);
    		$dir= dirname(dirname(dirname(dirname(__FILE__))));
    		$file=$dir.'/Uploads/'.$name;  
    		if(is_file($file)){
    			$length = filesize($file);
    			$showname =  ltrim(strrchr($file,'/'),'/');
    			header("Content-Description: File Transfer");
    			header('Content-Length:' . $length);
    			 if (preg_match('/MSIE/', $_SERVER['HTTP_USER_AGENT'])) {
    				 header('Content-Disposition: attachment; filename="' . rawurlencode($showname) . '"');
    			 } else {
    				 header('Content-Disposition: attachment; filename="' . $showname . '"');
    			 }
    			 readfile($file);
    			 exit;
    		} else {
    			 exit('文件已被删除!');
    		} 
          }
    

    $file由$name拼接而成,而name变量直接由get传参,且未经过任何处理

    可以进行任意文件读取

    代码写入

    网站信息|添加url规则 处可以添加路由,代码本身逻辑没有问题

    但是由于插入的代码未作任何过滤直接插入到数据库中,导致任意代码写入漏洞,危害性较大

    此处跟进了特别多的函数和方法,就不全程跟进了

    先获取到表名

    再插入到数据库中

    可以看到数据库只在if中进行了数组,包含exp,不为空,过滤非标量数据的判断,一句话代码还是可以写入到路由中

    成功连接

  • 相关阅读:
    On the fly test
    Spec Explorer 工具学习
    C# Static修饰符的作用
    [转]C#静态方法与非静态方法的比较
    如何获取网站服务器运行状态
    C#快速整理代码格式
    UI auto程序结构组织方式
    TestClass必须是public的
    VS2012如何显示行号
    Error: member names cannot be the same as their enclosing type
  • 原文地址:https://www.cnblogs.com/karsa/p/14106798.html
Copyright © 2011-2022 走看看