前言
現在的攻防演練不再像以往那樣一個漏洞直搗黃龍,而是需要各種組合拳才能信手拈來,但是有時候使盡渾身解數也不能稱心如意。
前期資訊收集
首先是拿到靶標的清單
訪問系統的介面,沒有什麼能利用的功能點
首先進行目錄掃描,掃描發現存在xxx.zip的檔案放置在web目錄上
一般zip檔案大部分情況都是開發運維人員做系統維護時留下的備份檔案,在系統上線後並沒有將其刪除,於是底褲(即原始碼)都直接給到了攻擊者
來到這一步都以為是一路高歌,輕鬆拿下,沒想象到是跌宕起伏伏伏伏伏......
先使用wget下載zip檔案,檔案總共200+mb,很有機率是原始碼的打包
從檔案內容可判斷,該系統是使用的.net開發,可透過dnspy進行審計
檔案上傳漏洞審計
拿到原始碼後的第一個思路是尋找檔案上傳漏洞
果不其然在原始碼中找到uploadimg
介面,發現未對上傳的檔案格式進行過濾
實際訪問介面發現,怎麼改變檔案格式、檔案內容、Content-Type、還是各種變種傳輸都無濟於事。
【----幫助網安學習,以下所有學習資料免費領!加vx:dctintin,備註 “部落格園” 獲取!】
① 網安學習成長路徑思維導圖
② 60+網安經典常用工具包
③ 100+SRC漏洞分析報告
④ 150+網安攻防實戰技術電子書
⑤ 最權威CISSP 認證考試指南+題庫
⑥ 超1800頁CTF實戰技巧手冊
⑦ 最新網安大廠面試題合集(含答案)
⑧ APP客戶端安全檢測指南(安卓+IOS)
返回包永遠是{"Status":1,"Data""null}
運維實在是壞呀~
Sql注入漏洞審計
第二個思路就是找注入
但是程式碼中定義了一個SqlChecker
全域性的類,強制處理所有使用者傳參,找注入這個方向有有點難啃了
系統使用者資訊遍歷
找到/api/user/getusers
介面
介面沒有做鑑權,構造請求包傳送,返回包返回系統所有使用者資訊
其中使用者資訊包括姓名、出生日期、微信賬號、手機號碼、郵箱、密碼等等
偽造jwt_token獲取系統管理員-拿下靶標
原始碼獲取到jwt_token的secret
但是該secret不是可讀性文字,估計是隨機生成的byte位元組序列,因此不能自行使用cyberchief或者其他工具將token直接生成
這裡有個坑點:開始是使用gpt生成的指令碼進行secret的讀取和token的生成,發現gpt在處理位元組上面有點問題,生成的jwt_token不能使用,於是自行編寫了個py指令碼進行jwt_token的構造,首先我們將位元組序列做16進位制的轉化,為了python能夠使用bytes.fromhex()
函式讀取16進位制化的secret,然後根據上面讀出的使用者資訊,偽裝admin賬號身份,並設定一個較長的ExpireTime
拿到jwt_token之後,要如何使用才能拿到後臺呢,這裡首先要明白該系統的登入鑑權機制
由於他存在註冊功能,我們便可在自行註冊一個賬號,然後進行登入,檢視認證處理流程
從資料包裡面得知,登入成功後會返回jwt_token和一些與使用者相關的一些資訊,前端會根據返回的身份資訊,跳轉到對應的頁面,並且功能介面都會帶上jwt_token進行請求以便獲取系統資料
瞭解清楚後,就開始進行身份偽造,首先去後臺登入系統
將登入返回包的內容替換為管理員賬號的token(從python指令碼中生成)和管理員使用者的身份資訊
透過鑑權後,終於成功獲取管理員後臺,靶標5000分到手,哈哈
總結
本次滲透從驚喜到懷疑到失落,總的來說就是“山窮水盡疑無路,柳暗花明又一村”。
如果只是死磕檔案上傳、SQL隱碼攻擊這些能夠快速獲取許可權的洞,反而有時會錯過一些有用的資訊,畢竟比賽中分數才是最要緊的,如何高效快速拿下靶標才是第一要領。
同時,程式碼審計的過程中要結合系統功能來多方面評估,本次挖洞也是先認真理解了系統的登入認證機制,才知道有jwt鑑權這種方式,從而萌生在程式碼中找jwt secret的想法,也才能把快到手的分數牢牢抓在自己手中。
更多網安技能的線上實操練習,請點選這裡>>