一、命令执行漏洞函数(可执行系统命令)
原理:函数能够调用服务器操作系统命令,若前端传入的参数可控且没有做好过滤,攻击者就能注入恶意系统指令,读取文件、获取服务器权限。
1. system():执行系统命令,直接打印输出结果 2. exec():执行外部命令,返回命令最后一行输出 3. shell_exec():执行shell命令,等价于反引号 `cmd` 4. passthru():执行命令并把原始输出直接输出 5. popen() / proc_open():开启进程执行系统命令
二、代码执行漏洞函数
原理:可以将普通字符串识别并运行成PHP代码,一旦外部参数可控,攻击者就能直接在服务器运行任意PHP
1. eval():最经典,将字符串解析为PHP代码执行 2. assert():PHP5/旧版可将字符串当作代码执行 3. preg_replace():PHP<7.0 搭配 /e 修饰符存在代码执行 4. create_function():可构造恶意PHP代码执行
三、文件包含漏洞函数
原理:加载外部文件并解析运行文件内PHP代码。文件路径可控时,会产生本地文件包含(LFI)、远程文件包含(RFI)漏洞。
1. eval():最经典,将字符串解析为PHP代码执行 2. assert():PHP5/旧版可将字符串当作代码执行 3. preg_replace():PHP<7.0 搭配 /e 修饰符存在代码执行 4. create_function():可构造恶意PHP代码执行
四、文件操作相关高危函数
可控参数时触发本地/远程文件包含漏洞
原理:用于读写服务器文件,部分函数支持网络协议,参数无过滤会引发任意文件读取、SSRF、写入木马等风险
1. file_get_contents():读取文件,传入URL会触发SSRF漏洞 2. file_put_contents():写入文件,可控文件名可写入木马 3. fopen()、readfile():任意文件读取风险
五、其他风险函数
1. unserialize():反序列化函数,存在PHP反序列化漏洞 2. mail():配置不当存在邮件注入漏洞