2012-12-06 252 views
0

我試圖通過PHP推出的SH文件與爭論,但我不能得到這個工作在所有:PHP執行SH文件

<?php 
$ip = $_GET['ip']; 
$port = $_GET['port']; 

echo shell_exec('sh var/www/html/Grant73565/Grant.sh $ip $port')or die("bash didn't work"); 
echo('Sent!'); 
?> 

通過ssh手動運行該文件能正常工作,如:

./Grant.sh 127.0.0.1 80

然而,在PHP它只是回聲的「Bash沒有工作」。

據我所知,這不是與參數有關,因爲它甚至沒有沒有它們的啓動文件。

+4

做**不**做到這一點。你打開你的服務器到一個完整的遠程妥協。考慮'example.com?ip=;rm -rf /'。享受你的服務器徹底銷燬 –

回答

1

如果要包含變量,則需要使用雙引號。

echo shell_exec("sh var/www/html/Grant73565/Grant.sh $ip $port") or die("bash didn't work"); 

使用您當前的代碼,任何人都可以更改http查詢並在服務器上執行任何操作。這是一個重大的安全漏洞。

解決方案是驗證輸入。該端口將始終爲數字,因此很簡單。您可以使用正則表達式來驗證IP地址。

+0

我瞭解安全風險,無論如何一切都是IP鎖定的。我會在稍後處理它。該代碼仍然「bash無效」。 – user1372896

+0

你確定路徑正確嗎?你是否試圖打印出命令並通過shell運行它? – Michael

+0

是的,正在查找/ -name Grant.sh 返回:/var/www/html/Grant73565/Grant.sh – user1372896