PHP网站有漏洞该如何修复与防范
近日,我们SINE安全对metinfo进行网站安全检测发现,metinfo米拓建站系统存在高危的sql注入漏洞,攻击者可以利用该漏洞对网站的代码进行sql注入攻击,伪造恶意的sql非法语句,对网站的数据库,以及后端服务器进行攻击,该metinfo漏洞影响版本较为广泛,metinfo6.1.0版本,metinfo 6.1.3版本,metinfo 6.2.0都会受到该网站漏洞的攻击。
metinfo建站系统使用的PHP语言开发,数据库采用的是mysql架构开发的,在整体的网站使用过程中,简单易操作,可视化的对网站外观进行设计,第三方API接口丰富,模板文件较多,深受企业网站的青睐,建站成本较低可以一键搭建网站,目前国内使用metinfo建站的网站数量较多,该metinfo漏洞会使大部分的网站受到攻击影响,严重的网站首页被篡改,跳转到其他网站,以及网站被劫持跳转到恶意网站上,包括网站被挂马,快照被劫持等情况都会发生。
关于该metinfo漏洞的分析,我们来看下漏洞产生的原因:
该漏洞产生在member会员文件夹下的basic.php代码文件:
metinfo独有的设计风格,使用了MVC框架进行设计,该漏洞的主要点在于使用了auth类的调用方式,在解码加密过程的算法中出现了问题,我们再来看下代码:
通常加密,以及解密的算法是不可以可逆的,但是metinfo写的代码可以进行伪造函数值进行逆算,我们看这个构造的恶意函数,这里的key值是从前端met_webkeys值里进行获取,将获取到的webkeys值进行写入,并赋值到配置文件里,config目录下的config_safe.php代码里。我们通过查看这个代码,发现写入的值没有办法进行PHP脚本的执行,本来以为可是伪造key值进行写入木马,发现行不通,但是在这个伪造key值的过程可以进行sql注入攻击,采用是延时注入方式进行攻击,GET请求,以及post请求方式,cookies方式都可以sql注入成功,下面我们来测试下Sql注入:
GET请求的方式进行注入:
GET /admin/index.php?n=user&m=web&c=register&a=doemailvild HTTP/1.1
Cookie:
p=00c7%2FDBwD23b41olxVCthTvDDTRBhldmrrdyA8S3t%2F3yAl4QZ0P%2FSfOS5zlB
把具体的SQL注入语句放到 cookie中进行攻击,我们发现注入成功了。上面这个注入普通用户访问即可成功。下面这个注入方式需要用户登录权限,注册一个普通账户,然后抓取cookies值进行伪造sql注入语句掺杂到cookies里,进行注入,代码如下:
/admin/index.php?n=user&m=web&c=profile&a=dosafety_emailadd HTTP/1.1
Cookie: p=497cD9UpkDtsvFzU9IKNlPvSyg1z%2bf09cmp8hqUeyJW9ekvPfJqx8cLKFSHr;<
自己抓取当前登录会员的cookie值>
关于metinfo漏洞的修复建议,以及安全方案
目前metinfo最新版本发布是2019年3月28日,6.2.0版本,官方并没有针对此sql注入漏洞进行修复,建议网站的运营者对网站的后台地址进行更改,管理员的账号密码进行更改,更改为数字+字符+大小写的12位以上的组合方式,对网站的配置文件目录进行安全限制,去掉PHP脚本执行权限,如果自己对代码不是太熟悉,建议找专业的网站安全公司来处理修复漏洞,国内SINE安全,以及绿盟,启明星辰,都是比较不错的网站漏洞修复公司。