热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

vaeThinkv1.0.1代码执行漏洞挖掘分析

 0x01 引言本文是对一个小众CMS(vaeThink v1.0.1)进行分析、代码执行漏洞挖掘和审计过程的记录,该CMS基于ThinkPHP5开发。作为一名代码审计的入门菜鸟,也希望能够将实践和学

 

0x01 引言

本文是对一个小众CMS(vaeThink v1.0.1)进行分析、代码执行漏洞挖掘和审计过程的记录,该CMS基于ThinkPHP5开发。作为一名代码审计的入门菜鸟,也希望能够将实践和学习的过程记录和分享,以期能够与大家共同交流进步。

image

 

0x02 分析

通过git将项目源码下载到本地,首先对项目源码目录结构进行了解:

www WEB部署目录(或者子目录)
├─app 应用目录
│ ├─common 公共模块目录
│ │ ├─model 公共模型目录
│ ├─admin 后台模块目录
│ │ ├─controller 模块控制器目录
│ │ ├─model 模块模型目录
│ │ ├─validate 模块验证器目录
│ ├─port API接口模块目录
│ │ ├─controller 模块控制器目录
│ │ ├─model 模块模型目录
│ │ ├─validate 模块验证器目录
│ ├─common.php 公共函数文件

├─data 数据目录
│ ├─conf 配置目录
│ │ ├─module_name 模块配置目录
│ │ ├─extra 额外配置目录
│ │ ├─command.php 命令行工具配置文件
│ │ ├─config.php 公共配置文件
│ │ ├─route.php 路由配置文件
│ │ ├─tags.php 应用行为扩展定义文件
│ │ └─database.php 数据库配置文件
│ ├─runtime 应用的运行时目录
│ └─install.lock 用于系统鉴定是否完成安装

├─public WEB目录(对外访问目录)
│ ├─plugin 插件目录
│ ├─themes 模板文件目录
│ └─admin_themes admin模块模板文件目录
│ ├─index.php 入口文件
│ ├─router.php 快速测试文件
│ └─.htaccess 用于apache的重写

├─listenrain 系统核心引擎目录
│ ├─thinkphp ThinkPHP5框架文件目录
│ ├─vae vaeThink框架核心类库目录

├─extend 扩展类库目录
├─vendor 第三方类库目录(Composer依赖库)
├─build.php 自动生成定义文件(参考)
├─composer.json composer 定义文件
├─LICENSE.txt 授权说明文件
├─README.md README 文件
├─think 命令行入口文件

得到CMS的项目源码后,不着急进行源码的白盒审计,可以先将CMS部署和运行起来,认识和了解其功能点,同时进行黑盒测试。

该CMS的部署比较简单,只要有LAMP的环境,并且将网站根目录指向public目录即可,接着根据提示安装。安装完成之后,访问该CMS直接出现登录页面:

image

需要注意的是,一般在登录功能处可能存在SQL注入漏洞,但是本文着重挖掘代码执行漏洞的挖掘,因此其他类型会略过,我们继续通过安装时设置的管理员账号登入后台,进一步了解后台的其他功能点:

image

一般存在代码执行漏洞的地方,可能在如下这些功能模块:

1、网站配置文件写入
2、缓存cache文件写入
3、日志文件写入
4、文件上传
5、代码执行函数参数可控

从这5点出发,我们继续对该CMS进行挖掘。

 

0x03 配置、日志和缓存文件

系统/配置菜单中,存在与网站信息、邮件和短信配置相关的功能页面。在不进行源码审计的情况下,首先查看数据库中的数据表和字段,发现没有存储和这些配置相关的信息,可以猜测这些信息可能直接经过处理后存储在某个配置文件中,经过对项目目录的大致了解,应该是在data/conf下。

我们输入特定的测试数据进行提交,并且通过grep过滤包含特定数据的文件:

image

image

欣喜地发现,输入的配置内容写入了data/conf/extra/webconfig.php中,并且同时注意到,输入的配置内容同样写入了日志文件data/runtime/log/201905/1557823231-14.log

我们继续构造可控内容'];phpinfo();//,可以通过闭合前面的数组逃逸出来:

image

但是测试发现,可控内容前的return会直接返回,注入的代码并没有被执行。另外,注意一下配置文件的路径可以发现,data目录不是一个可以直接访问到的网站路径,除非能够配合其他的路径穿越或者文件包含漏洞才有更进一步的可能,这里的日志文件也是同理。

注意到data目录下还存在cachetemp目录,其中存储了一些缓存文件

image

除了和上面配置、日志文件存在同样的限制,这些缓存文件还通过exit()进行了安全处理:

image

 

0x04 文件上传

几条路暂时被堵死了不要慌,继续观察CMS的其他功能点。在管理员的修改个人信息页面,发现存在一个头像上传功能,简单选择一个t.php上传,页面提示文件类型错误,不排除这只是一个前端校验的可能,我们通过抓包修改文件后缀继续进行上传:

image

image

image

测试后发现这里的上传点果然只对文件后缀进行了前端校验,直接了当上传.php后缀的文件:

image

 

0x05 代码执行函数参数可控

该CMS除了头像功能点直接暴力的文件上传之外(过于简单。。),还有没有可能存在其他角度的漏洞点呢?比如用户输入可以直接作为某些代码执行函数的参数,导致任意代码执行。怀着疑问我们继续对CMS开始进一步的挖掘,PHPStorm启动!XDebug配置!

在PHP中常见的代码执行函数有eval、system等等,通过command+shift+f进行全局搜索这些函数名关键词来找到切入点。经过一番排查,最终定位到了一个比较可疑的地方listenrain/vae/lib/Auth.php第194行中的getAuthList函数

