天天看點

Web安全測試學習筆記——“淘金”式攻擊

做軟體測試的目的在于找到缺陷和證明缺陷,在這個過程中進行全面覆寫性或反複測試,以圖無限地趨近100%,結果可能很好,但工作效率非常低。在web安全測試上,如何避免大海撈沙,需要有的放矢,把有價值的資訊淘出來。

  安全測試的出發點和功能測試不太相同,安全測試的手段就是攻擊,攻擊,還是攻擊。尋找有價值的資訊,就是測試的第一招。“淘金”就是其中的一種方式,一般來說由以下資訊需要關注。

  ◆ html中的代碼注釋

  ◆ html中的敏感代碼

  ◆ 伺服器或應用程式的錯誤資訊和http響應

  代碼注釋是一塊很容易被開發人員忽略掉的資訊,因為對于開發人員來說,這些就是他們做後期開發的“工程文檔”,再正常不過的東西,甚至很樂意檔案中能有更的關鍵注釋。如代碼中會出現“标記為1時,表示xxx資訊”或“若為空,則交由xx處理”。這類資訊隻需要通過閱讀html檔案即可發現,并且對于攻擊者來說是非常好的指南。

  如果攻擊者能夠根據通過對源代碼的處理,擷取到資料庫資訊、使用者名、密碼等資料時,這個應用是非常危險的。要擷取這樣的資訊,首先需要清楚應用間的資料傳遞方式。通過get方式傳遞的,可以直接在url中擷取到“參數名=參數值”,如果是通過post傳遞的,就需要借助抓包工具,比如httpfox、httpwatch。當把所有關聯頁面都浏覽完成後,就可以生成一張頁面間的映射關系圖,同時也可以知道它們之間參數的傳遞情況。如果應用程式實作了通路級别區分,比如進階别使用者享有特權操作,那麼就可以從低等級使用者開始,逐級淘金。通過映射圖閱讀源代碼,尋找注釋中引導資訊,就可以獲得有價值的資訊。除了手工地去尋找,還可以利用正規表達式自動搜尋。

  當找到以上資訊後,檢查頁面之間傳遞的參數,看看哪些參數能夠使得應用程式出錯,這個時候就能發現一些有用的資訊。如連接配接資料庫時出錯,腳本無法處理,該出錯頁面不但會提示錯誤,還可能把出錯點附近的相關代碼也顯示出來,這些相關代碼可能會把資料庫名、表對象名及字段名等資訊暴露出來。或者強行産生文法錯誤、營造無法處理的異常場景來破壞應用程式,則會得到伺服器對其響應的許多函數調用。是以無論是應用程式還是web伺服器,應該謹慎維護好應對對政策。還有一種常見的漏洞,大家可以到各網站上去自行尋找,即對于使用者名和密碼輸入不正确時觸發不同的報錯資訊。如果使用這樣的邏輯進行使用者名和密碼比對的判斷,當攻擊者暴力破解時,他能夠很清楚的知道,目前使用的使用者名是否是已注冊使用者(當使用者名正确時,提示是密碼錯誤)。

  如何進行防範

  1、确定html中注釋是否包含敏感資訊;或在日常環境中保留這些注釋,而線上上去除這些注釋。

  2、盡量對于錯誤資訊進行二次處理,盡量讓使用者看到的錯誤提示是模糊且有價值的;盡量把相關細節資訊保留在伺服器的日志檔案中,友善開發調試的同時規避安全風險。同時需要定期檢查這些日志檔案,了解是否有錯誤資訊是未被處理的。