註冊模塊上線前安全測試checklist

  • 2020 年 2 月 24 日
  • 筆記

許多應用系統都有註冊模塊,正常用戶通過註冊功能,獲得應用系統使用權限;而非法用戶通過註冊模塊,則是為了達到不可告人的目的,非法用戶可以通過註冊模塊與服務端進行交互(一切用戶輸入都不可信),因此系統上線前,有必要對註冊模塊進行重點測試。

一、註冊模塊是否面向大眾

根據系統業務需求,分析註冊模塊面向群體;如果是面向大眾,則註冊模塊應該放在顯而易見的地方;比如freebuf的註冊功能

重點要強調一下面向內部的註冊功能,此時註冊模塊應該是儘可能的隱藏起來。對內部註冊模塊隱藏的是否完美,上線前就必須進行測試。紅軍視角(黑盒測試):通過目錄掃描、審查源代碼、爬取js文件,發現隱藏的用戶註冊接口,比如未刪除的注釋,還可藉助社工思維,比如登錄地址為www.xxx.com/userLogin,可猜測註冊地址為www.xxx.com/userRegist;藍軍視角(白盒測試):直接找開發人員要註冊模塊地址,檢視改地址是否易猜解。

如下截圖,就是通過查看源代碼,發現系統存在內部使用的註冊模塊,已被注釋,通過檢查js文件,發現註冊接口地址,以及部分參數。

二、是否需要驗真。

驗真:驗證用戶真實性。

檢查系統是否需要通過手機、或者郵箱進行驗真。驗真方式不限,有些是通過短訊或者郵箱驗證碼,有些是直接將下一步的註冊地址發送到郵箱。為什麼要求驗真呢,這可有效防止惡意註冊、杜絕殭屍賬號,特別是羊毛黨,平時養一批殭屍賬號,有活動時則啟用(雖然現在的羊毛黨也有錢,捨得買手機號,但多多少少增加了他們的成本)。

發送短訊驗證碼時,可通過攔截響應包,查看服務端是否有把驗證碼直接返回給客戶端,如果直接返回給客戶端,則可以冒用他人的身份,進行註冊,繞過驗真。

如果系統有人臉識別功能,則需測試人臉識別的健壯性(是否能被繞過),藍軍視角:直接通過工具製作動態圖片或者小視頻,取到的繞過方法,可以參考:在AE中製作人臉識別動畫簡要步驟和瘋狂的身fenzheng:一張身fenzheng如何攻破人臉識別技術(shenfenzheng會被河蟹)。

檢查驗真是否是在前端進行。如果是在前端,嘗試將返回包中代表驗真結果的參數值,類似code=-1改為code=0或者1,status=false改為status=true。

如果系統提供稍後驗真功能,用戶可以稍後驗真直接進入系統,此時則需要檢查是否存在越權漏洞,防止因權限限制不嚴,導致越權獲取只有驗真後才具有的權限。

三、短訊或郵箱轟炸

因為有短訊或者郵箱驗證碼,因此會有短訊或郵箱轟炸的風險。這不僅會影響用戶,而且會消耗企業的短訊費用。測試時,通過抓包工具burpsuite,重放驗證碼發送請求包(以防只在前端進行時間間隔和次數校驗),測試驗證碼是否有發送時間間隔限制和數目限制。現在大家一般採用的時間間隔是60s,次數是5次。

四、是否校驗用戶名

大部分系統的註冊模塊對註冊賬號進行校驗,用來驗證用戶名是否已被使用,此時則可通過抓包工具,攔截註冊賬號校驗請求包,比如使用burpsuite的Intruder模塊,字典為常用用戶名,對用戶名進行遍歷,再對遍歷出來的用戶名進行弱口令爆破。

當未對註冊用戶名進行校驗時,則存在二次註冊風險,可嘗試用於密碼重置,甚至導致整個賬號被覆蓋。因此紅軍視角測試時,需要謹慎,藍軍則直接要來已存在的用戶進行快速驗證即可。

驗證用戶是否存在的select語句未作過濾時,則可能會存在SQL注入漏洞。

五、SQL和XSS測試

對註冊模塊進行sql和xss測試,紅軍視角:當用戶名長度未做限制時,可重點測試用戶名(昵稱、地址等也要進行測試),以前xss流行時,就對用戶名插入各種xss的pauload,進行盲打;而SQL注入,則可能存在insert注入風險,或者二次注入(一開始註冊時,insert有進行過濾,但是登錄賬號後,查看個人信息時,未對參數進行過濾,導致觸發sql注入攻擊,這個比較有難度);藍軍視角,則來的容易的多,直接代碼審計即可。

註冊時,當使用的insert語句未作過濾時,比如原始sql語句是(參考地址在SQL注入之insert注入)

insert into member(username,pw,sex,phonenum,email,address) values('wangwu',md5('a'),'a','aa','a','a')

此時則可以構造如下sql注入payload,獲取數據庫用戶名

insert into member(username,pw,sex,phonenum,email,address) values('wangwu'or updatexml(1,concat(0x7e,(users())),0) or'',md5('a'),'a','aa','a','a')

註冊時,當輸入框有長度限制,可以嘗試f12修改輸入框的長度,或者通過拼接技術,將xss的payload拆分到好幾個輸入框,從而驗證是否存在xss漏洞。

六、是否可以註冊成管理員

遇到過一個這樣的系統,從js文件中發現的接口請求參數只有用戶名和密碼

雖然能註冊成功,但是登陸進去,就一個修改密碼和查看個人信息的功能

測試時,想着能否發現越權,後面點擊個人信息時也是空白,但是響應包中有報錯信息,提示角色不存在

看到role_id這個參數,於是重新註冊,註冊請求包中,添加參數role_id,並將role_id設置為1(一般管理員角色id=1),重新註冊成功,從而獲得管理員權限。

七、文件上傳

部分系統註冊時,有文件上傳功能,比如頭像、營業執照;此時則需要對上傳功能進行任意文件上傳測試。

八、其他

當註冊請求包請求參數是xml格式,則要進行XXE測試;如果是json格式,不妨試試fastjson命令執行這類漏洞。

*本文原創作者:freebuf01 ,本文屬於FreeBuf原創獎勵計劃,未經許可禁止轉載