1 API 接口介紹1.1 RPC(遠(yuǎn)程過(guò)程調(diào)用)遠(yuǎn)程過(guò)程調(diào)用(英語(yǔ):Remote Procedure Call,縮寫(xiě)為 RPC)是一個(gè)計(jì)算機(jī)通信協(xié)議。該協(xié)議允許運(yùn)行于一臺(tái)計(jì)算機(jī)的程序調(diào)用另一臺(tái)計(jì)算機(jī)的子程序,而程序員無(wú)需額外地為這個(gè)交互作用編程。如果涉及的軟件采用面向?qū)ο缶幊?,那么遠(yuǎn)程過(guò)程調(diào)用亦可稱(chēng)作遠(yuǎn)程調(diào)用或遠(yuǎn)程方法調(diào)用,例:Java RMI。 RPC 一般直接使用 TCP 協(xié)議進(jìn)行通信,通常不涉及到 HTTP。HTTP 下面有2種技術(shù):
Web service 和 RESTful API 都可算作遠(yuǎn)程過(guò)程調(diào)用的子集。 1.2 Web ServiceWeb Service 是一種服務(wù)導(dǎo)向架構(gòu)的技術(shù),通過(guò)標(biāo)準(zhǔn)的Web協(xié)議提供服務(wù),目的是保證不同平臺(tái)的應(yīng)用服務(wù)可以互操作。 根據(jù) W3C 的定義,Web 服務(wù)(Web service)應(yīng)當(dāng)是一個(gè)軟件系統(tǒng),用以支持網(wǎng)絡(luò)間不同機(jī)器的互動(dòng)操作。網(wǎng)絡(luò)服務(wù)通常是許多應(yīng)用程序接口(API)所組成的,它們透過(guò)網(wǎng)絡(luò),例如國(guó)際互聯(lián)網(wǎng)(Internet)的遠(yuǎn)程服務(wù)器端,執(zhí)行客戶(hù)所提交服務(wù)的請(qǐng)求。 盡管W3C的定義涵蓋諸多相異且無(wú)法介分的系統(tǒng),不過(guò)通常我們指有關(guān)于主從式架構(gòu)(Client-server)之間根據(jù) SOAP 協(xié)議進(jìn)行傳遞 XML 格式消息。無(wú)論定義還是實(shí)現(xiàn),Web 服務(wù)過(guò)程中會(huì)由服務(wù)器提供一個(gè)機(jī)器可讀的描述(通?;赪SDL)以辨識(shí)服務(wù)器所提供的 Web 服務(wù)。另外,雖然 WSDL 不是 SOAP 服務(wù)端點(diǎn)的必要條件,但目前基于Java 的主流 Web 服務(wù)開(kāi)發(fā)框架往往需要 WSDL 實(shí)現(xiàn)客戶(hù)端的源代碼生成。一些工業(yè)標(biāo)準(zhǔn)化組織,比如 WS-I,就在 Web 服務(wù)定義中強(qiáng)制包含 SOAP 和 WSDL。 Web Service 是一種比較“重”和“老”的 Web 接口技術(shù),目前大部分應(yīng)用于金融機(jī)構(gòu)的歷史應(yīng)用和比較老的應(yīng)用中。 1.3 RESTful APIREST,全稱(chēng)是 Resource Representational State Transfer,通俗來(lái)講就是,資源在網(wǎng)絡(luò)中以某種表現(xiàn)形式進(jìn)行狀態(tài)轉(zhuǎn)移。分解開(kāi)來(lái):
RESTful API 就是符合 REST 風(fēng)格的 API,傳遞數(shù)據(jù)也是2種形式:
1.4 MVC、MVP、MVVMWeb 應(yīng)用程序和 APP 應(yīng)用程序的 API 跟目前的流行框架和模式相關(guān),主要有3種模式:MVC、MVP、MVVM。 MVC 將整個(gè)應(yīng)用分成 Model、View 和 Controller 三個(gè)部分,而這些組成部分其實(shí)也有著幾乎相同的職責(zé)。
此類(lèi)模式和架構(gòu)的應(yīng)用越來(lái)越多導(dǎo)致 API 接口的應(yīng)用也越來(lái)越流行。想了解更多可以在網(wǎng)上查找相關(guān)資料。 2 API 測(cè)試環(huán)境和測(cè)試工具2.1 Web Service 測(cè)試2.1.1 找 Webservice 接口
2.1.2 測(cè)試工具涉及主要工具:
### 2.1.3 測(cè)試項(xiàng)目
2.1.4 手工測(cè)試方法主要使用 Soap UI Open Source,有安全測(cè)試Case,需要配置 SOAP 代理到 Burp,數(shù)據(jù)流,現(xiàn)在的版本是5.4.0。 代理配置 可以用 Burp 重放 SOAP 的探測(cè) Payload。
2.1.5 自動(dòng)化測(cè)試SOAP 配置,2步,“File”-“Preference”-“Proxy”,設(shè)置 Burp 代理 直接在 Soup UI 主菜單上選擇運(yùn)行一個(gè)測(cè)試。 在彈出窗口中輸入 WSDL 地址。 SUAP UI 會(huì)自動(dòng)探測(cè)接口。然后在項(xiàng)目-測(cè)試Case的右鍵菜單中選擇安全測(cè)試 運(yùn)行安全測(cè)試。 Burp 代理會(huì)捕獲所有的測(cè)試請(qǐng)求 其他工具介紹 WS-Attacker AWVS 的掃描也能直接測(cè)試 Web Service 2.2 RESTful API 測(cè)試2.2.1 測(cè)試工具
- Firefox RESTClient
通常使用 Postman 的情況多些,有機(jī)會(huì)的話問(wèn)下開(kāi)發(fā)如何配置測(cè)試環(huán)境,直接配置一套一樣的。 3 常見(jiàn) API 相關(guān)漏洞和測(cè)試方法還是主要以 Restful API 說(shuō)明。 3.1 邏輯越權(quán)類(lèi)本質(zhì)上可以說(shuō)是不安全的直接對(duì)象引用,可以通過(guò)修改可猜測(cè)的參數(shù)獲取不同參數(shù)下的響應(yīng)結(jié)果。參數(shù)可以是用戶(hù)名、用戶(hù) ID,連續(xù)的數(shù)字,變形的連續(xù)數(shù)字(各種編碼或哈希),通過(guò)直接修改參數(shù)值完成越權(quán)的操作。 示例:
3.2 輸入控制類(lèi)XXE,Restful API 的注入漏洞,XSS,溢出,特殊字符的處理。 示例:
3.3 接口濫用沒(méi)有請(qǐng)求頻率限制導(dǎo)致的各種爆破和遍歷,如短信驗(yàn)證碼爆破、登錄爆破、手機(jī)號(hào)遍歷、身份證遍歷等。 示例:
3.4 信息泄露包括越權(quán)導(dǎo)致的信息泄露、畸形請(qǐng)求導(dǎo)致的報(bào)錯(cuò)響應(yīng)。 示例:
3.5 HTTP 響應(yīng)頭控制關(guān)于響應(yīng)頭:
3.6 服務(wù)端配置漏洞如服務(wù)端版本信息泄露,或服務(wù)端程序本身存在漏洞等。 4 API 安全加固根據(jù)上面講的測(cè)試方法,一般需要做好:
參考 API-Security-Checklist 和歷史上的滲透測(cè)試結(jié)果設(shè)計(jì)適合自己組織的 API 安全開(kāi)發(fā)規(guī)范。 參考Web Service 的滲透測(cè)試參考:
Restful API 的參考:
(內(nèi)容來(lái)源:先知社區(qū) 白河愁) |
|