前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Xcheck之PHP代码安全检查

Xcheck之PHP代码安全检查

原创
作者头像
腾讯代码安全检查Xcheck
修改2020-12-02 11:39:18
1.8K0
修改2020-12-02 11:39:18
举报

0x00 PHP安全检查引擎

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

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

0x01 简单聊一下RIPS

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

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

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

代码语言:javascript
复制
<?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来说是难以理解的。

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

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

先看下xcheck的检测结果。

xcheck结果
xcheck结果
结果详情
结果详情

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

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

getMimeType
getMimeType

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校验即可。

数据流传递
数据流传递

0x03 最后

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


想了解Xcheck更多信息或者代码安全审计相关技术欢迎长按关注xcheck公众号~

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 0x00 PHP安全检查引擎
  • 0x01 简单聊一下RIPS
  • 0x02 Wpdiscuz任意文件上传漏洞分析与检测
  • 0x03 最后
相关产品与服务
应用安全开发
应用安全开发(Application Security Development,下文中也叫 Xcheck)为您提供优质的代码分析服务。Xcheck 凭借优秀的算法和工程实现,能在极低的误报率和漏报率前提下,以极快的速度发现代码中存在的安全漏洞。Xcheck 采用私有化部署的模式,所以产品使用的整个生命周期,源码都不会流出公司网络,杜绝源码泄露风险。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档