clearlove
PHP命令注入恢复

1.PHP可能会导致命令执行的有几个函数需要注意

i.system(string $command[,int return_var])

$command:要执行的命令

return_var参数,则外部命令执行后的返回状态将会被设置到此变量中。

返回状态0代表执行失败,1代表执行成功

exec

out为exec命令的结果,每一个元素被结果的一行填充

passthru可以替代exec()或者system()

shell_exec  返回输出,需要echo出来

``的效果与shell_exec相同

 

popen,proc_open,pcntl_exec

2.防御措施

i.escapeshellcmd

Escapeshellcmd()函数会转义命令中的所有shell元字符,包括(#,&,|,*,?,~,<>,^,(),[],{},$,\\)

<?php
$action=$_GET[\'cmd\'];
echo "<pre>";
system($action);
echo "</pre>";
?>

 

之后将代码修改成为这样

<?php
$action=$_GET[\'cmd\'];
$action=escapeshellcmd($action);
echo "<pre>";
system($action);
echo "</pre>";
?>

这里的转义符号扭曲了>>的意思,所以只能echo出来,却不能写进去了

============================================

ii.escapeshellarg

escapeshellarg会将参数限u制在一对单引号里,然后转义参数中所含有的单引号,这样就无法对当前执行进行截断。

比如有以下代码

<?php
$action=$_GET[\'cmd\'];
echo $action;
?>

当我们增加escapeshellarg之后,单引号会被包裹起来

 

 

分类:

技术点:

相关文章: