2013-03-06 176 views
2

我們有一些安全/滲透測試人員測試我們的ASP.NET應用程序,他們發現了一些被認爲是跨站點腳本漏洞的東西。從我所知道的情況來看,它們看起來像是他們通過將文本<ScRiPt>alert(1)</ScRiPt>插入到其中一個視圖狀態參數中來手動操縱回發的視圖狀態。出於某種原因,即使我們在web.config中指定了自定義錯誤處理程序,但服務器似乎忽略了它們,只是逐個顯示視圖狀態,然後回傳一條通用錯誤消息。因此,<ScRiPt>alert(1)</ScRiPt>在瀏覽器中運行,導致測試人員將其識別爲跨站點腳本問題。無論這是否是合法的漏洞,我希望能夠正確處理此錯誤並將其重定向到我們的自定義錯誤頁面之一,或者至少防止服務器隨意返回視圖狀態錯誤信息。處理無效的視圖狀態錯誤

除了查看IIS中網站的.NET錯誤頁面和錯誤頁面外,我還嘗試了在global.asax的Application_Error方法中做些事情。在那裏我可以看到狀態碼是500,WebEventCode是System.Web.Management.WebEventCodes.RuntimeErrorViewStateFailure,但是我不能在那裏做一個Response.Redirect或Server.Transfer,因爲我得到一個「Response.Redirect不能被調用在頁面回調中「。例外。我也嘗試將EnableViewStateMac設置爲true,將ViewStateEncryptionMode設置爲始終在web.config中,以查看這是否會改變事情,但我仍然能夠重新創建問題。我會很感激任何人可能有的洞察力。

我越來越從服務器返回的錯誤響應看起來是這樣的:

0|/*DX*/({'generalError':'Invalid viewstate. \r\n\tClient IP: 127.0.0.1\r\n\tPort: 51510\r\n\tReferer: https://localhost/-mysettings.aspx\r\n\tPath: /Default.aspx\r\n\tUser-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:15.0) Gecko/20100101 Firefox/15.0.1\r\n\tViewState: /wEPDwUKMjA1OTAyNzk1MWQYBAUeX19Db250cm9sc1JlcXVpcmVQb3N0QmFja0tleV9fFjQFQmN0bDAxJG1haW5Db250ZW50JGN0bDAwJGNwQWRtaW5pc3RyYXRpb25TZXR0aW5ncyRidG5DaGFuZ2VQYXNzd29yZAU/Y3RsMDEkbWFpbkNvbnRlbnQkY3RsMDAkY3BBZG1pbmlzdHJhdGlvblNldHRpbmdzJGJ0bkVkaXRQaWN0dXJlBT9jdGwwMSRtYWluQ29udGVudCRjdGwwMCRjcEFkbWluaXN0cmF0aW9uU2V0dGluZ3MkYnRuU2F2ZUNoYW5nZXMFQmN0bDAxJG1haW5Db250ZW50JGN0bDAwJGNwQWRtaW5pc3RyYXRpb<ScRiPt>alert(1)</ScRiPt>25TZXR0aW5ncyRjYlNpdGVDb3VudHJ5JERERAU8Y3RsMDEkbWFpbkNvbnRlbnQkY3RsMDAkY3BBZG1pbmlzdHJhdGlvblNldHRpbmdzJEFTUHhCdXR0b24zBV9jdGwwMSRtYWluQ29udGVudCRjdGwwMCRjcEFkbWluaXN0cmF0aW9uU2V0dGluZ3MkdXNlckFkZHJlc3MkcG5sQWRkcmVzcyRjYlNlYXJjaGFibGVBZGRyZXNzJERERAU8Y3RsMDEkbWFpbkNvbnRlbnQkY3RsMDAkY3BBZG1pbmlzdHJhdGlvblNldHRpbmdzJEFTUHhCdXR0b24yBT9jdGwwMSRtYWluQ29udGVudCRjdGwwMCRjcEFkbWluaXN0cmF0aW9uU2V0dGluZ3Mk...'}) 
+0

對於安全性/滲透測試人員收取IME量,他們不建議的方式,以避免?如果您在現實生活中遇到錯誤,那麼這是MITM攻擊,或者最終用戶的計算機已經感染了惡意軟件,或者是有人故意搞亂視圖狀態。無論這些人是誰,您的網站都已正確拒絕處理該請求,並且不良數據將不會再傳播。我有一個滲透測試報告說「。aspx「是一個漏洞,因爲它表明正在使用IIS。 – 2013-03-06 22:37:03

回答

0

他們操縱網頁的源代碼添加腳本代碼,然後執行。這不是任何一本書的漏洞(因爲價值並沒有持續存在,警報只是作爲他們行爲的直接結果而執行 - 就像他們自己正在黑客攻擊一樣)。沒有什麼能夠阻止他們直接在頁面中添加該腳本...

至於錯誤消息,您應該查看您的web.config文件中的設置<customErrors mode="On" />MSDN reference

如果這沒有幫助,另一種選擇是清除Application_Error中的異常並拋出一個通用異常。

+1

我已經嘗試過,它適用於大多數情況,但由於某些原因,此特定錯誤繞過它或永遠不會得到它。剛纔我也嘗試在Application_Error中拋出泛型異常和新的HttpException,但是這並沒有改變響應。關於漏洞,我想理論上可能有人可以在釣魚攻擊中使用它。例如,通過查詢字符串傳遞這種類型的視圖狀態數據,並誘騙人們通過合法的SSL證書在合法的URL上輸入數據。 – Graham 2013-03-06 22:00:10

3

我能夠想出一個可行的解決方案。這不是完美的,但完成了工作,並防止JavaScript出現在服務器的響應。我基本上只是清除當前的錯誤,並輸出我自己的自定義響應。我把在Global.asax的Application_Error事件下面的代碼:

//Handle view state manipulation 
HttpApplication httpApp = this.Context.ApplicationInstance; 
HttpException httpEx = httpApp.Server.GetLastError() as HttpException; 
if (httpEx != null) 
{ 
    if (
     httpEx.WebEventCode == System.Web.Management.WebEventCodes.AuditInvalidViewStateFailure 
     || 
     httpEx.WebEventCode == System.Web.Management.WebEventCodes.InvalidViewState 
     || 
     httpEx.WebEventCode == System.Web.Management.WebEventCodes.InvalidViewStateMac 
     || 
     httpEx.WebEventCode == System.Web.Management.WebEventCodes.RuntimeErrorViewStateFailure 
     ) 
    { 
     HttpContext.Current.ClearError(); 
     Response.Write("Error: An invalid viewstate has been detected (WebEventCode: " + httpEx.WebEventCode.ToString() + ")."); 
    } 
}