DLINK DCS-5020L無線雲攝像機遠程代碼執行漏洞分析
簡介
本文主要是向大家演示,如何找到物聯網(IOT)設備中的漏洞。查找以下命令注入的過程可以分為3個步驟,有點類似於100 point CTF challenge:下載二進位文件,運行字元串,跟蹤系統調用到原點的輸入。
DLINK DCS-5020L
「DCS-5020L無線N Day&Night雲台/傾斜雲台攝像機是一款日夜型網路攝像機,可輕鬆連接到您現有的家庭網路,並支持在各種移動設備上進行遠程觀看。 它具有平移,傾斜和數碼變焦功能,可讓您使用單台相機查看更為廣闊的區域,內置Wi-Fi擴展器,輕鬆擴展無線覆蓋範圍,夜視距離達5米,聲音和運動檢測終極的安心無憂,H.264視頻壓縮為高質量的圖像。「
提取固件
與任何物聯網設備一樣,我們需要做的第一件事就是(如果我們有權訪問它)從固件映像中提取文件系統。而對於這種設備,第一次binwalk掃描不會顯示任何東西:
我們正在尋找的是某種形式的嵌入式文件系統,比如squashfs。如果找不到它,通常是因為它被使用了分層壓縮。 我們需要做的就是使用-M選項,遞歸運行binwalk。最終,我們在2層壓縮下發現了cpio文件系統。
讓我們來查看下負責Web伺服器的httpd二進位文件。
文件名:alphapd
Md5sum: ea622a926c435e4637f4852536aafa8c
漏洞
就像文章開頭所說的那樣,首先我們在二進位文件上運行字元串,看看會發生什麼:
這些看起來像是傳遞給系統的命令。這裡的』sed』命令非常有趣,看起來好像是從某個地方輸入的。下一步是跟蹤輸入,看看我們是否可以控制它。
我們可以看到這裡有兩個引用我們感興趣的字元串的函數。
反過來,每個函數都在setFormDefineManagement中被引用:
這些都是我們可以發送請求的POST表單。 例如,如果我們以下面的形式更改密碼,我們向setSystemAdmin發出POST請求:
應該注意的是,您需要擁有管理員憑據才能訪問此頁面,稍後再介紹。還有一點需要注意的是,setSystemUserModify表單總是返回一個404,所以我們堅持分析setSystemAdmin。
因此,從sub_42DCCC開始,代碼將從非易失性RAM以及websGetVar中取值。
這裡的一個關鍵信息是對CheckSystemVar的調用,這段代碼調用websGetVarCheck來處理大量的輸入值,包括AdminID。
然後websGetVarCheck調用checkVarString,如下所示:
這顯然只是一個switch/case結構。我們感興趣的值是AdminID,可以看到它的值必須小於13個位元組。
所以我們知道AdminID的約束是它必須少於13個位元組。完成所有這些後,通過格式字元串傳遞給我們的AdminID參數來調用DoSystem。
很顯然,攻擊者可以使用一個簡單的payload來躲避』sed』命令,比如『』。 另一個例子是AdminID=a』』,它允許用戶登錄為「a」,並將此視作新的root帳戶:
注意,我們使用空密碼登錄。
進一步說明
我們還發現,我們可以通過在大多數密碼欄位中發送長密碼,來對web server segfault。如果我們發送198個位元組,服務會發生段錯誤,並且會導致匯流排錯誤。
不過可惜的是,我找不到讓gdbserver進入設備的方法,因此也無法轉儲核心文件並抓取它。
以下是使用210A的DDNSPassword參數向/setSystemNetwork發出POST請求的示例。
掌握憑據的攻擊者可以利用該漏洞,在攝像機的Web界面上導致其拒絕服務。如果我們能找到在設備上調試二進位文件的方法,也有可能做到RCE。
影響
目前,這些設備中有近7000個連接到互聯網:
MISC
受影響的版本 - 固件1.14.09
受影響的二進位文件 - Alphapd - ea622a926c435e4637f4852536aafa8c
補丁 - DLink的公告
TIMELINE
2017.11.21 - 向廠商披露,收到William Brown的回復,並發送給研發部門
2017.11.29 - MITRE CVE請求,分配CVE 2017-17020,然後發送給Dlink並更新它們。 W. Brown詢問公開披露時間,我們告訴他沒有時間限制,只有在補丁發布後才會被公開披露。
2018.4.27 - Dlink的解決方案正式上線
2018.4.27 - 博客上線並更新了CVE
*參考來源:fidusinfosec,FB小編 secist 編譯,轉載請註明來自FreeBuf.COM


※思科網路設備漏洞波及國內,中獎後屏幕竟會出現美國國旗
※加熱器除了溫暖你的家,竟然還能挖礦?
TAG:FreeBuf |