Pemecahan masalah dengan pwnable.kr 06 - acak dan 09 - kesalahan

gambar

Pada artikel ini, kita belajar bagaimana mencegat data yang ditransfer antara fungsi pustaka dan program, mengingat deskriptor file dan menyelesaikan tugas 6 dan 9 dari situs pwnable.kr.

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.

Solusi untuk tugas acak


Kami mengklik ikon dengan tanda tangan acak, dan kami diberitahu bahwa kami perlu terhubung melalui SSH dengan tamu kata sandi.

gambar

Saat terhubung, kami melihat spanduk yang sesuai.

gambar

Mari cari tahu file apa yang ada di server, serta hak apa yang kita miliki.

ls -l 

gambar

Dengan demikian, kita dapat membaca kode sumber program, karena ada hak untuk membaca untuk semua orang, dan menjalankan program secara acak dengan hak-hak pemilik (bit sticky diatur). Mari kita lihat hasil kodenya.

gambar

Program menghasilkan angka acak, menerapkan operasi XOR (eksklusif OR), dan jika hasil operasi XOR sama dengan nilai referensi, ini akan menampilkan bendera.

Faktanya adalah bahwa fungsi rand () digunakan dalam program ini. Fungsi ini menghasilkan angka pseudo-acak, mengonversi "butir" yang dihasilkan oleh fungsi srand (). Fungsi srand (angka) harus dipanggil setiap kali sebelum memanggil rand (). Jika ini tidak terjadi, maka srand (1) dipicu sebelum rand () secara default.

Dengan demikian, dalam program ini, generator bilangan pseudo-acak mengubah "butir" yang sama setiap kali sesuai dengan algoritma yang sama. Kita perlu mencari tahu angka yang mengembalikan fungsi rand (), dan proksi dengan nilai referensi. Karena operasi XOR bersifat reversibel, lalu meneruskan nilai yang diterima ke input program, kami mendapatkan bendera.

Mari kita sela data antara fungsi perpustakaan rand () dan program kami. Untuk melakukan ini, gunakan utilitas ltrace.

 ltrace ./random 

gambar

Kita melihat dengan parameter apa fungsi rand () dipanggil dan nilai apa yang dikembalikannya. Sekarang proxorit nilai ini dengan referensi.

gambar

Kami mengirimkan nomor yang dihasilkan ke input program kami.

gambar

Kami melewati bendera dan mendapatkan satu poin untuk tugas yang mudah.

gambar

Solusi untuk kesalahan tersebut


Kami mengklik ikon dengan tanda tangan kesalahan, dan kami diberitahu bahwa kami perlu terhubung melalui SSH dengan tamu kata sandi.

gambar

Saat terhubung, kami melihat spanduk yang sesuai.

gambar

Mari cari tahu file apa yang ada di server, serta hak apa yang kita miliki.

 ls -l 

gambar

Dengan demikian, kita dapat membaca kode sumber program, karena ada hak untuk membaca untuk semua orang, dan menjalankan program kesalahan dengan hak-hak pemilik (bit sticky diatur). Mari kita lihat hasil kodenya.

gambar

Di awal program, file dibuka dan deskriptor dibuat. Tentang deskriptor file, saya sudah menulis secara detail di artikel INI . Tetapi kenyataannya adalah bahwa kondisi tersebut membuat kesalahan. Dengan demikian, perbandingan pertama kali dilakukan, yang hasilnya bohong, dan kemudian penugasan hasil palsu ini (mis. 0) ke variabel fd.

gambar

Selanjutnya, fungsi sleep dipanggil dan tanpa menyarankan input ke variabel pw_buf, datanya dibaca. Tetapi karena kesalahan dalam kondisi, mereka tidak dibaca dari file yang terbuka dengan kata sandi, tetapi dari input standar (handle 0).

Selanjutnya, kita memasukkan 10 karakter, yang karakter-demi-karakter bertengkar dengan 1 dan dibandingkan dengan kata sandi.

gambar

Jadi, kita memasukkan dua baris, karakter yang menghasilkan hasil operasi XOR. Kita akan menemukan dua karakter, jika kita proxor, kita mendapatkan 1.

gambar

Ini adalah karakter A dan @. Sekarang masukkan dua baris dalam program, satu dari 10 karakter 'A', dan yang lainnya - '@'.

gambar

Kami menyerahkan bendera dan mendapatkan satu poin lagi.

gambar

Sampai jumpa di artikel berikut!

Kami berada di saluran telegram: saluran di Telegram .

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


All Articles