常见风险函数如下:

  • 命令执行类风险函数

命令执行类的风险函数(如eval,system,exec等),可以用于执行代码或运行系统命令。如果外界参数未经过妥善的过滤处理,进入了这类函数,则可能造成远程任意命令执行的风险。比如如下代码就存在此类风险:

eval($_GET['x']);
  • 回调类风险函数

回调类的风险函数(如call_user_func,usort,array_reduce,preg_filter等),可以用于调用指定的函数。如果外界参数未经过妥善的过滤处理,作为参数传入回调的函数,则可能造成任意代码执行的风险。比如如下代码就存在此类风险,通过控制get请求的参数,执行参数可控的任意函数名的函数:

call_user_func($_GET['func'],$_GET['arg']);
  • 文件操作类风险函数

文件操作类的风险函数(如copy,file_get_content,fwrite等),可以用于创建或移动文件。如果外界参数未经过妥善的过滤处理,进入了这类函数,则可能造成任意文件写入或目录穿越的风险。比如如下代码就存在此类风险,通过控制get请求的参数,读取外网内容,写入指定路径的文件中:

$content = file_get_content($_GET['url']);
fwrite($_GET['path'], $content);

除了以上几类较为严重的风险,启发引擎还可能会检测到反序列化、sql注入、混淆加密等风险。检测到文件存在风险,并不代表此文件一定是webshell,建议您进行如下操作来确认:

  1. 确认此文件是否为开发者的项目文件。
  2. 确认此文件是否被篡改。
  3. 确认此文件中风险函数的使用方式是否符合预期。

文章来源于腾讯云开发者社区,点击查看原文