Tantangan daemon 4 ini sebenarnya seharusnya diberikan di hari kedua, tapi karena kesalahan panitia, binarynya sudah dimunculkan di hari pertama. Daemon ini pertama akan membaca file flag.txt ke memori
Program ini lalu menghasilkan data random 11 digit
Ketika client connect ke daemon ini, maka daemon ini akan meminta PIN, pin ini dicocokkan dengan data random melalui serangkaian fungsi hashing yang rumit, lalu dibandingkan dengan strncmp:
Fungsi hashnya sama sekali tidak saya pelajari, berikut ini potongannya yang cukup ribet:
Intinya solusinya begini: terlalu rumit untuk mempelajari dan mengimplementasikan ulang algoritma hashingnya, jadi kita gunakan saja fungsi strncmp untuk mencari flag yang benar, diberikan suatu waktu.
Saya membuat file ini, intinya adalah: fungsi time() dioverride agar mengembalikan waktu dari environment variable TIME, dan fungsi strncmp akan me-log kode yang benar ke file timemap.txt
Compile file ini:
gcc -Wall -fPIC -shared -o d4.so d4.c
Lalu di sebuah console, jalankan ini:
export TIME=waktumulai
for((i=1; i<4000;i++)); do echo $TIME; export TIME=$(expr ${TIME} + 1); LD_PRELOAD=./d4.so ./d4; done
Di console lain, saya memiliki file ini, yang sekedar mengirimkan 12345678901 ke server.
Skrip ini dijalankan dalam loop:
while true; do python brute4.py; done
Hasilnya: kita memiliki file timemap.txt, yang isinya adalah: pada time t, kode yang benar adalah n
Selanjutnya, kita bisa menggunakan data ini untuk menyerang siapapun:
No comments:
Post a Comment