黑客攻防技術寶典Web實戰篇第2版—第11章 攻擊應用程序邏輯

11.1 邏輯缺陷的本質

1、一般邏輯缺陷表現爲設計者或者開發者在思考過程中做出的特殊假設存在明顯或者隱含的錯誤。

11.2 現實中的邏輯缺陷

11.2.1 例1:徵求提示

1、功能:如“記住我”功能,在瀏覽器設置一個永久cookie存信息。

2、假設

3、攻擊方法

 

11.2.2 例2:欺騙密碼修改功能

1、功能:用戶可修改密碼,但須提交舊密碼。而管理員可修改任一賬戶密碼,不需提交舊密碼。

2、假設

3、攻擊方法

 

11.2.3 例3:直接結算

1、功能:添加購物車、確認訂單、輸入支付信息、輸入交貨信息。

2、假設

3、攻擊方法

 

11.2.4 例4:修改保險單

1、功能:應用程序爲用戶提供保險報價,若需要還可在線完成並提交一份保險申請。

2、假設:用戶提交了應用程序不希望他提交的參數

3、攻擊方法

11.2.5 例5:入侵銀行

1、功能:應用程序允許尚未使用在線應用程序的顧客進行註冊,用戶正確輸入註冊信息。

2、假設

3、攻擊方法:

 

11.2.6 例6:規避交易限制

1、功能:財務人員能在公司擁有賬戶人員間進行轉賬。

2、假設:轉賬負值等不合理值

3、攻擊方法

11.2.7 例7:獲得大幅折扣

1、功能:購買一定數量商品,有折扣

2、假設

3、攻擊方法

11.2.8 例8:避免轉義

1、功能:應用程序的設計者決定執行某種功能,該功能需要椅子變量的形式向操作系統命令提交用戶控制的輸入。

2、假設

3、攻擊方法:轉義字符本身進行轉義

11.2.9 例9:避開輸入確認

1、功能:應用程序包含一組輸入確認程序,以防範各種類型攻擊,其中的兩種防禦機制SQL注入過濾和長度限制。

2、假設:兩種防禦機制都該考慮。

3、攻擊方法:SQL注入防禦通過用戶輸入中的任何引號配對而生效,因此在沒對引號中,第一個引號將作爲第二個引號的轉義字符。但若將經過轉義的輸入提交給“截短”功能,將會出現漏洞威脅。

 

11.2.10 例10:濫用搜索功能

1、功能:正常用戶可以運用搜索功能通過付費方式搜索到受保護文檔。

2、假設:若無付費通常就會返回一些模糊信息。

3、攻擊方法:可利用推斷搜索功能提取正常情況下需要付費才能查閱的信息,

 

11.2.11 例11:利用調試消息

1、功能:在應用程序報錯且返回錯誤數據的時候,確保數據的詳細和正確,方便爲開發人員後期糾正彌補。

2、假設:用戶通過檢查瀏覽器處理的請求與響應,可能獲得調試消息中包含的所有信息。但這些消息中並未包含與實際故障有關的任何細節。

3、攻擊方法:

 

11.2.12 例12:與登錄機制競賽

1、功能:應用程序執行採用一種安全多階段的登錄機制,要求用戶提交幾個不同的證書才能獲得訪問權限。

2、假設:驗證機制接受了大量設計審查與滲透測試,應用程序所有者確信攻擊者無法向驗證機制發動有效攻擊,從而獲得未授權訪問。

3、攻擊方法:

 

11.3 避免邏輯缺陷

1、下列多種措施降低缺陷:

①將應用程序各方面的信息記錄等詳細記錄在文檔中,方便他人理解,

②代碼註釋詳細

③儘可能考慮假設全面,包括每種情況

④不要相信用戶輸入的值是合法的,做好不合理處理。

11.4 小結

當攻擊應用程序的邏輯缺陷時,滲透測試員既要進行系統性的探查,也要從不同角度思考問題。還需要了解開發人員的思維。從別人的角度出發。

11.5 問題

1、何爲強制瀏覽?可以通過它確定哪些漏洞?

答:強制瀏覽包括避開瀏覽器導航對應用程序功能訪問順序實施的任何限制。應使用強制瀏覽測試多階段過程或其他區域中的錯誤假設。通常,這些假設會導致可以通過使用強制瀏覽加以利用的訪問控制漏洞。

 

2、爲防止不同類型的攻擊,應用程序對用戶輸入實施各種全局過濾。爲防止SQL注入,它將出現在用戶輸入中的單引號配對。爲防止針對一些本地代碼組件的緩衝區溢出攻擊,它將超長的數據截短到適當的長度。這些過濾有什麼問題?

答:如果在實施長度限制之前將引號配對,則通過在配對的兩個引號之間截短輸入,就可以在輸入中引入奇數單引號(請參閱第9章瞭解詳情)。

如果在配對之前應用長度限制,仍然可以通過在有效載荷的開頭插入大量單引號,使該有效載荷充分放大,並使用位於有效載荷末尾的專門設計的數據來溢出緩衝區,從而達到利用任何緩衝區溢出條件的目的。

 

3、可以採取哪些步驟來探查某登錄功能中是否存在故障開放條件?(列出想到的各種不同測試。)

答:應使用所控制帳戶的證書,多次重複登錄過程,並以特定方式修改請求:

(a)對於提交的每個參數,嘗試提交一個空值,完全省略名稱/值對,並使用不同的值多次提交同一數據項。

(b)如果登錄過程包括多個階段,應嘗試以不同的順序執行這些階段、完全跳過單個階段、直接進入任意階段,以及在不需要參數的階段提交參數。

(c)如果多次提交了同一數據項,應進行探查,以確定如何處理每個值,以及在一個階段確認的數據在後續階段是否仍爲可信數據。

 

4、某銀行應用程序採用一種非常安全可靠的多階段登錄機制。在第一個階段,用戶輸入用戶名和密碼。在第二個階段,用戶輸入在物理令牌上顯示的一個不斷變化的值,並通過隱藏表單字段重新提交前面輸入的用戶名。可以立即發現的邏輯缺陷有哪些?

答:應用程序很可能單獨執行這兩個檢查,根據一個用戶名確認密碼,根據另一個用戶名確認令牌值,然後爲其中一個已確認的用戶名創建通過驗證的會話。

如果擁有自己的物理令牌的應用程序用戶沒法獲得了其他用戶的密碼,他們就可以作爲該用戶登錄。相反,取決於該機制的運行方式,能夠讀取其他用戶的令牌值的用戶或許可以作爲該用戶登錄,而無需瞭解後者的密碼。該解決方案的總體安全狀態將因此被明顯削弱。

 

5、在通過提交專門設計的輸入探查一個應用程序中是否存在常見的漏洞時,應用程序頻繁返回包含調試信息的詳細錯誤消息。有時,這些消息與其他用戶造成的錯誤有關。發生這種情況後,就無法令其再次發生。這表示應用程序存在什麼邏輯缺陷,接下來該如何處理?

這種行爲表示錯誤消息功能不是線程安全的,將返回由任何用戶生成的上一個錯誤的詳細信息。應同時使用兩個不同的會話進行深入探查,以確認是否確實出現了這種情況。如果確實如此,應使用一段腳本不斷觸發一條詳細的錯誤消息,並記錄其內容中的任何差異,以獲取與其他應用程序用戶有關的有用信息。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章