以“AI+數據安全”領雁!祝賀美創牽頭項目入選浙江省科技廳“尖兵領雁”計劃 !
2025-12-22
美創AI災備專家:引領災備領域邁入“智能化”時代
2025-12-15
熱點觀察|美創科技丁斐:數據安全 × 價值共創?可信數據空間的 “雙向奔赴”
2025-12-03
美創科技高校供應鏈數據安全方案斬獲 2025 年度 “金智獎”
2025-12-03
每周安全速遞3?? | ShinyHunters 開發新型勒索軟件ShinySp1d3r
2025-11-21
存儲域
數據庫加密 諾亞防勒索訪問域
數據庫防水壩 數據庫防火墻 數據庫安全審計 動態脫敏流動域
靜態脫敏 數據水印 API審計 API防控 醫療防統方運維服務
數據庫運維服務 中間件運維服務 國產信創改造服務 駐場運維服務 供數服務安全咨詢服務
數據出境安全治理服務 數據安全能力評估認證服務 數據安全風險評估服務 數據安全治理咨詢服務 數據分類分級咨詢服務 個人信息風險評估服務 數據安全檢查服務首先通過attifyos虛擬機進行環境搭建,attifyos虛擬機中集成了常用的固件環境模擬工具。
attifyos虛擬機下載地址:https://pan.baidu.com/s/1Vracsnlt5uNbdmfYK4dp8Q
密碼:tvoh
DIR645固件下載地址:https://pan.baidu.com/s/1B7fDB4NETjdGWtlkiPULpw
提取碼:5iaz
下載完成后,進入虛擬機目錄/home/oit/tools/firmadyne,執行python fat.py
此時會要求輸入所需要模擬的固件地址,這里我將固件放置在桌面,因此目錄為/home/oit/Desktop/firewalks/DIR645A1_FW103RUB08.bin
接下來會要求填寫固件的品牌名,可任意填寫
然后便是根據要求不斷填寫firmadyne的用戶密碼,在attifyos1.3中,密碼為firmadyne。
過程中可能需要填寫oit用戶的密碼,密碼為attify123。最后當出現如下頁面時,則表示固件模擬成功。
此時訪問http://192.168.0.1,可看到路由器登錄頁面
向路由器管理系統發現如下請求
POST /authentication.cgi HTTP/1.1Host: 192.168.0.1User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:50.0) Gecko/20100101 Firefox/50.0Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8Accept-Language: en-US,en;q=0.5Content-Type: application/x-www-form-urlencodedReferer: http://192.168.0.1/Content-Length: 7044Cookie: uid=TjnCBrkNZjConnection: closeuid=A21G&password=AAAAAA1024*A
返回結果如下圖所示,造成相關服務500,無法訪問
而正常的請求結果如下
請求體的內容超長導致了dir645出現了緩沖區溢出,從而拒絕服務。
首先通過binwalk解壓固件
進入到路由器系統目錄下,發現請求的authentication.cgi路徑,實際處理文件為cgibin
接下來對cgibin進行反編譯,將該程序導入到ida中,默認進入初始函數的main函數中
F5查看偽代碼,可以看到main函數主要是判斷請求uri,根據不同的uri選擇不同的函數進行處理
如果為authentication.cgi,則進入authenticationcgi_main函數處理,并將請求的數據作為參數值傳入該函數
進一步進入authenticationcgi_main函數
在這個函數里,根據請求方式的不同,進入不同的程序邏輯處理。我們的漏洞利用poc為post方法,查看post相關邏輯
可以看到,當為post請求時,讀取CONTENT_LENGTH和CONTENT_TYPE的值,若不為空,則將相關參數值傳入到read函數里進行讀取。函數為read(v21,v70,v20)
根據c語言的函數用法如下所示
我們可以看到,該函數用于讀取打開文件的內容。其中第一個參數為要讀取的文件內容,第二個參數為讀取到的內容保存的緩沖區,第三個參數指定所要讀取文件的長度。這個函數如果使用不規范的話,當第三個參數指定的讀取文件長度超過第二個參數所定義的緩沖區大小時,就造成了緩沖區溢出漏洞。
那么在這里漏洞案例中,我們來看下read(v21,v70,v20) 函數所對應的這三個參數值分別是什么。
v21=fileno(stdin) 為用戶輸入的值,即post請求體的中的body數據
v70為函數定義的數據結構,大小為1024比特
v20 = atoi(v18)= atoi(getenv(“CONTENT_LENGTH”),為CONTENT_LENGTH的值
由于這里v20所代表的讀取內容的長度是用戶可控的,因此當設置CONTENT_LENGTH大于1024,請求體內容超長時,就造成了read函數出現緩沖區溢出漏洞