Natas Web. Passage dari platform KKP bertujuan untuk mengeksploitasi kerentanan Web. Bagian 4

gambar

Pada artikel ini, kita akan membahas operasi beberapa identitas WEB menggunakan wargame Natas sebagai contoh. Setiap level memiliki akses ke kata sandi level selanjutnya. Semua kata sandi juga disimpan di file / etc / natas_webpass /. Sebagai contoh, kata sandi untuk natas5 disimpan dalam file / etc / natas_webpass / natas5 dan hanya-baca untuk pengguna natas4 dan natas5.

Bagian sebelumnya: bagian 1 , bagian 2 dan bagian 3 .

Informasi Organisasi
Terutama bagi mereka yang ingin mempelajari sesuatu yang baru dan berkembang di bidang informasi dan keamanan komputer, saya akan menulis dan berbicara tentang kategori berikut:

  • PWN;
  • kriptografi (Crypto);
  • teknologi jaringan (Jaringan);
  • membalikkan (Reverse Engineering);
  • steganografi (Stegano);
  • pencarian dan eksploitasi kerentanan WEB.

Selain itu, saya akan membagikan pengalaman saya dalam forensik komputer, analisis malware dan firmware, serangan pada jaringan nirkabel dan jaringan area lokal, melakukan pentest dan menulis eksploitasi.

Agar Anda dapat mengetahui tentang artikel baru, perangkat lunak, dan informasi lainnya, saya membuat saluran di Telegram dan grup untuk membahas masalah apa pun di bidang ICD. Juga, saya pribadi akan mempertimbangkan permintaan pribadi Anda, pertanyaan, saran dan rekomendasi secara pribadi dan akan menjawab semua orang .

Semua informasi disediakan hanya untuk tujuan pendidikan. Penulis dokumen ini tidak bertanggung jawab atas kerusakan yang disebabkan seseorang sebagai akibat dari menggunakan pengetahuan dan metode yang diperoleh sebagai hasil dari mempelajari dokumen ini.

level 22


Setelah menganalisis kode sumber, menjadi jelas bahwa kita akan melihat kata sandi jika parameter GET revelio tidak kosong.

gambar

Tetapi pada pemeriksaan pertama, jika sesi admin tidak diinstal, kami diarahkan ke halaman ini tanpa parameter.

gambar

Anda hanya perlu menggunakan agen web bukan browser, misalnya ikal.

gambar

gambar

Kami mengambil kata sandi.

level 23


Kami menganalisis kode sumber. Fungsi strstr (s1, s2) mengembalikan substring dari s1 yang dimulai dengan s2. Juga php secara otomatis melempar tipe. Artinya, ketika membandingkannya, itu akan mengarahkan string ke angka dan akan membuang karakter tambahan.

gambar

String "11inoveyou" akan cocok untuk kondisi kita. Pada pemeriksaan pertama, ia mengembalikan "iloveyou", yaitu, Benar. Pada pemeriksaan kedua, 11> 10, mis. Benar.

gambar

level 24


Level ini juga mengandung kesalahan logis. Kondisi ini tetap benar jika strcmp mengembalikan FALSE. Tetapi strcmp akan mengembalikan FALSE meskipun terjadi kesalahan.

gambar

Meskipun php membuat tipe secara otomatis, php tidak dapat memberikan array ke string. Untuk melakukan ini, buka kode sumber halaman dan ubah nama bidang dari "passwd" menjadi "passwd []".

gambar

Kami mengirim jalur apa pun.

gambar

Kami mengambil kata sandi.

level 25


Saat menganalisis kode sumber, yang paling menarik adalah fungsi logRequest (), yang memproses bidang yang dapat dikontrol pengguna. Ini adalah header HTTP dari User_Agent dan cookie session_id.

gambar

gambar

gambar

Perlu mempertimbangkan bahwa semua urutan "../" dihapus dari string, tetapi ini dapat dilakukan dengan cara: "... /. /" => "../".

Ide solusi: Karena jalur untuk merekam log tergantung pada session_id, yang dapat kita kontrol, dan dengan memilih bahasa tampilan, jalur pada server dipilih - karena LFI kita dapat membaca file log.

gambar

gambar

gambar

gambar

Sekarang tinggal menulis kata sandi dari /etc/natas_webpass / natas26 ke dalam file log kita. Karena Agen Web kami pertama kali direkam dan kemudian keluar dari file, kami akan menambahkan kode php ke bidang ini.

gambar

gambar

Kami mendapatkan kata sandi.

level 26


Dalam contoh ini, ada kerentanan yang sangat serius - deserialisasi objek tanpa filter. Fungsi unserialize () mengambil satu variabel serial dan mengubahnya kembali menjadi objek PHP.

gambar

Nilai yang dikonversi dikembalikan, yang bisa berupa integer, float, string, array atau objek. Yaitu Anda dapat menjalankan kode apa pun. Kelas Logger, ketika dibuat, menulis informasi tertentu ke file.

gambar

Idenya adalah sebagai berikut:

  1. Tulis ulang kelas Logger, di mana alih-alih salah satu pesan, kode php akan berisi yang akan menghasilkan kata sandi.
  2. Encode di Base64.
  3. Rekatkan dalam cookie.
  4. Akses file log.
  5. Singkirkan kata sandi.

<?php class Logger{ private $logFile; private $initMsg; private $exitMsg; function __construct($file){ $this->initMsg="<? passthru('cat /etc/natas_webpass/natas27'); ?>"; $this->exitMsg="<? passthru('cat /etc/natas_webpass/natas27'); ?>"; $this->logFile = "img/phpobjinj.php"; } function log($msg){ ; } function __destruct(){ ; } } $obj = new Logger("obj"); echo urlencode(base64_encode(serialize($obj))); ?> 

gambar

gambar

gambar

Kami mendapatkan kata sandi.

level 27


Layanan ini menyediakan data pengguna. Tetapi jika pengguna tidak ada, ia membuatnya dengan nama pengguna dan kata sandi yang ditentukan.

gambar

Masalahnya adalah bahwa setelah membuat pengguna, layanan tidak memeriksa kata sandi saat login. Pada saat yang sama, hanya 64 karakter pertama dari login dan kata sandi setelah penyaringan masuk ke dalam basis data. Tidak hanya itu, kami tahu nama pengguna: natas28.

gambar

Buat pengguna dengan kata sandi dan nama kosong: "natas28_60-spasi_ any-character". (Jadi, selama verifikasi, tidak akan ada kecocokan dengan pengguna natas28, tetapi selama pembuatan itu akan disaring dan ditambahkan ke database. Artinya, kata sandi tidak akan diperiksa pada panggilan berikutnya).

gambar

gambar

Kami menggunakan nama natas28 dan kata sandi kosong. Kami mendapatkan data pengguna natas28.

Untuk dilanjutkan. Anda dapat bergabung dengan kami di Telegram .

Source: https://habr.com/ru/post/id464863/


All Articles