常见风险函数如下:
- 命令执行类风险函数
命令执行类的风险函数(如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,建议您进行如下操作来确认:
- 确认此文件是否为开发者的项目文件。
- 确认此文件是否被篡改。
- 确认此文件中风险函数的使用方式是否符合预期。