天天看點

31類API安全測試的小技巧

31類API安全測試的小技巧

随着RESTful API、GraphQL API等API技術的發展,掌握API安全技術是滲透測試工程師的一項基本技能,在滲透測試過程中會用到各種API安全工具和技巧,其中API安全小貼士是入門學習的首選推薦,這裡将它的中文版轉發過來。

//////////

1. API版本漏洞,比如存在api/v3/login則檢測api/v1/login,低版本API可能存在更多漏洞。

2. API多端/多接入點漏洞,比如認證接口,可能存在移動端、PC端、web端不同的認證接口或者不同的認證入口,/api/mobile/login 、 /api/v3/login 、 /api/magic_link等。

3. BOLA(失效的對象級授權和通路控制),BOLA像十年前的SQL注入一樣,在API安全中廣泛存在,作者通過一個附件材料,詳細地介紹了BOLA問題的根源、如何發現和檢測、如何防範和規避,并針對不同的角色(技術經理、開發人員、滲透人員)給出了建議。

4. 指令行注入,

以https://apidock.com/ruby/Kernel/open為例,開發人員使用了這個接口可能會導緻指令行的存在。

5. API接口也會存在SSRF,可以利用此漏洞可以探測内網IP位址、端口、下載下傳大檔案導緻Dos、顯示内網控制台等。

6. 批量配置設定問題,現代開發架構鼓勵開發人員在不了解安全含義的情況下使用批量配置設定方式的資料結構,往往僅僅通過修複http請求方法即可擷取額外的資訊,比如同一個接口由PUT請求調用修改為GET請求。 

7. 同一功能多個接口問題,當一家公司對外提供API接口給開發者時,同樣的功能下,API接口與移動端、PC端接口實作方式一定要單獨測試驗證,不要假定跟移動端、PC端具備同樣的安全機制。

8. 多協定問題,當滲透測試時,如果是REST API,試着僅僅将content-type修改為 "application/xml",添加一段xml後送出請求,驗證其是否支援SOAP協定,進而發現是否存在安全漏洞。

9. HTTP header标志符安全問題,當滲透測試REST API,HTTP header中的标志符往往比url中的标志符更容易發現安全問題。

10. 破壞功能級的授權和通路控制,來發現管理類API接入點,比如正常的請求是GET /api/v1/users/<id> 将其修改為 DELETE / POST 去嘗試删除或建立使用者。

11. 使用header認證,如果驗證機制不支援cookie方式,則需要通過防護設計來保護API免受CSRF攻擊。 

12. 測試數值枚舉,即使ID值為GUID生成的,也可以使用數值類型的來測試,比如使用 /?user_id=111來代替 [email protected]的值,有時候授權機制同時支援數值型和字元串型兩種方式。

13. 批量配置設定問題導緻授權繞過,比如POST /api/reset_pass 接口調用時需要驗證舊密碼,而PUT /api/update_user 接口調用可能就不需要舊密碼。

14. 嘗試擴充攻擊面,比如通過http://Virustotal.com或 http://Censys.io可能發現同一API的不同的配置或不同的版本,以幫助你發現問題。

15. 靜态資源授權問題,很多時候,應用程式本身授權通路控制在開發方面可能做得很好,但對靜态資源的保護,比如說視訊、圖檔、檔案,在通路控制做得不夠,存在未授權通路問題。

16. 滲透測試工具選擇Burp Suite,即使免費版也提供樹狀視圖,幫助你管理和發現所有你可以通路的API接口。 

17. Mobile Certificate Pinning,當你測試Android或iOS APP時,在逆向工程或打更新檔之前,看看老的版本是否存在Mobile Certificate Pinning不可用的問題。

18. 多關注很少人使用的功能,企業和開發者更多的關注那些使用量高的API,對于使用頻率低的API,往往存在有趣的漏洞。

19. 以下這些功能可能存在更多的漏洞,比如組織機構内的使用者管理、 CSV/HTML/PDF檔案導出、客戶視圖、子賬号的管理建立、對象共享(比如圖檔、文檔等)。 

20. 限流測試,尤其是在測試環境中,開發人員往往丢失限流機制,導緻被暴力破解。

21. 使用 http://archive.com擴充攻擊面,在http://archive.com上尋找老版本的應用,掃描js檔案來發現url位址,擴大攻擊點。

22. 個人資訊洩露,一般來說,安全設計預設是保護個人資訊隐私的,但通常後端工程師将json資料全部傳回給前端工程師,由前端工程師做好資料過濾後展現。滲透時可以找到API調用入口,擷取所有的資訊,比如/download_receipt,/export_receipt等。

23. 下載下傳應用APP或者應用源碼,通過逆向工程(比如DLL檔案: 使用IL-spy; Java反編譯使用Luyten)來發現更多的問題。

24. 滲透測試環境下認證, 授權, 限流、輸入驗證的安全機制,在測試環境中,研發人員往往禁用這些安全機制,滲透人員可以利用此來擴大攻擊面。

25. 攻擊導出PDF功能,導出功能往往使用擴充類庫來處理導出功能,比如轉換html為PDF,可以試試html注入。

26. 常用授權繞過技巧,在某些場景下,授權機制依賴于某個ID值,如果将ID值篡改為對象,比如數組對象、JSON對象,則發生授權繞過。

類似的攻擊手法有:

數組繞過:{“id”:111} --> {“id”:[111]}JSON 

對象繞過:{“id”:111} --> {“id”:{“id”:111}}

兩次傳值繞過:/api?id=非法參數值&id=惡意參數值

正則比對繞過:{"user_id":"*"}

27. 當後端服務存在XSS保護時,以JSON代替試試。某些場景下,後端服務對html中存在xss具備保護機制,一旦觸發則無應答或異常響應,試試以JSON格式的響應。

28. .NET應用測試技巧:有時候,開發者使用path_1,path_2兩個參數來構造絕對路徑,可能存在如果path_2為絕對路徑時,則path_1則被忽略。

29.  善于利用API公開資料,大多數API接口都會有接口說明文檔,并配備使用的源碼樣例程式,滲透測試人員要善于利用這些資料,分析使用者、角色、資源之間的關系,進而發現更多的漏洞。

30.  滲透測試進入僵持階段怎麼辦?擴大攻擊面。如果有移動端應用,可以從應用市場下載下傳曆史版本,尋找安全機制缺失的API調用接口,比如授權、參數過濾、速率限制、影子API等。

31. 關注速率限制類型的安全漏洞,尤其是帶有limit / page之類的參數,比如/api/news?limit=100,/api/news/pageNo/10/pageSize/50之類的接口,通過修改參數值測試是否存在Http Dos漏洞。

-End-

作者簡介

繼續閱讀