寫在前面
昨天在和一位朋友的合作下,發現了某個授權站點存在邏輯漏洞,過程挺好玩也挺玄幻的,這里就拿出來寫寫,本人菜雞一枚,請大佬們勿噴~
過程
在對該站點進行排查的時候,我發現了其中的登錄后臺,便想著嘗試用弱口令試試是否能直接登錄。這里先嘗試賬號為12345,密碼為12345,它的錯誤回顯如下圖:
嘗試賬號為admin,密碼為admin,它的回顯效果就不一樣了,說明當服務器存在賬號時回顯如下,admin為真實賬號,這里猜測還需要內網環境
這些前期工作都摸清楚后,然后就開始進入正題了。
路徑是:
https://x.x.x/portal/register/forgetPassword
這個url為忘記密碼的頁面,我嘗試修改密碼后再次登錄,看是密碼正確時是否能改登錄。
當填寫登錄名時,如果登錄名存在,則網頁會自動填寫手機號碼
1.點擊獲取驗證碼,目的在于要發送驗證碼,模擬真實環境下手機獲取驗證碼。
2.下圖為awvs掃描器中自動測試的payload
/portal/register/forgetPassword?account=4111111111111111&btn
=%e8%8e%b7%e
5%8f%96%e9%aa%8c%e8%af%81%e7%a0%81&code
=94102&Cto=d47867b3be2f4f67aa693ddde6d7904d&msgCode
=94102&password=g00dPa%24%24w0rD&phone=555-666-0606&repassword=g00dPa%24%24w0rD
Payload中94102為awvs掃描時發送的驗證碼,于是我開始用這個驗證碼嘗試測試,這個驗證碼可能是批量掃描出來的長度以及形狀,剛好符合網站驗證碼長度(5位數)
注:awvs掃描器的payload中phone參數與網頁電話不一致
3.輸入94102驗證碼,發現會自動清除,驗證碼已過期(在這里短信驗證碼是當你輸入完成后就執行匹配命令的,不用點擊確認按鈕再執行匹配命令),于是這個時候我想到了萬能密碼,萬能密碼能在登錄表單繞過登錄的限制,那在驗證碼表單繞過sql查詢語句,當輸入1' or 1='1
?時為True,因為輸完萬能密碼后,服務器開始匹配(這時候沒有自動清楚驗證碼),網頁出現卡頓狀態。
在驗證碼表單輸入1' or 1='1
,當出現網頁卡的現象時刷新頁面
4.網頁卡頓一段時間還沒有好,我執行了一下刷新,發現驗證碼沒有被服務器重置,于是我填寫剩余的表單內容,并且提交,提交后網頁繼續卡頓,此時并無回顯更改成功。
5.等網頁卡頓一段時間后無回顯,執行刷新,網頁刷新狀態如下,將驗證碼替換為94102,這個時候驗證碼有效并且不會卡頓,不會被網頁清理。(個人覺得是剛剛的萬能密碼讓服務器識別了一次驗證碼的驗證操作,但是沒有執行更改密碼的操作,當再次刷新頁面的時候萬能密碼還在,服務器已經將此驗證碼標為True,但是剛剛執行完全部操作無正確回顯。所以我決定更換一個驗證碼,此時驗證碼不會被重置,再次輸入更新密碼時成功更改。)
輸入我們定義的密碼即可修改成功。
更改后的賬號密碼為admin/Admin888,嘗試登錄發現還是有網絡環境的限制。
嘗試賬號密碼admin/Admin888 回顯效果不一樣,說明當服務器存在賬號時回顯如下,admin為真實賬號,猜測需要內網環境
嘗試賬號密碼12345/12345,回顯效果不一樣,這可以證明上面那一點
這下該怎么辦呢?我仍然不想放棄。在查看了該站點的通知公告等信息之后,找到了一些供應商等信息,這時我突然想到可以用統一社會信用代碼進行嘗試。
這里先說一下統一社會信用代碼究竟是個啥:
統一社會信用代碼是一組長度為18位的用于法人和其他組織身份識別的代碼。統一社會信用代碼(18位)包含了組織機構代碼(第9-17位)和稅務登記證號碼 (第3-17位),因此,可以說,統一社會信用代碼和組織機構代碼不是一個,但有著非常密切的聯系。 統一社會信用代碼是一組長度為18位的用于法人和其他組織身份識別的代碼。
然后我找到了很多個供應商的統一社會信用代碼,將這些統一社會信用代碼當作賬號,經過前端輸入賬號密碼登錄時的提示,發現挺多用戶都存在的。再次使用上述的方法任意修改密碼,都成功了,并且成功登錄了進去。這里我就以其中一個為例:
成功修改
成功登錄
其中涉及到一些敏感信息,都已經打碼。
至此,完成此次滲透。
來源:安全客