近日,我们SINE安全在对某客户的网站进行网站漏洞检测与修复发现该网站存在严重的sql注入漏洞以及上传webshell网站木马文件漏洞,该网站使用的是某CMS系统,采用PHP语言开发,mysql数据库的架构,该网站源码目前是开源的状态。
某CMS是专注于提供付费知识的社交CMS系统,知识付费在目前的互联网中有这很高的需求,该系统可以对文档进行分享,收费下载,用户发布的知识内容可以隐藏,提供给付费客户阅读。代码比较精简深受广大站长们的喜欢,该网站漏洞主要发生在上传压缩包的同时,构造恶意解压代码讲zip包里的webshell解压到指定目录,导致漏洞发生。该CMS还存在sql注入漏洞,我们一一的来详细分解漏洞。
SQL注入漏洞详情与修复方案
对网站的代码数据库配置文件进行查看,看到数据库的连接函数使用的是pdo模式,再仔细的追踪代码查看到还使用了一些特殊符号的转义操作,有些sql注入代码并没有对齐进行全面的安全过滤,导致发生sql注入攻击,代码截图如下:
以上代码使用就是select查询功能,我们着重的来看下他的cond函数,通过对代码的详细查看确定这个函数是用来对接前端的用户写入的值,当前端用户提交恶意的代码的时候就会传入到id这个值当中,我们来拼接SQL语句,对id的值进行变量覆盖操作,可以配合IN,like等sql语句来进行攻击数据库,查看数据库的账号密码,以及修改数据库。
对sql注入漏洞的修复,在GET请求,以及POST请求里,过滤非法字符的输入。'分号过滤 --过滤%20特殊字符过滤,单引号过滤,%百分号,and过滤,tab键值等的的安全过滤。启用php魔术,防止一些非法参数进行传输以及构造。
网站上传webshell漏洞
网站是公开免费注册用户的,也算是普通的用户,在对其上传功能进行全面的安全检测的时候发现存在上传zip压缩包的漏洞,上传doc等文件是需要审核,但是zip直接写入到数据库中,我们通过上面发现的sql注入漏洞对数据库进行查看,可以看到zip的文件地址。
如何上传webshell,我们通过sql注入漏洞查询到网站后台的管理员账号密码,登录网站后台,后台的各项功能都不存在漏洞,但是在查看源码当中发现有一段可以对zip文件解压的功能代码,无需使用用户权限就可以进行解压,那么我们来构造参数直接对该解压代码文件进行访问,post请求过去,直接将我们的zip文件解压到了当前文件中,我们就可以将我们的webshell木马上传上去。
关于网站上传漏洞的修复,建议管理员关闭掉解压功能,或者对其解压的文件进行权限判断,是管理员用户有解压功能,还是普通会员权限拥有解压文档的权限,对权限进行合理的安全分配,再一个对上传的目录进行无脚本权限设置,防止webshell木马后门的运行。