滲透測試業務邏輯之業務接口調用
0x00:前言
上周做滲透,有一個 sql 注入,負責安全審核的人給開發說你們的程序既然還有 sql 注入,我一年也看不見幾個。這句話讓我又再次深刻的認識到,滲透測試常規的一些注入跨站漏洞不如以前那么盛了,有點經驗的開發寫東西都會去考慮到了,再加上修復方法也在逐漸的完善,邏輯類的東西也應該并重的去測。
0x01:分類
我把邏輯類的問題大概總結了一下,大概可以分為十個模塊,分別是登錄認證模塊測試、業務辦理模塊測試、業務授權訪問模塊測試、輸入 / 輸出模塊測試、回退模塊測試、驗證碼機制測試、業務數據安全測試、業務流程亂序測試、密碼找回模塊測試、業務接口調用模塊測試。
這次記錄的是第十個也就是最后一個模塊業務接口調用模塊測試。
0x02:業務接口調用模塊
1,接口調用重放測試
測試方法:接口調用重放測試可以理解成重放測試,接口也就是數據請求,功能很多,例如發布文章,發布評論,下訂單,也可以理解成只要請求有新的數據生成,能重復請求并成功,都可以算請求重放,也就是接口重放測試。
修復方法:對生成訂單緩解可以使用驗證碼,防止生成數據的業務被惡意調用。或是每一個請求有唯一的一個 token,請求提交后,token 失效這樣。也可以參考微信的做法,在參數中添加 timestamp 和 nonce,并對其進行簽名加密。
2,接口調用遍歷測試
測試方法:例如有一個功能,是瀏覽商品的歷史記錄。把其用戶的瀏覽歷史記錄 url 發送到 intruder,遍歷其用戶的 id,看返回 response 信息中是否有正常返回的,且是其他用戶的,則證明存在接口遍歷問題。
修復方法:在 session 中存儲當前用戶的憑證或者 id,只有傳入憑證或者 id 參數值與 session 中的一致再返回數據內容。
3,接口調用參數篡改測試
測試方法:例如在一些短信驗證碼、郵件驗證碼等功能業務中,比如修改其他用戶密碼,發送后,再次點擊重新發送,攔截其請求,修改為自己的賬號,如果自己收到了驗證碼,則存在此問題。
修復方法:會話 session 中存儲重要的憑證,在忘記密碼、重新發送驗證碼等業務中,從 session 獲取用戶憑證而不是從客戶請求的參數中獲取。從客戶端處獲取手機號、郵箱等賬號信息,要與 session 中的憑證進行對比,驗證通過后才允許進行業務操作。
4,接口未授權訪問
測試方法:只要是登錄后才可以返回相關信息的接口,在未登錄狀態下也可以返回的,就是未授權訪問。在一般的網站測試中,可以 http history 中選擇網站的根目錄地址,然后右鍵 spider from here 進行爬去相關的 url,然后在 target 欄下的 site map 中利用 mime type 進行篩選,主要關注一下 json、script、xml 等這些類型,然后把 url 貼到瀏覽器中看是否能訪問來驗證。
經驗之談:或者在測試的時候,相關數據包發送到 repeater 后,刪除 cookie 進行 go,如果成功返回信息,則是存在此問題的。但把 url 貼到瀏覽器中時會跳到登錄頁,這時為了驗證可以使用 firefox 的 backfar 插件再試。
修復方法:利用 token 校驗的方式,在 url 中添加一個 token 參數,只有 token 驗證通過才返回接口數據且 token 使用一次后失效。在接口被調用時,后端對會話狀態進行驗證,如果已經登錄,便返回接口數據,如果未登錄,則返回自定義的錯誤信息。
5,callback 自定義測試
測試方法:因為同源策略,很多網站都會使用 JSONP,而 JSONP 一般會使用 callback 回掉函數,如果這個函數沒有做相關的措施,可以隨意傳入 js 代碼并執行則存在此問題。
可以使用 burp 的爬蟲功能,先爬去目標網站,然后篩選一下包含有 callback 關鍵詞的 url,看 response 返回的 mime 類型,如果是 text/html 的,則可以輸入 js 代碼確認下是否存在這個問題。
修復方法:首先可以定義下 content-type 為 json 格式,content=application/json。其次建立 callback 函數白名單,如果傳入的函數不是白名單內的,則組織并轉到異常頁。最后可以對 callback 參數進行 html 實體編碼來過濾掉一些特殊字符。
6,webservice 測試
這個測試我目前沒有具體的實操過,之前有一次是接口測試就是 webservice 的。回頭有測試用例的話,再單獨記錄一篇博客。
0x03:總結
業務邏輯模塊記錄,十個模塊都大概的總結完了,如果你是一個滲透人員,希望這些思路和方法可以幫到你,如果你覺得博客說的太大概,不詳細,那么建議先玩一下 burp,推薦看 burp 實戰指南,然后再回頭看博客,一定是通俗易懂的。因為確實不是深奧的什么東西,就是一些常規的簡單思路。