APP下载

基于“ThinkPHP-3.2.X远程代码执行漏洞”谈网络安全问题防范

2021-02-26孙海波陈哲周琪陈霓

中国新通信 2021年22期

孙海波 陈哲 周琪 陈霓

【摘要】    本文就工作中发现的一起“ThinkPHP-3.2.X远程代码执行漏洞”,浅谈如何做好网站的安全漏洞防范,防止攻击者利用该漏洞进行远程执行代码,对目标网站进行挂马、数据窃取、远程控制等恶意操作。

【关键词】    网络安全漏洞    ThinkPHP 远程代码执行

引言:

互联网技术快速发展的同时,也出现了越来越多的安全漏洞,必须高度重视。相比于2019年,2020年网络安全漏洞数量仍呈现增长的趋势。根据国家信息安全漏洞库(CNNVD)数据统计,2020 年全年至 2021 年上半年新增漏洞信息27097条。从厂商分布来看,产生网络安全漏洞前五的公司分别为:Microsoft公司、Google公司、Oracle公司、Netgear公司、IBM公司;从漏洞类型来看, 网络安全漏洞前五的类型分别为:缓冲区错误、跨站脚本、输入验证错误、信息泄露、代码问题;从漏洞修复情况来看,前五名的国内厂商分别为:华为(Huawei)、福昕(Foxit)、联想(Lenovo)、研华(Advantech)、中兴通讯(ZTE),且漏洞修复率均为100%[1]。

ThinkPHP是一种简便易用的轻量级PHP框架,原名FCS,最早出现在2006年初。其支持Windows/Unix/Linux等操作系统环境,兼容性强,操作简单方便。其突出的特点是支持跨版本、跨平台和跨数据库移植。

网站在运营过程中,为了提高访问时效性,会将用户信息存入缓存来减少访问次数。而ThinkPHP框架在处理缓存数据时将数据进行序列化,并存入一个PHP文件中,这种方法在带来快捷的同时可能会造成命令执行风险。存在ThinkPHP-3.2.X远程代码执行漏洞的网站在其业务代码中,如果模板赋值给assign方法的第一个参数可控,则可导致模板文件路径被覆盖为携带攻击代码的文件路径,从而攻击者可以插入恶意代码,造成远程命令执行。

一、事件经过

笔者一直从事对web网站的安全漏洞挖掘工作,于2021年7月发现一起比较典型的ThinkPHP-3.2.X远程代码执行漏洞,供读者参考。漏洞详细情况:漏洞名称为ThinkPHP-3.2.X远程代码执行漏洞;漏洞数量1个;漏洞等级为高危;网站地址为http://118.---.--.37:39916/ (“---”代表网站部分域名地址)。

二、验证过程

