PHP提权之异步执行

在服务器上都会定时运行一些脚本以完成周期性的任务. 而这些脚本往往是以root权限启动的, 替换或者改变其中的内容就可以完成提权.而今天在这要讲解的就是php提权中的异步执行方法.

在php中一般大家都用下面四个函数来调用系统命令,或者外部程序:

<?

echo exec("dir");

echo shell_exec("dir");

echo system("dir");

echo passthru("dir");

echo `dir`;

?>

linux下可以通过在执行的命令后加上>/dev/null 2>&1 & 来丢弃所有的输出信息, 并在将此行命令单独开出一个进程放到后台执行, 从而不会阻塞当前脚本往下继续执行.

<?

.....

exec("tar cjf /root && >/dev/null 2>&1 &);

......

?>

但是在windows的cmd中并没有提供后台执行这个功能(&). 这时候除了使用at命令来添加定时执行任务外(很多时候定时服务是未打开的), 就只能用popen加上 start /b来完成使命了.

<?

#经过实验只有popen函数可以

#popen("start /b s..bat","r"); #成功

#exec("start /b s..bat");#失败

popen("start /b ping -n 10 www.baidu.com && echo \"1111\" > ok.txt && ping -n 10 www.baidu.com && echo \"2222\" > ok2.txt && ping -n 10 www.baidu.com && echo \"3333\" > ok3.txt ","r");

echo "ALL is finish until here!!!";

?>

转自天国哥哥的博客。