註冊模組上線前安全測試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原創獎勵計劃,未經許可禁止轉載