2012-01-05 32 views
4

我繼承了一個WordPress網站,該網站使用RunPHP插件在帖子之間執行PHP代碼片段。我有一種感覺,這不是實現這種功能的最佳方式。但是,由於這是遺留的代碼,在很長一段時間內功能正確,我需要一些可靠的問題場景示例。在WordPress中使用eval()插件的漏洞示例

對於那些不熟悉RunPHP的人來說,它是一個插件,它使用eval()來執行Post或Page body中嵌入的PHP代碼。代碼塊不會從用戶那裏收到,而是由網站所有者/內容創建者輸入到數據庫中。

在我們的上下文中,這個插件的用例如下。

表單被創建爲Post,其提交操作被設置爲Page(我們稱之爲表單處理程序)。表單處理程序在其正文中包含PHP代碼,併爲該頁激活RunPHP插件。當表單被提交時,表單處理程序接收數據並執行其正文中的PHP代碼。

這是除了表單處理程序代碼(動態用戶提交的變量評估,沒有輸入消毒,沒有參數化SQL查詢)的一些相當明顯的安全問題。

有人可以在這裏驗證我對WP中的運行時代碼執行插件的懷疑嗎?

非常感謝。在後

表單代碼 -

<form action="/?p=1234" method="post"> 
    <input name="foobar" type="text" /> 
    <input type="submit" /> 
</form> 

處理程序代碼中的頁面(這是eval()函數存儲在數據庫中,並且 - 在運行時ED) -

<?php 
    $foobar = $_POST["foobar"]; // This contains a SQL-injection vulnerability; But that's a separate issue, I think 
    $query = "INSERT INTO table (field) VALUES (\"" . $foobar . "\")"; // Use variable in a query string 
?> 
+1

硬盤沒有看到一些實際的代碼來判斷,我認爲 – 2012-01-05 12:21:53

+0

感謝您的答覆。我認爲代碼可能有點不相關。我所要問的是,是否有人可以在包含用戶提交的PHP變量的可信代碼中使用eval()來考慮安全漏洞。 – 2012-01-05 12:24:34

+0

我上面可能聽起來有點粗魯,所以我添加了一些示例代碼來說明我的觀點。讓我知道這是否有助於澄清我的觀點。 – 2012-01-05 12:32:47

回答

0

很難說沒有看到實際的網站/代碼,但通常eval是安全問題的潛在網關。想象一下,您的網站在某處存在SQL注入問題:攻擊者不僅可以注入數據,還可以將PHP代碼應用到您的應用程序中。 Eval有一些(少數)有效的使用領域,但通常我會避免它。 Wordpress很容易擴展,也許嘗試將功能移植到插件。

0

誰提交這些表格?如果任何人和每個人都可以提交,那麼是什麼阻止他們執行代碼來獲取他們感興趣的東西呢?

你可以使用這個漏洞,可能讀取文件,執行的MySQL查詢等