Anda di halaman 1dari 9

Cryptography

Old Diary 100 Points


Diberikan kode yang digunakan untuk mengenkripsi, dan kode yang digunakan untuk
mencoba dekripsi namun gagal.
Untuk mendecipher menjadi text asli, kita perlu mereverse proses enkripsi (maupun
dekripsi gagal) yang dilakukan. Dalam melakukan ini, kita perlu mereverse proses yang
dilakukan pada teks, pertama sesuai algo dekripsi gagal yang diberikan, kemudian
mereverse sesuai algo enkripsi awal. Kita juga perlu membruteforce x yang digunakan
(0 <= x <= 128). Kode yang saya gunakan merupakan modifikasi pada method encrypt
dan decrypt yang diberikan:
string encrypt(string s, int x){
string encr = s;
int count = 0;
int len = 453;
char arr[454];
for (int i = 0; i < len; ++i) arr[i] = '\1';
arr[453] = '\0';
int pos = 0;
while (len > 0){
for (int i = 0; i < x; ++i) {
pos = (pos + 1) % 453;
while (arr[pos] != '\1') {
pos = (pos + 1) %453;
}
}
arr[pos] = encr[count++];
--len;
for (int i = 0; i < len-1; ++i) {
pos = (pos + 1) % 453;
while (arr[pos] != '\1') {
pos = (pos + 1) %453;
}
}
x++;
}
encr = "";
for (int i = 0; i < 453; ++i) {
encr += arr[i];
}
return encr;
}

Write Up CTF - NetSOS RISTEK Entrance Exam 2016


vesuvius

string decrypt(string s, int x){


int len = 453;
char arr[454];
arr[453] = '\0';
for (int i = 0; i < len; ++i) arr[i] = '\1';
int y = x + 453;
string decr = s;
int count = len-1;
arr[len-1] = decr[count--];
--len;
int pos = len;
while (len > 0){
y--;
for (int i = 0; i < y; ++i) {
pos = (pos - 1 + 453) %453;
while (arr[pos] != '\1') {
pos = (pos - 1 + 453) %453;
}
}
arr[pos] = decr[count--];
--len;
}
decr = "";
for (int i = 0; i < 453; ++i) {
decr += arr[i];
}
return decr;
}
int main() {
string str;
getline(cin, str);
for (int i = 0; i <= 128; ++i){
cout << "\n\nHAI\n----\n";
cout << encrypt(decrypt(str,i),i) << "\n";
}
}

Setelah output diinspeksi, akan terdapat sebuah paragraf yang merupakan suatu puisi.
Cari author dari puisi itu dengan melakukan searching di google.
Flag: flag{walt_whitman}

Write Up CTF - NetSOS RISTEK Entrance Exam 2016


vesuvius

Ciphertext First 125 Points


Diberikan ciphertext sebanyak 3 paragraf. Untuk mendecipher paragraf yang pertama,
lakukan substitusi pada tiap karakter hingga cocok dan mendapat pesan yang pas
(Simple substitution cipher). Untuk membantu, dapat melihat kata-kata pendek yang
dalam bahasa inggris sering digunakan. Dapat juga dibantu dengan frequency analysis
dari tiap karakter, maupun dari tiap 2 karakter bersebelahan dst.
Setelah berhasil, akan muncul pesan bahwa paragraf berikutnya perlu di decipher
dengan melakukan AES Decryption (Menggunakan bahasa seperti PHP maupun alat
online). Key yang diberikan sesuai dengan teks paragraf pertama yang telah di dekripsi.
I already gave it to you.
Setelah paragraf 2 berhasil di dekripsi, akan muncul lyric pada text beserta hint untuk
mendekripsi paragraf 3 menggunakan TripleDES. Key yang disinggung hint adalah
inuyasha (Setelah googling lyric yang diberikan, diketahui bahwa lyric tersebut
terdapat pada film inuyasha). Alat dekripsi dapat dicari online.
Flag terdapat pada paragraf 3 yang berhasil di dekripsi.

Flag: flag{simple_substitution_cipher}

Write Up CTF - NetSOS RISTEK Entrance Exam 2016


vesuvius

Miscellaneous
BONUS 1 Points
Diberikan flag: bonus_BONUS_80N002. Format pengumpulan flag: flag{flagnya_disini}.
Flag : flag{bonus_BONUS_80N002}

Labyrinth 50 Points
Diberikan file .zip yang mengandung banyak folder. Flag terkandung pada file dalam
salah satu folder. Karena format flag adalah flag{}, lakukan grep pada folder Labyrinth
secara rekursif untuk menemukan flag.
grep r flag .
Flag: flag{findIsYourFriend}

Write Up CTF - NetSOS RISTEK Entrance Exam 2016


vesuvius

Recon
Sphinx Challenge 100 Points
Website yang diberikan berisi tulisan WELCOME TO MY GAME. Hapus element splash
pada body untuk menemukan game aslinya. Dengan melakukan search google for image
dengan background pada website (url dapat dilihat dari stylesheet), dapat diketahui
bahwa game tersebut ada pada sebuah episode dalam sebuah anime. Password yang
diminta sama dengan password pada episode tersebut yaitu shibazaki. Masukkan
password pada web dan akan muncul flag.
Flag: flag{googling_is_your_most_valuable_skill}

Write Up CTF - NetSOS RISTEK Entrance Exam 2016


