解密攻擊者如何利用D-Link路由器構建殭屍網路
在這篇文章中,我們將跟大家討論我們在幾台頂級D-Link路由器中發現的安全漏洞,受影響的路由器型號如下:
-DIR890L
-DIR885L
-DIR895L
-以及其他相關的DIR8xx型號D-Link路由器
這些設備使用的是相同的代碼,因此攻擊者將能夠利用這些設備中存在的安全漏洞來組成一個龐大的殭屍網路。除此之外,我們還將嘗試通過修改路由器的編譯腳本來製作一個模擬的Mirai殭屍網路。
本文所要討論的主要是D-Link路由器設備中的兩個安全漏洞。其中一個與cgibin(cgibin是主要的CGI文件,它負責生成用於控制路由器的Web介面頁面)有關,另一個漏洞則與系統恢復功能有關。
竊取登錄憑證
簡而言之,你只需要發送一個HTTP請求,你就可以竊取到路由器的登錄名和密碼了。
我們所檢測到的第一個漏洞存在於phpcgi中。phpcgi是一個指向cgibin的符號鏈接,它負責處理所有針對.php、.asp和.txt頁面的請求。它可以對通過URL、HTTP頭或POST請求的body所發送的數據進行解析,phpcgi會創建一個長字元串,而這個字元串之後會被處理成一系列鍵值對,並被用於_POST和$_SERVER等字典以及php腳本變數之中。完成了請求分析之後,符號鏈接會檢測用戶是否經過了身份驗證。如果用戶沒有被授權,它便會將字元串中的AUTHORIZED_GROUP變數值設置為-1。
這裡的問題就在於,整個解析過程是存在安全漏洞的。每一個鍵值對都是按照以下形式編碼的:_TYPE_KEY = VALUE,其中TYPE可以是GET、POST或SERVER。接下來,鍵值對會使用分行符』
』來進行連接。
通過發送POST請求,我們可以使用SomeValue%3dAUTHORIZED_GROUP=1這個值來添加一個鍵。這個鍵將會被解析成_GET_SomeKey=SomeValue
AUTHORIZED_GROUP=1,而它將允許我們觸髮腳本運行。
接下來,通過向http://192.168.0.1/getcfg.php發送一個請求,然後將鍵值對SERVICES=DEVICE.ACOUNT添加進去,我們就可以調用 /htdocs/webinc/getcfg/DEVICE.ACCOUNT.xml.php腳本,而這個腳本將給我們返迴路由器的登錄名和密碼。
很明顯,這個安全問題將允許任何一名攻擊者運行存儲在/htdocs/webinc/getcfg文件夾中的腳本,而且除了剛才這個腳本之外,目錄中還有一個名叫DEVICE.ACCOUNT.xml.php的腳本同樣可以幫助攻擊者竊取到包括設備登錄名和密碼在內的重要信息。
換句話說,如果攻擊者向http://192.168.0.1/getcfg.php發送了一個請求,並添加了鍵值對SERVICES=DEVICE.ACOUNT,那麼路由器所返回的響應頁面中同樣將包含設備的登錄名以及密碼。
針對phpcgi的漏洞利用代碼:【點我獲取】
路由器的超級用戶訪問(從遠程代碼執行到root許可權)
除了剛才所介紹的之外,攻擊者甚至還可以使用他們自己的固件來對設備進行更新。
與之前一樣,攻擊者只需要發送一個HTTP請求就能夠拿到路由器設備的root-shell。長話短說,第二個漏洞是一個由執行錯誤所引起的棧緩衝區移除漏洞。【HNAP】
為了通過協議來發送消息,攻擊者需要向http://192.168.0.1/HNAP1/頁面發送一個請求,然後在SOAPACTION頭中指定請求的類型。存在漏洞的是身份認證請求的處理過程,而」http:?/purenetworks.com/HNAP1/Login」這個值是用來調用身份認證功能的。因此,攻擊者就可以在請求body中指定另一個不同的鍵值對:Action、Username、LoginPassword和Captcha。接下來,這些鍵都被編碼成HTML標籤。例如
存在問題的地方就是負責提取鍵值對的函數,這裡的棧緩衝區大小被設定成了0x400個位元組,而攻擊者可以使用strncpy發送一段長度超過0x10000個位元組的數據,並成功引起棧緩衝區發生溢出。Strncpy會讓當前棧空間溢出,然後進一步損壞函數調用棧。
當函數退出的時候,R0寄存器中保存了一個指向字元串的指針。因此,攻擊者就可以在這裡指定一條sh命令,然後將返回地址修改為一個系統函數。接下來,這台路由器設備將完全處於攻擊者的控制之下。
針對HNAP漏洞的漏洞利用代碼:【點我獲取】
通過路由器的恢復模式更新固件
簡而言之,當路由器重啟之後,你就會拿到設備的root許可權。
第三個漏洞的分析如下:當路由器啟動之後,它會設置一個用於恢復系統的Web伺服器(僅持續幾秒鐘),而這台伺服器將允許未經身份驗證的攻擊者更新設備的軟體。
因此,攻擊者只需要利用剛才所介紹的那幾個漏洞或向服務jcpd發送命令 「EXEC REBOOT SYSTEM」 就能夠重啟目標路由器。為了獲取到目標路由器的完整控制權,攻擊者還需要向路由器上傳一個定製版的惡意固件。
針對路由器系統恢復漏洞的漏洞利用代碼:【點擊下方閱讀原文獲取】
漏洞情況
D-Link目前僅修復了DIR890L型號路由器中的一個安全漏洞,而本文所介紹的D-Link其他型號路由器以及漏洞仍然沒有被解決,而且開發者仍然沒有意識到另外兩個安全漏洞的嚴重性。因此,大家應該懂得要怎麼做了吧?D-Link,幹得漂亮!
* 參考來源:embedi, FB小編Alpha_h4ck編譯,轉載請註明來自FreeBuf.COM
※利用空調系統對隔離網路中的電腦發送指令
※讓木馬病毒DNS數據傳輸成為歷史:看我如何讓XShell病毒失效
※致敬安全行業年度風雲人物 | WitAwards 2017年度安全人物評選「報名進行中」
※Node.js中的內存泄漏分析
※殭屍網路Jenki家族IoT變種分析預警
TAG:FreeBuf |