Xcheck之PHP代码安全检查
2021-04-29 17:33:25 Author: www.secpulse.com(查看原文) 阅读量:208 收藏

image.png

1 PHP安全检查引擎

Xcheck的php引擎支持原生php的安全检查,也支持对国内主流框架编写的web应用进行安全检查,覆盖包括Thinkphp,Laravel,CodeIgniter,Yii,Yaf等web框架,对尚未覆盖的框架如果有需求,Xcheck也可迅速适配。覆盖漏洞类别包括但不限于以下:

  • 命令注入
  • SQL注入
  • XSS
  • XXE
  • URL跳转
  • 路径穿越
  • 反序列化
  • 代码执行
  • 变量覆盖
  • ...

2 简单聊一下RIPS

image.png

说到PHP代码工具化安全审计,就不得不提RIPS。RIPS是国外一家专门做代码安全检查的科技公司,凭借PHP代码安全检查出名。这里说的并不是RIPS的开源版本,因为RIPS的开源版本是不支持面向对象的,上个开源版本0.55已经是2017年的事情,所以说的是RIPS的商业化版本,了解到前段时间RIPS也已经被SonarSource收购。

image.png

image.png

我们通过一些渠道接触使用到了RIPS的商用版本,从目前的一些检测结果来看,不得不承认,RIPS相比一些其他我们已经接触使用过的商业化代码安全审计产品,如某marx,RIPS在误报率、速度上都是有一定优势。但尽管RIPS在PHP代码安全审计这一领域研究可能超过10年(10年推出开源0.32版本),还是会在一些地方有疏漏,盲目地迷信权威并不可取

举个简单的例子,这是pikachu靶场里的一段ssrf漏洞代码,RIPS并未检测出这个简单漏洞。

<?php
$URL = $_GET[1];
$CH = curl_init($URL);
curl_setopt($CH, CURLOPT_HEADER, FALSE);
curl_setopt($CH, CURLOPT_SSL_VERIFYPEER, FALSE);
$RES = curl_exec($CH);
curl_close($CH) ;
echo $RES;

当然,这个例子只是为了说明即使是大家公认的权威,也可能存在着不足

至于Xcheck相较于RIPS,我们已知的是Xcheck速度和自定义规则具备一定优势,RIPS并不支持自定义规则,也就不支持自研框架,例如thinkphp项目对RIPS来说是难以理解的。

3 Wpdiscuz任意文件上传漏洞分析与检测


image.png

wpdiscuz是一个wordpress使用较广泛的插件,8月份时爆出一个任意文件上传漏洞。使用RIPS扫描带有漏洞的源码,但并没有发现问题。这里将使用7.0.3带漏洞的版本源码进行分析。

先看下xcheck的检测结果。

image.png

image.png

  1. 污染传入, combineArray函数取出$_FILES当中的数据,传递给$files

image.png

2. 从$files中取出数据,并获取了后缀。但是这里 $this->getMimeType 并没有对后缀进行判断,而是只是获取了memetype. 下面有对 

    memetype进行安全校验。  getMimeType函数的代码如下。

image.png

private function getMimeType($file, $extension) {
        $mimeType = "";
        if (function_exists("mime_content_type")) {
            $mimeType = mime_content_type($file["tmp_name"]);
        } elseif (function_exists("finfo_open") && function_exists("finfo_file")) {
            $finfo = finfo_open(FILEINFO_MIME_TYPE);
            $mimeType = finfo_file($finfo, $file["tmp_name"]);
        } elseif ($extension) {
            $matches = wp_check_filetype($file["name"], $this->options->content["wmuMimeTypes"]);
            $mimeType = empty($matches["type"]) ? "" : $matches["type"];
        }
        return $mimeType;
    }

3. 接着传入uploadSingleFile函数,使用pathinfo获取到上传文件的后缀就直接拼接上传了。总的来看,只有对mimetype进行校验,所以直接上

    传“图片马”绕过mimetype校验即可。

image.png

4 最后

Xcheck作为国内新生的代码安全审计工具,面对这些早已名声在外的前辈,会时刻保持谦逊,不断进取向前。后续我们Xcheck团队也会持续披露Xcheck发现的一些有价值的漏洞或者分享代码安全审计相关技术。

专注于代码安全 | 公众号:腾讯代码安全检查Xcheck

本文作者:Xcheck

本文为安全脉搏专栏作者发布,转载请注明:https://www.secpulse.com/archives/158203.html


文章来源: https://www.secpulse.com/archives/158203.html
如有侵权请联系:admin#unsafe.sh