2011-08-13 30 views
2

我想開發代碼,我想攔截正在發送到PHP可利用函數(如eval())的數據。但是,我的代碼不應該編輯或觸摸eval以任何方式存在的代碼。攔截PHP的利用可利用的功能

舉個例子:

我創建一個PHP文件,我的攔截器代碼,並使用「規定」與eval()函數(或任何其他可開發的PHP函數)來調用它的目標PHP頁面中。這怎麼可能成爲可能?

回答

2

首先,PHP中的所有功能都可用於開發系統。

爲了以這種方式改變PHP的行爲,您需要修改PHP解釋器本身 - 具體而言,您需要使用interceptrunkit PECL(或自己重寫解釋器)。或者運行一個翻譯程序來重新引用(您的「可利用」函數列表)以包裝函數(然後在包含文件中指定這些包裝)。

+0

這個翻譯程序如何正確地工作以重新映射引用可利用函數來包裝函數?你能否詳細說明一下? 某些功能無法利用或危險的原因是因爲即使在接收到未經協商的基於攻擊的輸入的情況下,它們也不會執行任何危險操作。例如打印$ str;不能是匯的函數(據我所知)最多隻能顯示字符串'str'的內容。我對可能造成傷害或允許用戶獲得比系統允許的更多知識的功能更具體地感興趣。 – user890928

+0

「,因爲它最多隻顯示字符串'str'content」,這足以竊取會話cookie並劫持會話。翻譯計劃? sed's/eval \(/ wrap_eval \(/'somefile.php> somefile.php – symcbean

0

對我來說,聽起來好像你想寫一個PHP擴展,它可以攔截一些buid-in函數。我不知道一個好的教程,所以你想自己使用你最喜歡的搜索引擎。還有一個提示:xdebug已經爲var_dump()print_r()等做了這樣的事情。所以,也許你可以檢查它的來源和玩具。祝你好運。

+0

是的擴展,但它必須在用戶空間,而不是在PHP內核。所以我應該能夠使用require並讓擴展工作。我不希望用戶使用我的PHP版本,而必須在他們的系統上重新編譯PHP。 – user890928

+0

無需重新編譯PHP:查看xdebug安裝指南:http://xdebug.org/docs/install。這是與PHP一起加載的東西。 – Shi

+0

好的...但是有沒有可能的只有在用戶空間的東西? – user890928