邏輯漏洞破解手機驗證碼重置用戶密碼
找回用戶密碼幾乎是每個網站都有的功能,漏洞點也非常多,功能開發起來容易,要做好安全的防御機制需要投入更多精力,比如小風教程網為了保護用戶的絕對安全,就干脆把找回密碼的功能去掉了,用戶想找回密碼只能通過客服反饋。
首先是最暴力的驗證碼暴力破解漏洞,很多公司系統提供的功能點,都是有忘記密碼的功能的,所以這一點就很方便我們做出測試。
驗證碼暴力破解
我們來看下圖的頁面,這是現在還有少數廠商存在的漏洞,4位驗證碼,但是一般的有的廠商會有4位驗證碼但是會做防護,但是下面的這個我今年新挖的就是沒有防護,可以被暴力破解,然后成功重置該用戶的密碼。
然后就成功破解出來了,下面還有一個現在大多數廠商的6位驗證碼,才是困擾我們的難題,但是6位驗證碼也是可以破解的。要破解6位驗證碼是一項大工程,所以我們就要確定兩點
1.它這個地方是否限制了訪問過快的暴力破解banip
2.它這個地方是否有錯誤太多就出現驗證碼的功能
3.最后就是它這個6位驗證碼的時效性了
我下面舉的例子就是它的驗證碼時效性較長有30分鍾
如圖其實暴力破解6位驗證碼如果時效性夠長的話就可以破解,因為畢竟如果成功就是能夠重置用戶的密碼,這種危害性還是較大的。廠商都比較重視。
如果它的驗證碼時效性較短比如,5分鍾,或3分鍾,這時候你就要確定一個界限,確定你的電腦在3或5分鍾最多能爆破驗證碼的個數,然后你確定這個界限,發送驗證碼不斷的嘗試,它的驗證碼總會有發到你這個界限里面的,然后你就能暴力破解了,也不要嫌棄麻煩,畢竟暴力破解,重點就是暴力嘛
構建回顯包繞過
回顯包也是,現在很多廠商也是拿這個包里的內容返回給頁面,靠這個信息來判斷這個驗證碼是否正確,來進行繞過的。如下我這是舉出一個我最近挖出的例子,它這個就構建的很簡單,頁面僅僅靠包里的0和1來判斷驗證碼是否正確。
當然還有很多形式 比如 true or false 之類的,總之遇到這樣的我們就要多去判斷一下 ,當然有一個前提條件,你得知道正確的驗證碼的回顯包,這樣你才能去修改欺騙web頁面。
如下圖都是一些廠商常用的靠返回包里面的內容來判斷驗證碼成功驗證碼成功的數據
當然修改完成我們還要走一步,就是重置新密碼。
因為只要最后一步成功的話,這個漏洞才能生效,筆者就踩過不少的坑,測試到重置密碼的界面就以為成功了,結果被人家駁回,再去試一次才知道,這個也就是自己騙自己了。。。所以大家在測試的時候一定要細心走到最后一步去看是否成功。測試切記莫心急
缺陷的驗證碼驗證
Emmm這處的功能,懷疑是開發的鍋了。這里的筆者也就看到一處,當時測試還沒注意隨便輸入忘記抓包,結果就成了,真是驚喜來的太突然。
如下圖,大家看見,我直接輸入驗證碼為111111,就直接顯示最后驗證碼重置成了,emm這個漏洞也是可遇不可求,當個懷念吧。真的就是自欺欺人啊。所以這也是告誡大家再測試,多想幾方面,萬一它的驗證碼是個幌子呢對把
驗證碼直接在返回包處可見
這一處漏洞也是迷幻程度不堪上下,所以說當我們測試的時候多看看返回包里的內容是有好處的,看下面包里面的內容,很多廠商都有手機登錄對吧,而且下面的這個廠商直接把驗證碼內容放在了返回包中,然后再由頁面去認證,這一部分被我觀察到了,就造成了可以登錄任意用戶的漏洞了。
1570,多么美好的數字呀。而且我們可以觀察到,它這個驗證碼還是4位,這意味着我們還可以通過爆破驗證碼來登錄任意用戶,只要它這處沒有做出限制就行。
還有一處驗證碼出現在返回包里的,但是這處比較奇怪因為它不是出現在本次發送驗證碼的返回包里,而且當你再次點擊發送驗證碼的按鈕的時候,你再次抓包就會發現,這次的包中出現了驗證碼,而且跟之前一次的你收到的驗證碼一樣。所以當我發現這一處的時候,我就想到了一下步驟
我先點擊一次發送驗證碼,收到驗證碼了,但此時我不知道
然后我開啟抓包再次點擊發送驗證碼的按鈕,然后丟棄此包,讓服務器端接受不到發送驗證碼的請求。這樣我就能成功找到了,我上一次驗證的正確驗證碼,然后輸入就能成功驗證重置密碼了。
當我們在測試的時候要對code這種命名的格外在意,萬一就能行對把,而且下面的還是用了加密處理,正好md5能成功解開。
最后一步可替換重置密碼用戶
這一處漏洞,其實也是開發最后一步放松了警惕,沒有去把驗證碼和重置密碼的用戶綁定在一起,到最后一步只是單純的驗證了是不是驗證碼正確。然后用戶直接輸入新密碼即可。
結合我這個漏洞,其實的話就是最后一步它已經驗證了驗證碼正確,等於過了最后一道安檢,然后當我測試我看到出現手機號,和此手機號的id我就知道有機可趁,這個uid的值是可以遍歷,所以我們只需要確定手機號,就能從最后一步修改任意用戶的密碼了。
看如下圖那樣,最后一步系統沒有做任何檢驗它這是檢測了cookie里面的內容,而且和我們post提交的參數沒做任何綁定,所以導致我們可以修改任意用戶和它對應的id值
其實這里還有一處,有時候越權重置他人的用戶密碼,我們最需要關注點我覺得吧就是看最后一步,看他是否從一開始就綁定了你這個用戶,不能修改。同時你也要主要觀察包里的參數,url的鏈接這一點很關鍵。
可跳過驗證碼驗證步驟
這里的一處是剛剛測到的。因為是某大學的不方便貼的仔細只能簡述一下過程
首先是輸入用戶名,這里我們輸入要重置對象的用戶名,然后到第二步安全驗證
然后到了第二步,它是給郵箱發送了驗證碼,這里我查看了頁面源代碼發現很可疑的一點,就是這里出現了一個從沒有出現的userid值,這讓我抱着疑惑的心情,接着測試,我發現觀察頁面源代碼我看見了,一處它這里的重置密碼是分步驟也就是url是這樣的 passwd1/2/3 所以我就直接在url處加了3跳到了最后一步,不過因為沒有輸入驗證碼,導致驗證不完全,最后一處頁面發送錯誤,不過不影響,我嘗試一下輸入新密碼抓包
抓包之后,大家看到這個userid值是不是很眼熟,沒錯正是第二步頁面源代碼里的userid值,只要我們將之前獲取到的貼進去,就可以成功重置這個用戶的密碼了。它這里也算是頁面的缺陷,我估計應該是當你輸入正確的驗證碼,這個userid的值會跟着用戶一起進入頁面3,然后當你輸入新密碼的時候,這個頁面就會把userid值帶着證明重置的是這個用戶。
驗證碼重置鏈接可以偽造
重置密碼的時候,我們大家也可以經常遇到郵箱驗證叭,此時廠商總會去給你的郵箱發送一個郵件,然后點擊這個郵件帶的鏈接去重置的密碼,這時候當我們知道這個郵箱鏈接url的構造,並且我們能成功偽造的話,我們就可以重置用戶的鏈接了。正如下圖所示,它這里的鏈接帶了一個mun參數,所以讓我想一下這個一看就像md5啊
md5去解密一下,果不其然解密出來就是我們的用戶名,這樣我們就可以清楚了它這個的邏輯了,classid是你用戶名對應的id值,而mid的值則是代表了你是系統發送的第多少次驗證碼,所以我們知道了這個url的鏈接構造,並且能成功的去偽造,我們就可以重置用戶的密碼啦。
總結
測試邏輯漏洞,雖然邏輯漏洞被認為是最簡單學習的漏洞,可是並不是非常容易找到的,測試邏輯漏洞就是要心細,對包里的每個參數,都要有一番自己的估計,不斷的去仔細的走每一步的步驟。去觀察包里的參數變化,這樣能幫助你更好的發現邏輯漏洞。
然后這里我提出一個觀點,當你測試密碼找回的時候要注意去看每一步頁面的js代碼,和它的頁面源代碼,說不定你可以從中獲取到一些意想不到的信息哦,還可以判斷出它密碼重置的代碼邏輯。