🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
[TOC] ## 远程命令执行 应用程序会调用系统的命令函数,当攻击者可以控制这些函数的参数时,就可以把恶意命令拼接到正常命令中,从而造成远程命令执行漏洞 ## 命令注入漏洞产生的原因 ~~~ 1、用户可以控制输入的内容 2、用户输入的内容被当作命令执行 ~~~ ## 漏洞产生位置 * web源码 Nexus Webmin ElasticSearch * 中间件平台 weblogic Apache * 其他环境 Postgresql Samba Supervisord ## windows命令执行多条语句 ~~~ 命令&命令 先执行第一条,无论是否成功都执行第二条 命令&&命令 只有第一条执行成功,才执行第二条 命令||命令 只有第一条失败的时候,才执行第二条 命令|命令 管道符,将第一条命令的结果传递给第二条命令 ~~~ ## Linux命令执行多条语句 ~~~ 命令;命令 先执行第一条,无论是否成功都执行第二条 命令&&命令 只有第一条执行成功,才执行第二条 命令||命令 只有第一条执行失败,才执行第二条 命令|命令 管道符,将第一条命令的结果传递给第二条命令 ~~~ ## PHP命令执行相关函数 ~~~ 反撇号 `` :输出并返回shell结果。 用法:echo `whoami`; system():执行外部程序,并且显示输出 用法:system('whoami’) passthru() 执行外部程序并且显示原始输出。 用法:passthru('whoami') shell_exec() 通过 shell 环境执行命令,并且将完整的输出以字符串的方式返回 用法:shell_exec('id’); exec() 不输出结果,返回最后一行shell结果,所有结果可以保存到一个返回的数组里面 用法:exec($\_POST\['system'\], $output);print\_r($output); popen() proc_open() pcntl_exec() ~~~ ## 防御方法 * 尽量不要使用命令执行函数 * 客户端提交的变量在进入执行命令函数方法之前,一定要做好过滤,对敏感字符进行转义 * 在使用动态函数之前,确保使用的函数是指定的函数之一 * 对PHP语言来说,不能完全控制的危险函数最好不要使用