我们通过Web安全漏洞扫描工具,发现该网站(http://118.---.--.37:39916/)存在ThinkPHP-3.2.X远程代码执行漏洞。下面我们开始对这个链接地址进行漏洞验证,在验证时需要使用“蚁剑”工具进行端口shell链接,进而对目标服务器进行攻击验证。

1.网站基本情况分析。我们打开网站页面,使用浏览器插件Wappalyzer来探测是否使用ThinkPHP框架。Wappalyzer插件可以快速对目标网站进行基本情况分析,是一款非常实用的插件工具,通过该插件能够分析目标网站所采用的平台构架、网站环境、服务器配置环境、JavaScript框架、编程语言等参数,可通过Google、火狐商店等安装或者离线安装此插件。该插件使用简单易懂,首先打开我们要分析检测的网页,然后点击插件就可以看到对该网站分析的结果,通过Wappalyzer插件分析目标网页结果如图1所示。

2.debug模式测试。我们抓取对目标网站的请求包,并对该请求进行分析,测试payload为http://118.---.--.37:39916/index.php?m=Home&c=Index&a=index&test=--><?=phpinfo();?&gt;。

测试该漏洞可能会有两种情况,一种就是目标网站开启debug模式,一种就是目标网站未开启debug模式。该漏洞的利用原理就是我们在请求包中输入攻击代码,发送请求,响应会报系统错误的提示,而日志会写入日志文件中,日志文件路径同样有两种:开启debug模式是\Application\Runtime\Logs\Home\21_07_31.log;未开启debug模式是\Application\Runtime\Logs\Common\21_07_31.log。其中的21_07_31.log文件名以当天的日期命名,我们先对开启debug模式进行测试,如图2所示。

经过测试,在debug模式下未出现系统错误提示,所以目标网站未开启debug模式。漏洞利用payload为http://118.---.--.37:39916/index.php?m=Home&c=Index&a=index&value[_filename]=./Application/Runtime/Logs/Home/21_07_31.log。

3.非debug模式测试。抓包并分析,测试Payload为http://118.---.--.37:39916/index.php?m=--><?=phpinfo();?>。如图3所示,显示“系统发生错误”,即在非debug模式下出现系统错误提示。

漏洞利用payload为http://118.---.--.37:39916/index.php?m=Home&c=Index&a=index&value[_filename]=./Application/Runtime/Logs/Common/21_07-31.log,漏洞利用成功,说明phpinfo已被写入日志文件中。

4.写入测试代码。我们进一步利用漏洞,写入一句测试代码,如图4所示。使用蚁剑鏈接服务器终端工具,中国蚁剑是一款开源的跨平台网站管理工具,它主要面向于合法授权的渗透测试安全人员以及进行常规操作的网站管理员。我们可以从GitHub网站中下载蚁剑的源码,下载地址为:https://github.com/AntSwordProject/AntSword-Loader。连接时在蚁剑界面右击点击新增,输入链接http://118.---.--.37:39916/index.php?m=Home&c=Index&a=index&value[_filename]=./Application/Runtime/Logs/Common/21_07-31.log,以及要连接的密码123,连接成功后如图5所示。

5.连接目标服务器。通过上一步骤,我们已经可以连接到目标服务器,可以看到目标服务器的当前路径、磁盘列表、系统信息、当前用户等信息。至此,我们可以判定网站http://118.---.--.37:39916/index.php)存在ThinkPHP-3.2.X远程代码执行漏洞,我们利用缓存逻辑缺陷可直接写入代码,直观显示出ThinkPHP-3.2.X远程代码执行漏洞的巨大危害。

三、修复建议

1.最好的修复方法就是升级到最新的ThinkPHP版本,或者其它不受此漏洞影响的安全版本。

2.不建议直接使用assign方法对模板变量进行赋值。

3.减少使用高危函数如include等,如果必须使用可对函数进行文件内容过滤操作。

4.对所有输入提交可能包含文件地址的内容,包括服务器本地文件及远程文件,进行严格检查,参数中不允许出现./和../等目录跳转符。

5.严格检查文件包含函数中的参数是否被外界可控。

6.严格检查变量是否已经初始化。

四、结束语

一直以来,网络安全漏洞呈上升趋势,为了确保我们网站的安全,必须增强我们的责任心,经常开展对网站的漏洞扫描工作。这次发现的ThinkPHP-3.2.X远程代码执行漏洞,由于网站程序设计错误,导致远程代码执行问题。所以,我们在使用ThinkPHP等开源框架的时候,不仅仅要考虑易用性,也必须重视安全问题,否则会导致用户数据泄露,服务器被提权等问题的发生。2021年8月17日,国务院颁布了《关键信息基础设施安全保护条例》,将于9月1日起施行。《关键信息基础设施安全保护条例》的施行,对于我国的网络信息化建设具有重要作用。本條例所指的关键信息基础设施,主要是指公共通信和信息服务、能源、交通、水利、金融、公共服务、电子政务、国防科技工业等重要行业,如果这些领域的基础设施遭到破坏、丧失功能或者数据泄露,会造成严重的后果,可能会严重危害国家安全、国计民生等。网络安全至关重要,必须高度重视,防患于未然。

参  考  文  献

[1]启明星辰发布《2020~2021网络安全态势观察报告》. 2021-08-16. https://www.venustech.com.cn/u/cms/www/202108/181454025drp.pdf;