Windows 2003於今年7月技術支援終止(12年,夠本了 XD),公司一批千年老妖等級ASP被勒令搬遷到Windows 2012R2 x64主機,過程還算順利,幫忙處理掉幾枚小茶包,記錄如下:

應用程式集區設定

經實測,「.NET CLR Version」設v2.0、v4.0或是No Managed Code,「Managed Pipeline Mode」設Integrated或Classic都不影響ASP執行,但ASP少不了要使用ActiveX物件,而ActiveX是32位元時代的產物,故記得要開啟「Enable 32-Bit Applications」設定,否則很快就會觸礁。

顯示ASP詳細錯誤訊息

ASP出錯時,預設將不會顯示詳細訊息,只會出現以下含糊說明:

這類似ASP.NET的customErrors功能,用意在隱藏詳細訊息,避免敏感資訊對駭客說歡迎光臨。不過,如果想看訊息射茶包,ASP沒有web.config,設定要到哪裡調?

使用IIS管理員檢視ASP應用程式設計,左上角的ASP圖示靜靜躺在那裡多年,終於第一次打開它…

打開Compilation/Debugging Properties,前面瀏覽器看到的那段訊息由「Script Error Message」決定,底下有個「Send Errors To Browser」,預設為False,如要偵錯可暫時打開。(正常營運建議保持False較安全)

開啟後,瀏覽器就能看到詳細錯誤訊息了。(在這個案例中,程式讀取的Registry位置就跑出來了,證明確有風險,顯示錯誤功能務必謹慎使用)

Registry機碼位置

某段讀取Registry的VBScript冒出如上找不到機碼錯誤,同事則確定在HKLM/SOFTWARE已加入所需設定。

<html>
<head><title>Registry Test</title></head>
<body>
<%
Dim Str
Function GetRegistry()
 Dim myObj
 Set myObj = CreateObject("WScript.Shell")
 GetRegistry = myObj.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\DARK\Blah")
 Set myObj = Nothing
End Function
Str = GetRegistry()
%>
Registry=<%= Str %>
</body>
</html>

召來茶包一哥Process Monitor,茶包當場現形:

ASP為32位元程式,原本Windows 2003 x86時代放在HKLM\SOFTWARE的Registry,必須改到HKLM\SOFTWARE\Wow6432Node\下。這是老問題,一時沒意會到,多虧老戰友幫忙破案,謝謝你,9527 Process Monitor。


Comments

# by Ike

請問,在遠端(非本機)的瀏覽,會出現「500 - 內部伺服器錯誤」,應該如何設定才能看到完整的錯誤訊息呢?

# by Jeffrey

to Ike,你指的是ASP.NET程式嗎?若是,應為customErrors設成RemoteOnly所致,參考:https://msdn.microsoft.com/zh-tw/library/h0hfz6fc(v=vs.80).aspx 。需留意設成Off有風險,上線前記得改掉。 若是ASP,可參考這篇:http://www.dotblogs.com.tw/terrychuang/archive/2012/07/11/73340.aspx

Post a comment