[Imaginary CTF Round 13] – Prison Shell Who Did It?

Deskripsi

Greetings, Agent I. We have received news that [REDACTED] and her team have successfully identified the [REDACTED] criminal responsible for the [REDACTED] attack in [REDACTED] on [REDACTED]. Unfortunately, since their discovery regarding [REDACTED], we have not been able to contact or locate them. But, we do have access to [REDACTED]’s team’s secure server. Our intelligence leads us to believe that [REDACTED] hid the data in a file named culprit. You are our last hope of apprehending this [REDACTED] criminal for once and for all. Your mission, should you decide to accept it, is to find out who will be spending the rest of their life in a prison shell.

app.py:

Diberikan sebuah source code python yang akan berjalan ketika kita melakukan netcat, dan sesuai petunjuk soal kita harus membaca isi file culprit untuk mendapatkan flagnya. Inputan yang kita masukkan akan di-pass ke fungsi sh dan setiap katanya akan diperiksa di 3 bagian berikut:

PART1: word.startswith(“-“) = string input yang diawali dengan tanda dash (“-“) akan selalu bernilai TRUE

PART2: word.replace(“-“, “”).isalnum() = string input yang seluruh karakternya Alphanumerik akan bernilai TRUE. Jika terdapat simbol (kecuali dash) maka nilainya FALSE.

PART3: all(char.lower() in whitelist for char in word) = string input yang seluruh karakternya terdapat di variabel whitelist (‘p’, ‘r’, ‘i’, ‘m’, ‘@’, ‘c’, ‘u’, ‘l’, ‘t’, ‘ ‘, ‘.’) akan bernilai TRUE. Ada satu saja karakter string input di luar list tersebut, maka nilainya akan FALSE.

Antara PART1 dan PART2 dilakukan operasi and, yang artinya keduanya harus bernilai TRUE. Lalu antara (PART1 and PART2) dan PART3 operasinya adalah or, jadi cukup salah satu saja yang bernilai TRUE. Jika operasi-operasi tersebut hasilnya adalah FALSE, maka programnya akan di-return ke input dan kalian akan dikirim sebuah link tinyurl (jangan dibuka, itu rickroll :v). Tapi jika hasilnya TRUE, maka inputan kalian akan dijalankan sebagai command shell.

Nah supaya hasilnya bisa TRUE, ada 2 pilihan: yang pertama inputan kita harus diawali dengan (“-“) dan setelahnya karakter alphanumerik bebas (tidak harus karakter-karakter whitelist), atau pilihan kedua inputan kita tidak boleh diawali dengan (“-“), dan inputan setelahnya harus dari karakter-karakter whitelist. Nah karena kita harus melihat isi dari file culprit, berarti kita harus mencari command shell yang susunannya memenuhi 2 pilihan tersebut.

Setelah melakukan research sedikit, saya menemukan bahwa kita bisa melihat isi suatu file menggunakan command pr. Command ini akan me-review isi dari suatu file dan bisa menampilkannya dalam jumlah kolom tertentu. Command ini tidak diawali dash dan karakternya terdapat dalam whitelist (hanya “p” dan “r”), sehingga langsung saja kita coba masukkan inputan “pr culprit

yups, commandnya berhasil tembus dan flag didapatkan :D.

flag: ictf{lnt3rp01_th4nk5_u_4_uR_s3rvIc3}

referensi command : https://www.computerhope.com/unix/upr.htm

Leave a Reply

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