vesuvius

Reverse
Easiest Reverse Ever 50 Points
Jalankan misteri.class dengan java. Akan diminta input berupa angka dari 1 sampai 500.
Ikuti pola hingga mendapat angka yang benar. Sesuai dengan clue yang diberikan, cari
kata-kata yang bersesuaian pada file pdf yang diberikan. Kata-kata yang bersesuaian
secara
berurut
adalah
sometimes_Ipsum_classical.
Setelah
mencoba
flag{sometimes_Ipsum_classical}, akan muncul alert jawaban salah. Flag yang benar
adalah Ipsum dengan lower-case (ipsum).
Flag: flag{sometimes_ipsum_classical}

Ez Reverse 50 Points
Lakukan disassembly pada file executable (sesuai OS yang sedang dipakai). Untuk
mengetahui full-contents tiap section, gunakan option s
objdump s ezreverse.exe > ezreverse.out
Flag dapat ditemukan pada file ezreverse.out
Flag: flag{Strings_1S_useFUL}

KoraBoardGame 100 Points


Decompile file apk yang diberikan (bisa lewat decompiler online). Jalankan apk dengan
android emulator maupun dengan smartphone mu. Pada aplikasi akan diminta serial
number. Setelah dicari pada apk yang telah di decompile, serial terdapat pada
ristek\netsos\koraboardgame\MainActivity.java
Masukkan serial pada aplikasi dan akan muncul flag.

Flag: flag{apk_files_are_easy_t0_r3verz3}

Write Up CTF - NetSOS RISTEK Entrance Exam 2016


vesuvius

Steganography
The Hero 50 Points
Diberikan file dengan ekstensi .jpg. Setelah file di open dengan notepad, terdapat tulisan
"Bukan flag (jangan dibuka, nanti kena BSOD).pdf atau semiripnya. Buka file tersebut
dengan WinRAR, WinZIP, atau alat sejenisnya. Akan muncul file pdf dan didalamnya
terdapat flag yang dicari.

Flag: flag{S73gano9graphY_15_fuNnY}

Write Up CTF - NetSOS RISTEK Entrance Exam 2016


vesuvius

Web
Login Simulator 100 Points
Terdapat form login pada website yang diberikan. Dengan sekilas melakukan login, akan
terlihat query SQL yang dijalankan pada database. Dengan pengetahuan SQL Injection,
untuk meng-inject query, cukup ditambahkan tanda petik (). Masukkan ( OR 1=1 )
pada username atau sejenisnya (-- untuk mengganti sisa query menjadi comment). Akan
muncul perintah untuk login dengan username flag. Maka kali ini, input yang
diperlukan pada kolom username adalah (flag -- ). Flag akan muncul kemudian.

Flag: flag{__SQL-Injection_101_}

EDOM 200 Points


Pada website yang diberikan, setelah melihat source code, terdapat tulisan //flagnya
belom ada, masih ada 1337 edom lagi :(}); pada element script. Setelah melakukan
submission pada form, nilai pada tulisan berkurang 1 (dari 1337 menjadi 1336 dst.).
Untuk mendapatkan flag, kita perlu menghabiskan edom (1337 kali submit). Namun,
dari input form yang ada, terdapat petunjuk untuk mendapatkan halaman yang
diinginkan tanpa mengklik 1337 kali.
Setelah berbagai field input dicek, terlihat bahwa yang berpengaruh pada jumlah edom
adalah field input dengan attribute name=sq_cnt. Ubah value menjadi 0. Submit dan
flag akan muncul.

Flag: flag{akhirnya_ada_flag_,_udah_capek_belum_mz_mb?_:v}

Write Up CTF - NetSOS RISTEK Entrance Exam 2016


vesuvius

Keybreaker 300 Points


Terdapat hint bahwa semakin akurat password yang diinput, semakin lama system akan
merespon. Setelah inspeksi source code, dapat dilihat web menggunakan framework
angular.js. Script penggunaan framework tersebut terdapat pada app.js.
Dapat ditemukan bahwa app melakukan AJAX request (dengan framework angular.js)
pada URL http://www.adamjordan.96.lt/ctf/keybreaker/api.php?key=[key] dengan
parameter key mengandung password yang kita input pada web-app tersebut.
Untuk memudahkan request HTTP pada URL tersebut dan untuk mengetahui waktu
respons dari server, dapat menggunakan alat seperti Postman. Susun Postman
sedemikian sehingga URL yang dituju sama dan siap untuk di bruteforce.
Pengecekan sebuah string dapat ditebak algoritmanya. Biasanya dimulai dengan
pengecekan kesesuaian panjang string. Dapat dilihat bahwa pada sebuah string dengan
panjang 6, response time dari server naik sekitar 500 ms. (Untuk mencegah salah
penafsiran response time, dapat melakukan request dengan query yang sama 3 kali).
Setelah panjang string didapat, bruteforce satu per satu huruf dari paling depan sampai
huruf ke enam. Setiap huruf benar, response time naik sekitar 500 ms. Setelah selesai,
query yang benar menjadi nadroj. Flag akan muncul menggantikan status yang
sebelumnya bernilai WRONG

Flag: flag{brute_force_with_style}

Write Up CTF - NetSOS RISTEK Entrance Exam 2016


vesuvius

Anda mungkin juga menyukai