在伺服器上都會定時運作一些腳本以完成周期性的任務. 而這些腳本往往是以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!!!";
?>
轉自天國哥哥的部落格。
原文:http://www.cnblogs.com/dongchi/p/4272890.html