在线炒股配资门户网-杠杆交易软件搜加杠网-【东方资本】,股票杠杆app,今日热股什么意思,预计下周一股市行情展望

提交需求
*
*

*
*
*
立即提交
點擊”立即提交”,表明我理解并同意 《美創科技隱私條款》

logo

    產品與服務
    解決方案
    技術支持
    合作發展
    關于美創

    申請試用
      D-link DIR645 緩沖區溢出漏洞分析
      發布時間:2023-05-12 閱讀次數: 949 次
      前言

      D-Link DIR-645在實現上存在命令注入及棧緩沖區溢出漏洞,攻擊者可利用這些漏洞任意更改內存,以root權限執行任意shell命令或代碼。該漏洞是CGI腳本在處理authentication.cgi請求,將請求頭的CONTENT_LENGTH值作為read函數讀取文件的內容大小,由于該值可控,因此造成read函數的緩沖區溢出。
      固件模擬

      首先通過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: close
      uid=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函數出現緩沖區溢出漏洞


      免費試用
      服務熱線

      馬上咨詢

      400-811-3777

      回到頂部