對某黑產微盤交易系統的漏洞挖掘
附上源碼#
鏈接: https://pan.baidu.com/s/1KDISzDnOFlThR9CD4AjQJQ 提取碼: 6rsw
安裝好是這樣的:
登錄后台:
http://192.168.190.147/admin/index/index.html
admin 2807016..
進后台 添加了一個用戶名為123 密碼為test1234的用戶 方便我們測試。
這次從功能測試到審計
0x01 注入漏洞
隨便點擊一個進去 測試后發現這個pid參數存在注入
http://192.168.190.147/index/goods/goods/pid/23'/token/6f2a0b00bceb07ed7a327f392d7f0755.html
這里用的thinkphp框架的路由 入口文件+模塊/控制器/操作
所以此處注入對應的文件在 index模塊(aplication應用目錄)下的goods控制器的goods操作(函數)
這里因為我們是功能測試出來pid這個變量貌似有注入,所以我們關注這個變量走向即可
Input方法是接收這個參數變量 不多講
可以看到在接收了PID變量后帶入了GetProData函數,看看這個函數怎么定義的
在GetProData函數中的235行開始到237行進行了數據庫查詢操作,可以看到變量pid在237直接帶入where函數作為pi.pid參數的值進行查詢,沒有任何過濾導致注入,直到這里我們才確定是真的有注入
關於tp5自帶的數據庫查詢方法函數大佬們可以多看看手冊即可
0x02 后台登錄繞過漏洞
后台地址:http://192.168.190.147/admin/index/index.html
我們先登錄正常管理賬號。
抓包分析
發現有兩個請求的包
第一個:
Forward第一個后,抓取到第二個:
測試發現第一個包發送后第二個包中的cookie里面有個denglu 里面帶着有個參數uid,很有可能是用戶的標號,極有可能后台通過第二個包判斷登錄權限,我們重新打開一個沒有登錄的頁面
denglu=think%3A%7B%22otype%22%3A%223%22%2C%22userid%22%3A%221%22%2C%22username%22%3A%22admin%22%2C%22token%22%3A%223c341b110c44ad9e7da4160e4f865b63%22%7D
我們帶上那個正常包的cookie字段中的denglu這個參數
登錄成功,但是不確定是否有漏洞,因為這里的uid和username可以偽造,但是有個token參數,如果是隨機生成那么是不存在越權,所以我們繼續看源碼確定漏洞。
找到admin下的login控制器
往下找 可以看到這處
這里的token只是對一個字符串”nimashabi”進行md5加密,也就說是固定的,所以我們cookie加那個固定的denglu參數直接可以越權,存在漏洞
0x03 后台Getshell
Getshell部分我們重點關心上傳點和寫入文件之類的功能。后台發現此處有個上傳點,這里是修改前台相關信息和圖標的。
我們查看元素,看看接收文件上傳的php在什么位置
/admin/setup/editconf.html
Admin模塊下的setup控制器的editconf函數,找到對應位置
可以看到這里沒有任何類型判斷 直接上傳
我們來測試一下,上傳一個一句話后訪問前台
0x04前台越權改密碼
我們首先注冊兩個用於來測試,一個賬號名為”客戶”,一個為”黑闊”
我們來前台修改密碼,嘗試csrf漏洞
先登錄”客戶”賬號,登錄成功后點擊修改密碼,抓包
來到這里修改
因為格式問題 填寫賬號手機號的時候先改成手機號的長度,抓包
這里手機號就代表用戶名,我們這里登錄的是手機號為1的”客戶”帳號,嘗試把手機號改成2(另一個名為“黑闊”賬號的手機號就為2),新密碼改成111111,關於手機驗證碼在真實環境中爆破即可
我們來看下源碼,確認漏洞。
因為剛才那個修改的密碼的包請求的是這個html,我們看看這個模塊里表單提交的地址是什么
找到了修改密碼操作的位置 login/repass
關鍵代碼 首先是接收post過來的值 里面包含我們手機號,先帶入數據庫查詢手機號是否存在
其次對驗證碼校驗,這個我們可以爆破,最后直接修改密碼,存在漏洞。
0x05 前台getshell
因為前面0x02可以繞過登錄,只需要cookie加上那個管理的信息就可以,加上0x02可以直接上傳 ,我們直接構造管理員的上傳包可以直接getshell