?
?
了解接口常見漏洞,將幫助你在測試接口獲取更多的思路。
?
信息披露
?
信息可能會在 API 響應或公共來源(如代碼存儲庫、搜索結果、新聞、社交媒體、目標網站和公共 API 目錄)中披露。
敏感數據可以包含攻擊者可以利用的任何信息。
例如,使用WordPress API的網站可能會在不知不覺中與導航到API路徑的任何人共享用戶信息。/wp-json/wp/v2/users
GET?https://www.sitename.org/wp-json/wp/v2/users [{"id":1,"name":"Administrator",?"slug":"admin"}], {"id":2,"name":"Vincent?Valentine",?"slug":"Vincent"}]
然后,可以使用這些 slug 嘗試以公開用戶的身份登錄,并進行暴力破解、憑據填充或密碼噴射攻擊。
錯誤消息可幫助 API 使用者排查其與 API 的交互問題,并允許 API 提供者了解其應用程序的問題。但是,它也可以揭示有關資源、用戶和 API 底層體系結構(例如 Web 服務器或數據庫的版本)的敏感信息。
通常,您可以通過與 API 終端節點交互并分析響應來收集最多信息。API 響應可以顯示標頭、參數和詳細錯誤中的信息。其他良好的信息來源是在偵察期間收集的 API 文檔和資源。
?
斷開的對象級別授權
?
當 API 提供者允許 API 使用者訪問他們無權訪問的資源時,就會發生 BOLA 漏洞。
例如,假設我們被授權僅訪問用戶Cloud Strife。我們會向 https://bestgame.com/api/v3/users?id=5501 發送初始 GET 請求
{ ?"id":?"5501", ?"first_name":?"Cloud", ?"last_name":?"Strife", ?"link":?"https://www.bestgame.com/user/strife.buster.97", ?"name":?"Cloud?Strife", ?"dob":?"1997-01-31", ?"username":?"strife.buster.97" }
在這種情況下,我們可能會使用另一個接近 Cloud ID 5501 的標識號來檢查這些問題。假設我們能夠獲取有關其他用戶的信息。
通常,您可以通過了解 API 的資源結構并嘗試訪問不應訪問的資源來測試 BOLA。通過檢測 API 路徑和參數中的模式,您應該能夠預測其他潛在資源。
BOLA 可能是一個低懸的 API 漏洞,您可以使用模式識別輕松發現它,然后通過幾個請求來刺激它。其他時候,由于對象 ID 的復雜性以及用于獲取其他用戶資源的請求,發現起來可能非常復雜。
?
用戶身份驗證中斷
?
用戶身份驗證中斷是指 API 身份驗證過程中的任何弱點。當 API 提供程序未實現身份驗證保護機制或未正確實現機制時,通常會發生這些漏洞。
正如我們從第2章討論的REST API的六個約束中知道的那樣,RESTful API應該是無狀態的。為了成為無狀態的,提供者不需要記住從一個請求到另一個請求的使用者。要使此約束起作用,API 通常需要用戶經歷注冊過程才能獲得唯一的令牌。然后,用戶可以在請求中包含令牌,以證明他們有權發出此類請求
例如,為了確定代幣生成過程是否較弱,我們可以收集代幣樣本并分析它們的相似性。如果令牌生成過程不依賴于高級別 隨機性或熵,我們有可能創建自己的令牌或劫持別人的令牌。
令牌處理可以是令牌的存儲、通過網絡傳輸令牌的方法、硬編碼令牌的存在等。我們也許能夠在 JavaScript 源文件中檢測硬編碼令牌,或者在分析 Web 應用程序時捕獲它們。捕獲令牌后,我們可以使用它來訪問以前隱藏的終結點或繞過檢測。如果 API 提供者將身份歸因于令牌,我們將通過劫持被盜令牌來承擔身份。
其他可能具有自己的一組漏洞的身份驗證過程包括注冊系統的各個方面,例如密碼重置和多重身份驗證功能。例如,假設密碼重置功能要求您提供電子郵件地址和六位數代碼來重置密碼。好吧,如果API允許您發出任意數量的請求,則只需發出一百萬個請求即可猜測代碼并重置任何用戶的密碼。一個四位數的代碼只需要 10,000 個請求。
由于 REST API 的無狀態性質,公開的 API 密鑰等效于發現用戶名和密碼。通過使用公開的 API 密鑰,你將代入與該密鑰關聯的角色。
?
過度的數據泄露
過度數據泄露是指 API 端點響應的信息多于滿足請求所需的信息。
當存在此漏洞時,可能相當于向某人詢問其姓名,并讓他們使用其姓名,出生日期,電子郵件地址,電話號碼以及他們認識的每個人的身份進行響應。
假設我請求了自己的帳戶信息,并提出了以下請求:
GET?/api/v3/account?name=Cloud+Strife #?respone? { ?"id":?"5501", ?"first_name":?"Cloud", ?"last_name":?"Strife", ?"privilege":?"user", ?"representative":?[ ?"name":?"Don?Corneo", ?"id":?"2203" ?"email":?"dcorn@gmail.com", ?"privilege":?"super-admin" ?"admin":?true ?"two_factor_auth":?false, ?}
要檢測過多的數據泄露,您需要做的就是測試目標 API 端點并查看響應中發送的信息
?
缺乏資源和速率限制
?
速率限制在 API 的貨幣化和可用性中起著重要作用。如果不限制使用者可以發出的請求數量,API 提供商的基礎設施可能會被請求淹沒。沒有足夠資源的請求過多將導致提供商的系統崩潰并變得不可用 - 例如,拒絕服務(DoS)狀態RapidAPI允許每月免費500個請求,但付費客戶每月允許1,000個請求。
一旦您被限制提出其他請求,就該嘗試查看如何實施速率限制了。您可以通過添加或刪除參數、使用其他客戶端或更改 IP 地址來繞過它嗎?
?
中斷的功能級別授權
?
中斷的功能級別授權 (BFLA) 是一個角色或組的用戶能夠訪問另一個角色或組的 API 功能的漏洞。
BFLA 與 BOLA 類似,不同之處在于不是涉及訪問資源的授權問題,而是執行操作的授權問題。
當 API 中存在 BOLA 漏洞時,您可能能夠訪問該信息 其他帳戶,例如付款歷史記錄、用戶名、電子郵件地址和帳號 如果存在 BFLA 漏洞,您可能能夠轉賬并實際更新帳戶信息。相反,該功能可以基于 HTTP 請求方法,例如 、、 和 。如果提供程序不限制使用者可以使用的 HTTP 方法,則只需使用其他方法進行 a 即可指示 BFLA 漏洞。
GET POST PUT DELETE unauthorized request
發現 BFLA 的最簡單方法是查找管理 API 文檔,并以測試管理功能和能力的非特權用戶身份發送請求。如果特權操作的 API 文檔不可用,則需要在測試用于執行特權操作的終結點之前發現或對其進行反向工程。
?
質量分配
?
當 API 使用者在其請求中包含比應用程序預期更多的參數,并且應用程序將這些參數添加到代碼變量或內部對象時,就會發生批量分配。“我覺得這看起來像參數污染”
例如,應用程序可能具有帳戶更新功能,用戶應僅使用該功能來更新其用戶名、密碼和地址。如果使用者可以在與其帳戶相關的請求中包含其他參數(如帳戶權限級別或敏感信息(如帳戶余額),并且應用程序接受這些參數而不根據允許操作的白名單檢查它們,則使用者可以利用此弱點來更改這些值。
//?Imagine?an?API?is?called?to?create?an?account?with?parameters?for? "User"?and?"Password": { "User":?"scuttleph1sh", "Password":?"GreatPassword123" } //While?reading?the?API?documentation?regarding?the?account?creation? //process,?suppose?you?discover?that?there?is?an?additional?key,?"isAdmin",?that? //consumers?can?use?to?become?administrators.?You?could?use?a?tool?like? //Postman?or?Burp?Suite?to?add?the?attribute?to?a?request?and?set?the?value? //to?true: { "User":?"scuttleph1sh", "Password":?"GreatPassword123", "isAdmin":?true }
您可以通過在 API 文檔中查找感興趣的參數,然后將這些參數添加到請求中來發現批量分配漏洞。查找用戶帳戶屬性、關鍵功能和管理操作中涉及的參數。攔截 API 請求和響應也可以揭示值得測試的參數。此外,您可以在 API 請求中猜測參數或模糊參數。
?
安全配置錯誤
?
安全配置錯誤包括開發人員在 API 的支持安全配置中可能犯的所有錯誤。例如,如果 API 的支持安全配置揭示了未修補的漏洞,則攻擊者有可能利用已發布的漏洞輕松“pwn”API 及其系統。
安全配置錯誤實際上是一組弱點,包括配置錯誤的標頭、配置錯誤的傳輸加密、使用默認帳戶、接受不必要的 HTTP 方法、缺乏輸入清理和詳細的錯誤消息。
缺乏輸入清理可能允許攻擊者將惡意負載上傳到服務器。
例如,如果使用上傳端點將上傳的文件傳遞到 Web 目錄,則它可能允許上傳腳本。導航到文件所在的 URL 可以啟動腳本, 導致對 Web 服務器的直接外殼訪問。
API 提供程序使用標頭為使用者提供處理響應和安全要求的說明。配置錯誤的標頭可能導致敏感信息泄露、降級攻擊和跨站點腳本攻擊。
例如,采用以下響應:
HTTP/?200?OK --snip-- X-Powered-By:?VulnService?1.11?//?reveal?backend?tech?=>?search?exploits X-XSS-Protection:?0?//?could?be?changed?to?1 X-Response-Time:?566.43 //If?the?X-Response-Time?header?has?a?consistent?response?time?for?nonexistent?records,?for?example,?but?increases? //?its?response?time?for?certain?other?records,?this?could?be?an?indication?that?those?records?exist. HTTP/UserA?404?Not?Found --snip-- X-Response-Time:?25.5 HTTP/UserB?404?Not?Found --snip-- X-Response-Time:?25.5 HTTP/UserC?404?Not?Found --snip-- X-Response-Time:?510.00
在這種情況下,UserC 的響應時間值是其他資源的響應時間的 20 倍。由于樣本量如此之小,很難明確地斷定 UserC 存在。
例如,您知道像這樣的虛假帳戶的平均X響應時間為ms。您還知道,您現有的帳戶 /user/account/1021 收到的 X 響應時間為 。如果您隨后發送了請求,強制所有帳號從 到 ,您可以查看結果并查看哪些帳號導致響應時間大幅增加。/user/account/thisdefinitelydoesnotexist87625.5510.0010002000
任何向使用者提供敏感信息的 API 都應使用傳輸層安全性 (TLS) 來加密數據。即使 API 僅在內部、私有或合作伙伴級別提供,使用 TLS(加密 HTTPS 流量的協議)也是確保 API 請求和響應在通過網絡傳遞時受到保護的最基本方法之一。配置錯誤或缺少傳輸加密可能會導致 API 用戶以明文形式跨網絡傳遞敏感的 API 信息。然后攻擊者可以使用MITM攻擊來利用它。
當服務使用默認帳戶和憑據并且默認值已知時,攻擊者可以使用這些憑據代入該帳戶的角色。這可能允許他們訪問敏感信息或管理功能,可能導致 支持系統。
最后,如果 API 提供程序允許不必要的 HTTP 方法,則應用程序無法正確處理這些方法或導致敏感信息泄露的風險會增加。
您可以使用 Web 應用程序漏洞掃描程序(如 Nessus、Qualys、OWASP ZAP 和 Nikto)檢測其中的幾個安全錯誤配置。這些掃描程序將自動檢查 Web 服務器版本信息、標頭、cookie、傳輸加密配置和參數,以查看是否缺少預期的安全措施。如果您知道要查找的內容,也可以通過檢查標頭、SSL 證書、cookie 和參數來手動檢查這些安全配置錯誤。
?
注入
?
當請求傳遞到 API 的支持基礎結構并且 API 提供程序不篩選輸入以刪除不需要的字符(此過程稱為輸入清理)時,存在注入缺陷。詳細的錯誤消息、HTTP 響應代碼和意外的 API 行為都可能是您可能發現了注入缺陷的線索。
API 可能會將該有效負載直接傳遞到后端 SQL 數據庫,其中 OR 1=0 語句將失敗(因為 1 不等于 0),從而導致一些 SQL 錯誤:
POST?/api/v1/register?HTTP?1.1 Host:?example.com --snip-- { "Fname":?"hAPI", "Lname":?"Hacker", "Address":?"'?OR?1=0--", }
注入漏洞通常輔以其他漏洞,例如輸入清理不良。在以下示例中,您可以看到一種代碼注入攻擊,該攻擊使用 API GET 請求來利用弱查詢參數。在這種情況下,弱查詢參數將請求的查詢部分中的任何數據直接傳遞到底層系統,而不先對其進行清理:以下響應正文顯示 API 端點已縱為顯示主機的 /etc/passwd 文件,從而顯示系統上的用戶:
GET http://10.10.78.181:5000/api/v1/resources/books?show=/etc/passwd
root0root:/root:/bin/bash daemon1daemon:/usr/sbin:/usr/sbin/nologin bin2bin:/dev:/usr/sbin/nologin sync4sync:/bin:/bin/sync games5games:/usr/games:/usr/sbin/nologin man6man:/var/cache/man:/usr/sbin/nologin lp7lp:/var/spool/lpd:/usr/sbin/nologin mail8mail:/var/mail:/usr/sbin/nologin news9news:/var/spool/news:/usr/sbin/nologin
查找注入缺陷需要認真測試 API 端點,注意 API 的響應方式,然后精心制作嘗試操縱后端系統的請求。與目錄遍歷攻擊一樣,注入攻擊已經存在了幾十年,因此有許多標準的安全控制措施來保護 API 提供程序免受這些攻擊。
?
資產管理不當
?
當組織公開 API 時,會發生不正確的資產管理 已停用或仍在開發中。仍在開發的 API 通常不如生產 API 對應項安全。
資產管理不當會導致其他漏洞,例如數據過度暴露、信息泄露、批量分配、速率限制不當和 API 注入等。
您可以通過密切關注倉庫中過時的 API 文檔、更改日志和版本歷史記錄來發現不當的資產管理。
組織通常在其終結點名稱中包含版本控制信息,以區分較舊版本和較新版本,例如 等。仍在開發中的 API 通常使用諸如 .如果您知道 API 現在正在使用 apiv3.org/admin 但 API 文檔的一部分提到了 apiv1.org/admin,則可以嘗試測試不同的端點以查看 apiv1 或 apiv2 是否仍處于活動狀態。此外,組織的更新日志 可能會披露 v1 更新或停用的原因。如果您有權訪問 v1,則可以測試這些弱點/v1/, /v2/, /v3//alpha/, /beta/, /test/, /uat/, and /demo/
在使用文檔之外,您還可以通過使用猜測、模糊測試或暴力請求來發現不正確的資產管理漏洞。觀察 API 文檔或路徑命名方案中的模式,然后根據您的假設發出請求。
?
業務邏輯漏洞
?
業務邏輯漏洞(也稱為業務邏輯缺陷或 BLF)是攻擊者可以惡意使用的應用程序的預期功能。
例如,如果 API 具有不驗證編碼有效負載的上傳功能,則只要任何文件已編碼,用戶就可以上傳該文件。這將允許最終用戶上傳和執行任意代碼,包括惡意負載。在這些情況下,組織基本上依賴于 信任作為一種安全控制,期望消費者采取仁慈的行為。不幸的是,即使是善良的 API 使用者也會犯錯誤,從而導致應用程序受損。
您可以在 API 文檔中搜索業務邏輯漏洞的跡象。像下面的陳述應該照亮你頭頂的燈泡:
“僅使用功能 X 來執行功能 Y。” “不要對端點 Y 執行 X。” “只有管理員才能執行請求 X。”
當您攻擊他們的 API 時,請確保不服從此類請求以測試是否存在安全控制。
例如,請考慮用戶通常用來對其帳戶進行身份驗證的 Web 應用程序身份驗證門戶。假設 Web 應用程序發出了以下 API 請求:
POST?/api/v1/login?HTTP?1.1 Host:?example.com --snip-- UserId=hapihacker&password=arealpassword!&MFA=true
我們有可能通過簡單地將參數更改為 來繞過多因素身份驗證。MFAfalse
測試業務邏輯缺陷可能具有挑戰性,因為每個業務都是獨一無二的。自動掃描程序將很難檢測到這些問題,因為這些缺陷是API預期用途的一部分。您必須了解業務和 API 的運作方式,然后考慮如何利用這些功能來發揮自己的優勢。以對抗的心態研究應用程序的業務邏輯,并嘗試打破任何假設 被制造
?
總結
?
熟悉這些漏洞非常重要,這樣您就可以輕松識別它們,在參與滲透測試期間利用它們,并將其報告給組織,以防止犯罪分子將您的客戶拖入頭條新聞。現在您已經熟悉了 Web 應用程序、API 及其弱點。
編輯:黃飛
?
評論
查看更多