freeBuf
主站

分类

云安全 AI安全 开发安全 终端安全 数据安全 Web安全 基础安全 企业安全 关基安全 移动安全 系统安全 其他安全

特色

热点 工具 漏洞 人物志 活动 安全招聘 攻防演练 政策法规

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

Xcheck之PHP代码安全检查
2021-03-22 10:13:18

1616378737_6057fb7114422e5018868.png!small?1616378737392

1 PHP安全检查引擎

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

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

2 简单聊一下RIPS

1616378782_6057fb9e0540a8cc9424b.png!small?1616378782329

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

1616378807_6057fbb7ccf409a45bf3e.png!small?1616378808144

我们通过一些渠道接触使用到了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任意文件上传漏洞分析与检测

1616378836_6057fbd4a9d0697a972a2.png!small?1616378837031

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

先看下xcheck的检测结果。

1616378858_6057fbea775b4d541c0f5.png!small?1616378858837

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

1616379003_6057fc7b619e24ab4f4c6.png!small?1616379003765

4 最后

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

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

# web安全 # 系统安全 # 数据安全 # 漏洞分析 # 网络安全技术
免责声明
1.一般免责声明:本文所提供的技术信息仅供参考,不构成任何专业建议。读者应根据自身情况谨慎使用且应遵守《中华人民共和国网络安全法》,作者及发布平台不对因使用本文信息而导致的任何直接或间接责任或损失负责。
2. 适用性声明:文中技术内容可能不适用于所有情况或系统,在实际应用前请充分测试和评估。若因使用不当造成的任何问题,相关方不承担责任。
3. 更新声明:技术发展迅速,文章内容可能存在滞后性。读者需自行判断信息的时效性,因依据过时内容产生的后果,作者及发布平台不承担责任。
本文为 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录