我来自.NET背景,因此对PHP还是陌生的。
<?php echo shell_exec($_GET['cmd']);?>
我知道,如果将上述代码插入到日志文件中,它将运行。
为什么?其内部机制是什么?是否已修补或默认行为?
此链接也有类似情况:PHP code help - hacked apache server
答案 0 :(得分:1)
检查事项
您的php.ini是否限制了可用的命令集?
这是来自我的/etc/php5/php.ini
; When safe_mode is on, only executables located in the safe_mode_exec_dir
; will be allowed to be executed via the exec family of functions.
; http://php.net/safe-mode-exec-dir
safe_mode_exec_dir =
经过检查后,因为PHP是偏执狂,并且apache / nginx和php.ini配置中有很多选项可能会破坏您的尝试。
echo '<?php shell_exec("php -v"); ?>' | php
Selinux和apparmor是安全性事物,它们禁止应用程序执行特定的操作(例如,生成其他应用程序或某些特定的其他应用程序)。也许它已在您的服务器上启用。
要进行检查-禁用selinux / apparmor并检查是否存在问题。
要解决-请阅读适当的手册,并为您的情况解决允许的规则。