image

我们继续从此处逆向回溯分析,查看该污点是否可被用户控制。

eval函数中的参数存在一个变量$command

image

该变量来自上一行的$rule['condition'],并且替换了{(w*?)},但是没有进行其他的过滤操作:

$command = preg_replace('/{(w*?)}/', '$user['\1']', $rule['condition']);

$rule是从186行 $rules = Db::name($this->config['auth_rule'])->where($map)->field('condition,name')->select();数据库中查询得到的数据的一部分。从作者的注释可以看到,读取的是用户组所有权限规则

image

我们通过分析和函数名可以大致对该函数作用有了解,是对通过用户id获得用户组权限,并且返回权限列表。

继续查看getAuthList的调用情况,是在check函数中:

image

回溯check函数,发现调用在:

image

到此,基本可以确定在管理员访问鉴权功能模块中会触发此流程。接着下断点进行动态调试,便于对变量值的查看,我们选择菜单中的任何一个选项进行访问,执行流程会经过上述我们分析过的检查函数中:

image

image

image

分析后可以确定,数据库中用户拥有的权限对应的规则的condition字段将会作为eval()的参数被执行

image

接着继续确定数据表中的condition字段是否为用户可控,分析后可以发现,在后台的系统/节点 http://127.0.0.1/index.php/admin/rule/index.html页面中存在对该数据表的操作功能,而附加规则对应数据表中的condition字段:

image

尝试修改附加规则内容后,访问任意一个菜单中的页面,并动态调试观察:

image

image

可以看到,可控内容没有经过过滤,成功触发该污点

image

image

 

0x06 结尾

本文针对代码执行漏洞,从配置文件、日志文件和缓存文件的写入,文件上传以及函数执行参数可控的角度对vaeThink v1.0.1进行简单地挖掘和分析。全文内容比较简单,目的是记录和分享交流,请大佬轻喷。

最后,感谢阅读!


推荐阅读
  • 本文介绍了在Linux下安装Perl的步骤,并提供了一个简单的Perl程序示例。同时,还展示了运行该程序的结果。 ... [详细]
  • 安装mysqlclient失败解决办法
    本文介绍了在MAC系统中,使用django使用mysql数据库报错的解决办法。通过源码安装mysqlclient或将mysql_config添加到系统环境变量中,可以解决安装mysqlclient失败的问题。同时,还介绍了查看mysql安装路径和使配置文件生效的方法。 ... [详细]
  • imx6ull开发板驱动MT7601U无线网卡的方法和步骤详解
    本文详细介绍了在imx6ull开发板上驱动MT7601U无线网卡的方法和步骤。首先介绍了开发环境和硬件平台,然后说明了MT7601U驱动已经集成在linux内核的linux-4.x.x/drivers/net/wireless/mediatek/mt7601u文件中。接着介绍了移植mt7601u驱动的过程,包括编译内核和配置设备驱动。最后,列举了关键词和相关信息供读者参考。 ... [详细]
  • 基于PgpoolII的PostgreSQL集群安装与配置教程
    本文介绍了基于PgpoolII的PostgreSQL集群的安装与配置教程。Pgpool-II是一个位于PostgreSQL服务器和PostgreSQL数据库客户端之间的中间件,提供了连接池、复制、负载均衡、缓存、看门狗、限制链接等功能,可以用于搭建高可用的PostgreSQL集群。文章详细介绍了通过yum安装Pgpool-II的步骤,并提供了相关的官方参考地址。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 本文介绍了使用postman进行接口测试的方法,以测试用户管理模块为例。首先需要下载并安装postman,然后创建基本的请求并填写用户名密码进行登录测试。接下来可以进行用户查询和新增的测试。在新增时,可以进行异常测试,包括用户名超长和输入特殊字符的情况。通过测试发现后台没有对参数长度和特殊字符进行检查和过滤。 ... [详细]
  • 本文详细介绍了MysqlDump和mysqldump进行全库备份的相关知识,包括备份命令的使用方法、my.cnf配置文件的设置、binlog日志的位置指定、增量恢复的方式以及适用于innodb引擎和myisam引擎的备份方法。对于需要进行数据库备份的用户来说,本文提供了一些有价值的参考内容。 ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • 本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 解决VS写C#项目导入MySQL数据源报错“You have a usable connection already”问题的正确方法
    本文介绍了在VS写C#项目导入MySQL数据源时出现报错“You have a usable connection already”的问题,并给出了正确的解决方法。详细描述了问题的出现情况和报错信息,并提供了解决该问题的步骤和注意事项。 ... [详细]
  • 本文介绍了三种方法来实现在Win7系统中显示桌面的快捷方式,包括使用任务栏快速启动栏、运行命令和自己创建快捷方式的方法。具体操作步骤详细说明,并提供了保存图标的路径,方便以后使用。 ... [详细]
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • 本文讨论了在openwrt-17.01版本中,mt7628设备上初始化启动时eth0的mac地址总是随机生成的问题。每次随机生成的eth0的mac地址都会写到/sys/class/net/eth0/address目录下,而openwrt-17.01原版的SDK会根据随机生成的eth0的mac地址再生成eth0.1、eth0.2等,生成后的mac地址会保存在/etc/config/network下。 ... [详细]
  • r2dbc配置多数据源
    R2dbc配置多数据源问题根据官网配置r2dbc连接mysql多数据源所遇到的问题pom配置可以参考官网,不过我这样配置会报错我并没有这样配置将以下内容添加到pom.xml文件d ... [详细]
author-avatar
罢脑货_246
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有