合规国际互联网加速 OSASE为企业客户提供高速稳定SD-WAN国际加速解决方案。 广告
[TOC] ## 相关函数 ~~~ • exec() :不会输出结果。而是返回结果的最后一行 • system():会输出结果,返回true/false • passthru() :输出结果 无返回 • shell_exec()与` `:不输出结果,返回执行结果 ~~~ ## 审计思路 * 搜索命令执行函数 * 追踪函数 * 追踪可控变量 * 漏洞利用 ## 漏洞利用 Windows和Linux都支持的命令连接符: ~~~ cmd1 | cmd2 :只执行cmd2 cmd1 || cmd2 :只有当cmd1执行失败后,cmd2才被执行 cmd1 & cmd2 :先执行cmd1,不管是否成功,都会执行cmd2 cmd1 && cmd2 :先执行cmd1,cmd1执行成功后才执行cmd2,否则不执行cmd2 Linux还支持分号(;),cmd1 ; cmd2 按顺序依次执行,先执行cmd1再执行cmd2 ~~~ ## 修复建议 1.严格控制该功能访问权限,建议高权限才能访问。 2.在满足业务需求的情况下,可以设置白名单,可使用escapeshellcmd()以及 escapeshellarg()函数进行过滤,命令直接写死在代码中更好。 3.给命令及代码执行功能设置独立密码。 4.代码执行功能限制脚本可访问的路径。 5.在满足需求的情况下限制当前执行命令的系统用户权限 ## 修复函数 ~~~ escapeshellcmd() ~~~ ``` 过滤整条命令,过滤的字符为: &、;、`、|、 \* 、?、~、、 ^ 、(、)、\[、\]、{、}、$、\\、 \\x0A、\\xFF、%、 ‘和”仅仅在不成对的手被转义。 ``` ``` Windows转义为在前面加^ ,Linux转义为在前面加\\ ``` ~~~ escapeshellarg() ~~~ 过滤参数,将参数限制在一对双引号里,确保参数为一个字符串,会把双引号替换为空格