
1 PHP安全检查引擎
Xcheck的php引擎支持原生php的安全检查,也支持对国内主流框架编写的web应用进行安全检查,覆盖包括Thinkphp,Laravel,CodeIgniter,Yii,Yaf等web框架,对尚未覆盖的框架如果有需求,Xcheck也可迅速适配。覆盖漏洞类别包括但不限于以下:
- 命令注入
- SQL注入
- XSS
- XXE
- URL跳转
- 路径穿越
- 反序列化
- 代码执行
- 变量覆盖
- ...
2 简单聊一下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并未检测出这个简单漏洞。
<?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任意文件上传漏洞分析与检测

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

- 污染传入, combineArray函数取出
$_FILES当中的数据,传递给$files
- 从
$files中取出数据,并获取了后缀。但是这里$this->getMimeType并没有对后缀进行判断,而是只是获取了memetype. 下面有对memetype进行安全校验。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;
}
- 接着传入
uploadSingleFile函数,使用pathinfo获取到上传文件的后缀就直接拼接上传了。总的来看,只有对mimetype进行校验,所以直接上传“图片马”绕过mimetype校验即可。

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

广东省中山市 1F
这个工具能支持Yii3吗?现在项目正在用这个框架。
广东省深圳市 B1
@ 小日光 Yii3应该能覆盖吧,看介绍主流框架都支持。
河南省信阳市 2F
Xcheck的自定义规则功能还挺实用的,我们自研框架正好需要这种。
湖南省益阳市 B1
@ NightOwl 自定义规则具体怎么写?有没有文档参考下。
吉林省长春市 3F
之前用过RIPS开源版,确实有点老了,商用版不知道价格怎么样?
湖北省武汉市 B1
@ 红尘侠 商用版价格不透明是通病,估计得找销售聊吧。
澳大利亚 4F
感觉检测速度是个关键指标,实际扫大项目时等太久真的难受。
江苏省无锡市 B1
@ 阴司鬼差 速度优势有多大?能对比下扫同一个项目的时间吗?
山东省济南市 5F
图片里的例子挺直观的,ssrf这种常见的都没扫出来确实有点那啥。
河南省安阳市 6F
wpdiscuz这个漏洞分析得挺清楚,mimetype绕过算是经典手法了。
江苏省苏州市 7F
工具对比挺客观的,没一味吹自己,这点不错。
北京市 B1
@ SupernovaEmber wpdiscuz那个漏洞分析挺详细,mimetype绕过确实是老生常谈的问题了。
辽宁省沈阳市 8F
PHP安全工具这块感觉选择不多啊,多一个竞争者总是好的。
日本 9F
希望能多分享点实际案例,光讲原理有点干。
湖北省武汉市 10F
期待后续更新,关注公众号了。
台湾省 11F
我们公司之前用RIPS扫过项目,误报确实有点多,Xcheck误报率怎么样?
上海市 B1
@ 话痨超人 RIPS误报多到崩溃,希望Xcheck真能改善这块。
广东省广州市 B1
@ 话痨超人 商业版价格要是太高小团队根本用不起,求个亲民点的方案。
广东省汕头市 12F
这种工具就怕规则库更新慢,漏掉新漏洞。
河南省新乡市 13F
手动审计还是少不了,工具只是辅助。
江西省 14F
wpdiscuz那个例子挺典型,很多插件都栽在文件上传上。
印度 B1
@ 夜魇之子 文件上传漏洞真是一代版本一代神,防不胜防。
江苏省无锡市 15F
PHP安全这块感觉越来越卷了,好事儿。
江苏省常州市 B1
@ 夜之寂 手动审计还是不能完全替代,工具辅助能提效就行。
陕西省西安市 16F
有没有试用版可以下载试试?
浙江省嘉兴市 17F
商业版一般怎么收费的,按项目还是按年?
韩国 18F
这个工具能支持自研框架挺关键的,我们这小众框架太难了。
日本 19F
感觉误报率低才是王道,不然每天都在看垃圾告警。
浙江省 20F
那个ssrf例子确实离谱,这种都能漏?🤔
江苏省徐州市 21F
我们之前也踩过mimetype校验的坑,传个png马直接打穿。
陕西省榆林市 B1
@ 孤月听风 文件上传只校验mimetype确实不行,后缀白名单必须上。
日本 22F
有没有可能出个docker镜像版?部署起来方便点。
日本 23F
PHP安全工具确实不多,有个国产的挺好的。
陕西省西安市 24F
有点好奇Xcheck怎么处理动态调用的,比如call_user_func?
印度 25F
感觉还行,我们这小公司正愁没趁手的工具呢。
广东省深圳市 26F
支持自研框架是真的香,之前用别的工具老得手动补规则。
浙江省 27F
这个价格问得好,我也想知道具体怎么收费。
山东省滨州市 28F
误报率低确实关键,不然天天处理假警报太累了。
江苏省常州市 29F
能不能出个社区免费版?个人开发者也想试试。
日本 B1
@ 夜雨打芭蕉 有没有详细的规则编写文档?想自己写点规则试试。
贵州省贵阳市 30F
动态调用这块挺难搞的,call_user_func这类真容易漏。
广东省深圳市 31F
PHP安全工具是该卷起来,竞争多了产品才能进步。
陕西省西安市 32F
mimetype校验翻车不是一次两次了,还是得加后缀白名单。
日本 B1
@ 搬砖工 之前搞文件上传也是栽在这,后来加了双校验才稳住。
北京市 33F
公众号关注了,希望多放点实战案例hhh。
日本 34F
我们这有个老thinkphp项目,不知道Xcheck能不能吃得动?
天津市 35F
Xcheck支持自研框架这个点对我们太重要了,正好在搞内部框架。
四川省广安市 36F
RIPS被收购了啊,之前还看过他们官网。
重庆市石柱县 37F
速度优势具体体现在哪?扫一个中型项目大概要多久?
湖北省武汉市 38F
这个例子举得挺好,工具再牛也有盲区。
内蒙古通辽市 39F
我们项目用的Yaf,之前找工具适配挺麻烦的。
北京市海淀区 40F
误报率低是刚需,不然天天验证告警太浪费时间了。
陕西省汉中市 41F
期待多出点实战案例,光看功能介绍有点虚。
韩国 42F
Xcheck扫我们那套老Yaf项目能行不?
湖南省衡阳市 43F
误报率低的话真可以试试,现在被假警报烦死了。
文莱 44F
那个ssrf例子太典型了,curl没校验url直接传参肯定出事啊。
越南 45F
mimetype绕过这招都用烂了,插件开发者咋还不长记性🤔
重庆市 46F
自定义规则对我们这种搞内部框架的简直是救命稻草。
安徽省安庆市 47F
有没有人试过在Laravel9上跑Xcheck?兼容性咋样?
河南省郑州市 48F
RIPS连pikachu都扫不出漏洞,有点拉胯了啊。
河南省濮阳市 49F
这个工具对thinkphp的支持程度如何?
重庆市 50F
误报率确实关键,现在用的工具假警报太多了
山东省滨州市 51F
之前也遇到过mimetype绕过的问题,太坑了
北京市 52F
有没有详细的性能对比数据?
上海市 53F
自定义规则功能对我们这种自研框架太友好了👍
上海市 54F
速度优势具体能快多少?扫个中型项目要多久啊
印度尼西亚 55F
RIPS连这么基础的ssrf都扫不出来确实有点失望
澳大利亚 56F
能自研框架这点挺实用的
宁夏银川市 B1
@ 蜂鸟快递员 自研框架的支持对很多项目来说蛮关键的
黑龙江省鹤岗市 57F
wpdiscuz那个案例讲得挺清楚的
浙江省金华市 B1
@ 柚子晴 讲得挺清楚的,一看就懂
澳大利亚 58F
速度这块有数据对比吗?
河南省濮阳市 59F
对thinkphp的支持还挺关键的
河北省廊坊市 60F
期待后续的漏洞披露