[Cyber Jawara 2020 Qualification] – Syscall

Pada soal ini, sesuai dengan deskripsi soal, kita diminta untuk melakukan syscall. Mari kita coba lihat isi netcat.

Program memberikan address untuk alamat flag yang akan berubah setiap saat nc di eksekusi. Kemudian, program akan meminta input nomor syscall, kemudian argument yang diperlukan untuk syscall yang ingin dipanggil. Namun, terdapat beberapa syscall yang di blacklist. Beberapa syscall yang di blacklist yang dapat ditemukan antara lain:

  • sys_execve
  • sys_open

Mungkin juga masih ada syscall lain yang dilarang namun tidak dicoba satu per satu. Lalu bagaimana caranya mengeluarkan isi flag? Kemudian kami mencoba membuat sebuah program C sederhana yang kemudian dilihat proses pemanggilan tiap fungsi atau syscall dengan menggunakan program ptrace.

Berikut hasil dari ptrace yang didapat:

Dari hasil output ptrace, dapat dilihat berbagai syscall yang digunakan. Satu syscall yang menarik perhatian adalah write.

Syscall write ini menerima 3 parameter, yakni:

Write

%rax%rdi%rsi%rdx
1 or 0x1unsigned int fdconst char __user * bufsize_t count

Argumen yang digunakan pada write adalah (1,addr ,size ). File descriptor ada 3 jenis:

  • 0 -> stdin
  • 1 -> stdout
  • 2 -> stderr

Sehingga dari informasi ini, kami bisa menggunakan syscall ini untuk mendapatkan flag. Jika dilihat, argumen kedua dari write harus berbentuk integer, sedangkan alamat yang muncul pada nc berbentuk hex, jadi harus dirubah dulu ke integer. Berikut script yang digunakan:

Berikut output dari program ketika dijalankan:

Flag = CJ2020{pemanasan_dulu_ya_agan_sekalian}

Leave a Reply

Your email address will not be published. Required fields are marked *