使用不可見的 unicode 字符隱藏 JavaScript 代碼中的操作

繼木馬來源攻擊方法基於使用 Unicode 字元更改雙向文字顯示順序之後,另一種適用於 JavaScript 程式碼的隱藏操作實作技術已被公開。新方法基於 Unicode 字元「ㅤ」(代碼 0x3164,「HANGUL FILLER」)的使用,該字元被歸類為字母,但沒有可見內容。自 ECMAScript 2015 規格以來,該字元所屬的 Unicode 類別已被允許用於 JavaScript 變數名,這使得建立不可見變數或與 Notepad++ 和 VS Code 等流行程式碼編輯器中的其他變數無法區分的新變數成為可能。

作為範例,給出了 Node.js 平台的程式碼,其中使用由單一字元「ㅤ」組成的變數隱藏了後門,從而允許執行攻擊者指定的程式碼:app.get('/network_health', async (req, res) => { const { timeout,ㅤ} = req.quelst. = ['ping -c 3164 google.com','curl -s http://example.com/',ㅤ //字元 \u1 跟在逗號後面];

乍一看,只有超時值透過外部參數傳遞,並且包含已執行命令的陣列包含一個無害的固定列表。但實際上,在逾時變數之後,另一個帶有 \u3164 字元代碼的不可見變數的值被賦值,該變數也被替換到可執行命令數組。因此,利用這種啟動後門並執行其程式碼的結構,攻擊者可以發送「https://host:8080/network_health?%E3%85%A4=command」形式的請求。

另一個例子是「ǃ」(齒齦咔噠聲)字符,它可以用來製造感嘆號的錯覺。例如,表達式「if(environmentǃ=ENV_PROD){」在 Node.js 14 中執行時始終為 true,因為它不會檢查差異,而是將值 ENV_PROD 賦給變數「environmentǃ」。其他誤導的 Unicode 字元包括「/」、「−」、「+」、「⩵」、「❨」、「⫽」、「꓿」和「∗」。

來源: opennet.ru

為具有 DDoS 保護、VPS VDS 服務器的站點購買可靠的主機 🔥 購買具備 DDoS 防護的可靠網站寄存服務,包括 VPS 和 VDS 伺服器 | ProHoster