這個漏洞在 packetstorm 被發表,我把它翻成中文,加上自己的一些註解,希望對在 NT 上執行
PHP 的朋友有一些幫助。
當你下載 PHP 後,在它內含的安裝檔中幫助了 PHP 在 NT Apache Web Server 的安裝方式
,其中的安裝幫助會要你將底下這幾行設定加到apache 的 httpd.conf 設定檔中,而這個安裝文
件將導引你將你的系統入口網站大開。
這幾行指令為:
ScriptAlias /php/ "c:/php/"
AddType application/x-httpd-php .php
Action lication/application/x-httpd-php .php
Action lication/application httpd-php "/php/php.exe"
我們進一步的解釋這三行設置,這些設定指令要求 Apache 將 /php/ 這個虛擬目錄直接映射到 c:/php/
目錄下,所以當你使用:
"http://www.example.com/php/"
連結網頁的時候,實際上 Web Server 是直接存取 c:/ php/ 這個目錄,這時候你會看到 "Access Denied"
的錯誤訊息,但是當你改用:
"http://www.example.com/php/php.exe "
指令來連線的時候,你會發現伺服器回傳了 "No input file specified." 這行字,這行字是由 php.exe
所進行的回送,表示你剛剛在這台 server 上執行了 php 執行檔。
如果你的伺服器是使用 php 裡所教你的安裝方法來做設定的,這時候你可能有了以下的危機。
[** 漏洞 1 **]
我們可以利用這個漏洞來讀取這台伺服器上的任何一個文件,甚至可以跨磁碟讀取,只要使用下列方式連接:
"http://www.example.com/php/php.exe?c:winntrepairsam"
PHP 會將檔案 "c:winntrepairsam" 丟給瀏覽器,並把它顯示出來,而這個檔案正是 Windows NT
保存密碼的所在,
"http://www.example.com/php/php.exe?d:winntrepairsam"
PHP 會把在 D: 磁碟中相同的文件傳出。
而有了這個 SAM 文件,駭客可以用來破解你在這台機器上所設定的密碼。
[** 漏洞 2 **]
如果你指定了在 php 目錄下的文件,你的 Web 伺服器會嘗試執行這個文件,並且傳會錯誤訊息,所以當你
使用了:
"http://www.example.com/php/php4ts.dll"
這個錯誤會導致 Web Server 傳回 "couldnt create child process: 22693: C:/php/php4ts.dll"
這個訊息,因而漏了你安裝 PHP 的真實目錄
PS. 經過我的測試,第二個漏洞在 PHP V4 . 11 上執行時將回傳回 "Internal Server Error" 的錯誤,
並不回漏目錄結構,但是在 PHP V4.11 中,第一個漏洞仍然有效。
簡易解決法∶使用較長且不易判定之虛擬目錄來放置 PHP 執行文件,例如∶
ScriptAlias /php-mY-sCrIpT/ "c:/php411/"
AddType application/x-httpd-php .php
Action application/x-httpd-php "/php-mY-sCrIpT/php.exe"
這樣入侵者將不易得知 PHP 的存放"
這樣入侵者將不易得知 PHP 的存放目錄,而降低了被入侵的機會。
改過 httpd.conf 後記得要將 Apache Service 重新啟動∶
NET STOP APACHE