遠程過程調用(英語:Remote Procedure Call,縮寫為 RPC)是一個計算機通信協(xié)議。該協(xié)議允許運行于一臺計算機的程序調用另一臺計算機的子程序,而程序員無需額外地為這個交互作用編程。如果涉及的軟件采用面向對象編程,那么遠程過程調用亦可稱作遠程調用或遠程方法調用,例:Java RMI。
RPC 一般直接使用 TCP 協(xié)議進行通信,通常不涉及到 HTTP。HTTP 下面有2種技術:
XML-RPC(https://zh.wikipedia.org/wiki/XML-RPC)
JSON-RPC(https://zh.wikipedia.org/wiki/JSON-RPC)
Web service 和 RESTful API 都可算作遠程過程調用的子集。
Web Service 是一種服務導向架構的技術,通過標準的Web協(xié)議提供服務,目的是保證不同平臺的應用服務可以互操作。
根據(jù) W3C 的定義,Web 服務(Web service)應當是一個軟件系統(tǒng),用以支持網(wǎng)絡間不同機器的互動操作。網(wǎng)絡服務通常是許多應用程序接口(API)所組成的,它們透過網(wǎng)絡,例如國際互聯(lián)網(wǎng)(Internet)的遠程服務器端,執(zhí)行客戶所提交服務的請求。
盡管W3C的定義涵蓋諸多相異且無法介分的系統(tǒng),不過通常我們指有關于主從式架構(Client-server)之間根據(jù) SOAP 協(xié)議進行傳遞 XML 格式消息。無論定義還是實現(xiàn),Web 服務過程中會由服務器提供一個機器可讀的描述(通?;赪SDL)以辨識服務器所提供的 Web 服務。另外,雖然 WSDL 不是 SOAP 服務端點的必要條件,但目前基于Java 的主流 Web 服務開發(fā)框架往往需要 WSDL 實現(xiàn)客戶端的源代碼生成。一些工業(yè)標準化組織,比如 WS-I,就在 Web 服務定義中強制包含 SOAP 和 WSDL。
Web Service 是一種比較“重”和“老”的 Web 接口技術,目前大部分應用于金融機構的歷史應用和比較老的應用中。
REST,全稱是 Resource Representational State Transfer,通俗來講就是,資源在網(wǎng)絡中以某種表現(xiàn)形式進行狀態(tài)轉移。分解開來:
Resource:資源,即數(shù)據(jù)(前面說過網(wǎng)絡的核心)。比如 newsfeed,friends等;
Representational:某種表現(xiàn)形式,比如用JSON,XML,JPEG等;
State Transfer:狀態(tài)變化。通過HTTP動詞實現(xiàn)。
RESTful API 就是符合 REST 風格的 API,傳遞數(shù)據(jù)也是2種形式:
XML,少見
json,常見,現(xiàn)在 Web 應用基本使用這種形式的 API。
Web 應用程序和 APP 應用程序的 API 跟目前的流行框架和模式相關,主要有3種模式:MVC、MVP、MVVM。
MVC 將整個應用分成 Model、View 和 Controller 三個部分,而這些組成部分其實也有著幾乎相同的職責。
視圖:管理作為位圖展示到屏幕上的圖形和文字輸出;
控制器:翻譯用戶的輸入并依照用戶的輸入操作模型和視圖;
模型:管理應用的行為和數(shù)據(jù),響應數(shù)據(jù)請求(經(jīng)常來自視圖)和更新狀態(tài)的指令(經(jīng)常來自控制器);
此類模式和架構的應用越來越多導致 API 接口的應用也越來越流行。想了解更多可以在網(wǎng)上查找相關資料。
Google hacking
inurl:jws?wsdl
inurl:asmx?wsdl
inurl:aspx?wsdl
inurl:ascx?wsdl
inurl:ashx?wsdl
inurl:dll?wsdl
inurl:exe?wsdl
inurl:php?wsdl
inurl:pl?wsdl
inurl:?wsdl
filetype:jws
filetype:asmx
filetype:ascx
filetype:aspx
filetype:ashx
filetype:dll
filetype:exe
filetype:php
filetype:pl
filetype:wsdl wsdl
fuzzing
爬蟲
涉及主要工具:
Soap UI PRO,滲透測試流程的發(fā)起,通信報文的解析、集合payload之后通信報文的重新組裝等,14天試用,可以做自動化測試。
SoapUI Free,手工測試
SOAPSonar,SOAP UI 的替代。
Burp Suite,代理攔截,跟蹤通信過程和結果,對通信進行重放和二次處理等。
WSSAT
WS-Attacker
### 2.1.3 測試項目
Fuzzing
XSS /SQLi/ Malformed XML
File Upload
Xpath Injection
XML Bomb (DoS)
Authentication based attacks
Replay attacks
Session fixation
XML Signature wrapping
Session timeout
Host Cipher Support/ Valid Certificate/ Protocol Support
Hashing Algorithm Support
主要使用 Soap UI Open Source,有安全測試Case,需要配置 SOAP 代理到 Burp,數(shù)據(jù)流,現(xiàn)在的版本是5.4.0。
代理配置
可以用 Burp 重放 SOAP 的探測 Payload。
使用 Soap UI Open Source,測試步驟:
創(chuàng)建工作空間
新建 SOAP 項目
增加 WSDL,配置名稱和 WSDL 鏈接
選擇要測試的 TestSuite
,增加一個安全測試
選擇測試的類型,運行測試
SOAP 配置,2步,“File”-“Preference”-“Proxy”,設置 Burp 代理
直接在 Soup UI 主菜單上選擇運行一個測試。
在彈出窗口中輸入 WSDL 地址。
SUAP UI 會自動探測接口。然后在項目-測試Case的右鍵菜單中選擇安全測試
運行安全測試。
Burp 代理會捕獲所有的測試請求
其他工具介紹
WSSAT,選擇加載存在 WSDL 列表的文件,運行。
WS-Attacker
AWVS 的掃描也能直接測試 Web Service
常見的瀏覽器插件
Chrome Restlet Client
- Firefox RESTClient
客戶端工具
Postman
- Swagger
通常使用 Postman 的情況多些,有機會的話問下開發(fā)如何配置測試環(huán)境,直接配置一套一樣的。
Postman 的代理配置:
還是主要以 Restful API 說明。
本質上可以說是不安全的直接對象引用,可以通過修改可猜測的參數(shù)獲取不同參數(shù)下的響應結果。參數(shù)可以是用戶名、用戶 ID,連續(xù)的數(shù)字,變形的連續(xù)數(shù)字(各種編碼或哈希),通過直接修改參數(shù)值完成越權的操作。
示例:
https://wooyun.shuimugan.com/bug/view?bug_no=189225
https://wooyun.shuimugan.com/bug/view?bug_no=150462
https://wooyun.shuimugan.com/bug/view?bug_no=140374
https://wooyun.shuimugan.com/bug/view?bug_no=106709
XXE,Restful API 的注入漏洞,XSS,溢出,特殊字符的處理。
示例:
https://wooyun.shuimugan.com/bug/view?bug_no=211103
https://wooyun.shuimugan.com/bug/view?bug_no=132270
https://wooyun.shuimugan.com/bug/view?bug_no=8714
沒有請求頻率限制導致的各種爆破和遍歷,如短信驗證碼爆破、登錄爆破、手機號遍歷、身份證遍歷等。
示例:
https://wooyun.shuimugan.com/bug/view?bug_no=141419
https://wooyun.shuimugan.com/bug/view?bug_no=66571
https://wooyun.shuimugan.com/bug/view?bug_no=36058
https://wooyun.shuimugan.com/bug/view?bug_no=147334
包括越權導致的信息泄露、畸形請求導致的報錯響應。
示例:
https://wooyun.shuimugan.com/bug/view?bug_no=171313
https://wooyun.shuimugan.com/bug/view?bug_no=160095
https://wooyun.shuimugan.com/bug/view?bug_no=127457
關于響應頭:
發(fā)送 X-Content-Type-Options: nosniff
頭。
發(fā)送 X-Frame-Options: deny
頭。
發(fā)送 Content-Security-Policy: default-src 'none'
頭。
刪除指紋頭 - X-Powered-By
, Server
, X-AspNet-Version
等等。
在響應中強制使用 content-type
。
如服務端版本信息泄露,或服務端程序本身存在漏洞等。
根據(jù)上面講的測試方法,一般需要做好:
認證和授權控制
用戶輸入控制
接口請求頻率的限制
輸出控制
添加安全響應頭參數(shù)
參考 API-Security-Checklist 和歷史上的滲透測試結果設計適合自己組織的 API 安全開發(fā)規(guī)范。
Web Service 的滲透測試參考:
https://blog.csdn.net/cq1982/article/details/44728489
https://t0data.gitbooks.io/burpsuite/content/chapter17.html
https://www.owasp.org/index.php/Web_Service_Security_Testing_Cheat_Sheet
https://www.soapui.org/security-testing/getting-started.html
http://blog.securelayer7.net/web-services-api-penetration-testing-part-2/
https://www.soapui.org/security-testing/getting-started.html
https://www.anquanke.com/post/id/85910
Restful API 的參考:
https://github.com/shieldfy/API-Security-Checklist
https://www.owasp.org/index.php/REST_Security_Cheat_Sheet
(內容來源:先知社區(qū) 白河愁)