Showing posts with label hitbkul2014. Show all posts
Showing posts with label hitbkul2014. Show all posts

Sunday, October 26, 2014

HITBKUL 2014: Challenge 2

Dalam challenge ini diberikan sebuah file pcap. Isinya ada beberapa yang mengecoh, tapi sebagian besar adalah “PING”, seperti ini:

image

Setelah disadari bahwa ini adalah koordinat X, Y, Z, maka berikutnya kita perlu mengekstraknya. Sebenarnya tadinya berencana menggunakan scappy, tapi karena saya belum pernah memakainya, saya liat teksnya ternyata per paket ada baris baru, jadi saya menulis skrip singkat ini:

 

Setelah itu data diedit menggunakan fitur makro Emacs supaya masuk ke format wolfram. Format perintah koordinat wolfram sangat sederhana, hanya:

a = {{x0, y0, z0}, {x1, y1, z1}, … , {xn, yn, zn}}

Show[Graphics3D[Point /@ a]]

 

image

HITBKUL 2014: Challenge 3

Challenge 3 ini sifatnya menebak satu per satu karakter. Ketika melakukan koneksi ke server, kita akan diberi respon benar, jika karakter yang kita masukkan benar. Tapi respon server akan semakin lama  berbanding lurus dengan panjang string. Jadi kami menggunakan tebakan plus skrip. Jadi caranya, setiap kali kami merasa sudah menebak satu kata, skripnya langsung diupdate, tadinya variable correct ini kosong, dan ketika berhasil menebak ‘th’, kami langsung mencoba “the”, dst.

Di dalam source code, flag terakhir yg kami temukan adalah thelasteverhackintheboxconferenceheldinkualalumpurmalaysia, dan dengan mencoba manual, ternyata flag yang diminta adalah thelasteverhackintheboxconferenceheldinkualalumpurmalaysia2014

HITBKUL 2014: Daemon 2

Setelah berhasil menyelesaikan d4 (yang belum langsung terpaka di hari pertama), kami mencoba daemon d1 (yang ternyata mustahil diselesaikan karena penggunaan fungsi random yang tidak bisa diprediksi), dan daemon 2. Logika daemon 2 ini sangat sederhana:

image

Daemon 2 akan melakukan konek balik ke host kita ke sebuah port random yang tidak bisa diprediksi. Salah satu solusi untuk ini adalah menggunakan iptables, tapi sayangnya ini didisable oleh panitia.

Jadi akhirnya saya membuat sebuah skrip python yang melisten ke banyak socket sekaligus:

Karena batasan jumlah port yang bisa dibuka, skrip itu tidak akan 100% berhasil. Skrip ini dijalankan di satu console, sambil di console lain kita melakukan serangan:

for((i=0; i<100;i++)); do nc 192.168.10.105 31337; done

Dengan mengulangi 100x, dapat dipastikan kita menerima flag dari lawan.

HITBKUL 2014: Daemon 4

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

image

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:

image

Fungsi hashnya sama sekali tidak saya pelajari, berikut ini potongannya yang cukup ribet:

image

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: