Saturday, May 10, 2014

ASIS Quals 2014: Image (Trivia 50)

Challenge ini sebenarnya cukup mudah dan terlihat dari poin yang diberikan (50) :), hal yang membuat sedikit frustasi adalah karena flag yang di dapatkan tetap harus di "bruteforce" untuk mendapatkan flag yang tepat, dan ternyata ada hint: yang harus menghubungi panitia terkait flag yang tepat.

Seluruh challenge umumnya merupakan file yang di kompresi 2 kali 7z (xz) dan tar, kemudian untuk challenge ini didapatkan file sbb:







Bagi para gamer atau yang merupakan penggemar nintendo pasti akan langsung mengetahui bahwa ini adalah file game untuk nintendo, dan untuk OSX terdapat free emulator yang dapat di pergunakan (salah satunya Nestopia)


























Untuk mendapatkan flag-pun kita hanya perlu memainkan game tersebut pada mode "flag" dan apabila selesai stage 1 akan didapatkan flag





















Dan yang membuat cukup menghabiskan waktu adalah bahwa flag=8BIT_RULEZ dan bukan 8 BIT RULES. Enjoy the flag and some nostalgic moment :)

ASIS Quals 2014: Forensic 2 (Forensic 300)

Ini soal yang tidak berhasil diselesaikan tepat waktu, jadi kami tidak mendapat poin untuk ini. Karena tidak ada team yang berhasil mendapatkan poin, saya tuliskan informasinya di sini.
Dalam soal forensic ini, diberikan sebuah file Virtual Box Saved State. Volatility tidak mendukung format ini. Tidak ada informasi mengenai format file ini di web, jadi kita perlu membaca source code Virtual Box:
http://www.virtualbox.org/svn/vbox/trunk/src/VBox/VMM/VMMR3/SSM.cpp

Hasilnya adalah program dalam C  yang memakai liblzf:
https://www.dropbox.com/sh/vtsk0ji7pqhje42/AABY57lRqinlwZpo8t9zzGYka

gcc parsvbox.c lzf_d.c
./a.out vbox.img
Saya akan menaruh filenya di github setelah dicleanup (dan jika tidak sibuk, mungkin akan saya sumbangkan kodenya ke volatility).
File-file yang dihasilkan:
vbox.img-8237A.out
vbox.img-acpi.out
vbox.img-ahci.out
vbox.img-apic.out
vbox.img-ConsoleData.out
vbox.img-cpum.out
vbox.img-DisplayData.out
vbox.img-DisplayScreenshot.out
vbox.img-e1000.out
vbox.img-em.out
vbox.img-HGCM.out
vbox.img-HWACCM.out
vbox.img-i8254.out
vbox.img-i8259.out
vbox.img-ichac97.out
vbox.img-ioapic.out
vbox.img-mc146818.out
vbox.img-mm.out
vbox.img-pci.out
vbox.img-pckbd.out
vbox.img-pdm.out
vbox.img-pdmblkcache.out
vbox.img-pgm.out
vbox.img-piix3ide.out
vbox.img-rem.out
vbox.img-selm.out
vbox.img-SSM.out
vbox.img-tm.out
vbox.img-trpm.out
vbox.img-usb-ehci.out
vbox.img-usb-ohci.out
vbox.img-vga.out
vbox.img-vmm.out
vbox.img-VMMDev.out

Saya juga membuat parser screenshot (readss.c) dan mendapatkan gambar ini, tapi ternyata tidak membantu sama sekali.
out
Isi memori utama ada di: vbox.img-pgm.out, melihat isi memori dengan strings, didapatkan:
 
ssh-copy-id 'asis_agent@asis-ctf.ir -p 2014'
ssh-keygen ssh-copy-id 'asis_agent@asis-ctf.ir -p 2014'
ssh-copy-id 'asis_agent@asis-ctf.ir -p 2014'
ssh asis_agent@asis-ctf.ir -p 2014 ls -al 0bin.key

Key yang ditemukan adalah: 2 RSA Key, 1 EC key, 1 DSA key:

-----BEGIN RSA PRIVATE KEY-----
MIIEpQIBAAKCAQEA0fECvoo0bX8mIh8o9G4U56D/hJ0vHTru85Lt3VVPP/bGq3fH
JIpaF3zfcmdxCWJJarTV/CPnPW/7HtgPNypk78JKFXBwmsS0BuI25JD41X1bZQDL
vEi3mT0fcNFPkEDb9+pcS6LOKNXt/6hyvNv7rZF6EodSY4bpFa/IDPQMa9bOW/D0
CwXy8c7j7t4/EdnKg9xsj4eBKqWJZbS3bJZMNuWgZaVLgJNCgcSXlI67K8Y6bjqp
8YuPhqUQKaY/HpPqMtw9OptCjAKV3dbXEfjWWzceUXtdvMPqnAZ8flX95c4Vm6AV
Ai55t04tBolXv3bNQvhGSc5zaOH/RJFBypZaWwIDAQABAoIBAQCJpnZgLAm4CXgd
Q0T9DvhR7vPaJZ1wkuV9esbPKlIt5EXaw0wlHzl20P9I6Z3pwzHT7wGmsnu5gqSq
UouXZgqMUV11tSV/tJ09LjFDp/IfOHQmQ2FR8HPA25yzweli8cPIRzeAuBxoFexY
hj/EqI/Z+9qIL4XLj/dfqsOGCrXiNeNGJKOnLrhVjyDYmGCZ9bvOSZkIQF84lvWy
0rIwch3g46m7LMxuu+iU51SpBlWnwVwUpsGwlHDHRORdQ5HWPXM4z06vjuMCKMlE
p6dMhjF5+906gQzhlcPibb6w8d4u9BAZZl4GrtCg+9ZbXlDqHP+oo8ptG735ulTv
W1UjGTxRAoGBAOvjStt/eQbfJ1+a54eOJ0zEwPz1pXVk9GgxoZpppIIhl8/60H45
f75/g04pwbXxKEpr/SLPUEVyZDgkhkKbPdsUYuIB0rAK+Np28yzqIZmRkIpPD+Co
1G728ShF7EhVqHN4Y5Uebt+zJCLLlg0KT8SDnff0FJJM4cyEACd0GbjNAoGBAOPX
Y0axsGilQ2b4aUmCrrQam7VFTMY9pF3gmw+NZfkzwx3QZN85j/Bu4BWeiwSAaSFE
OOQKixDpSeneQfZUg2lvdYjXHcyJhd5ytziN39op7h9MB+d9UoaqVAhQ3Bnoo/Dp
rsVHLTDOMnTB+Gz2JqFibb7SXvWPJfc8uPfvkn/HAoGAR+VsIIC227BSaOJm5Tsf
oVdq1u7sMl7F26gc8Fp4qK0if2Kb/4z48ZAd7knt382UETLe4ag8eB5Ii5AeV9jH
Pqn1BZu2oq+Fb9jHf44RFaR3YKB+X2Q182hS0oqVXOq2wBMWjxHKi2Yngm942Zql
+2h+Ul/TkU/blqE5Bs1tNZUCgYEAlBqJnQWaP5vV4ZRulGtPdyGov7+JdX/SXXfI
M+bdN42PMs0pFPXM/CSGo2cIxOdX71jyhkHYPij3c/+W7zHmrl3WkBoNc8ydaYk2
UpvevGjvMgbxSGftgj4sG6+8M1dHYi30/qYS2RvgLod8HhAv8k4SOq1zLrpbmogt
UHW5zDcCgYEAwKlyLVAVLPej+JpdEs/N4LmFIBbApV3hMjInWLf+VLHH4yQcM8Wm
Pc1H7+0ZThbZmqPNoHiSfISzgi1XRs1kESYunCVBwuKvZcOvD8M2ZpwDWNXFXS9B
VtFekTFuN32zHzm5wq/mW+Mwk0waK52A5Ec7IMLxcpZDlp+LwpEVP34=
-----END RSA PRIVATE KEY-----

-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEArdgOcEXvJAm519M8kl78xeU5ubQl2G39xMXuM8FafA304YVz
B04xDromqH+UOwnjREVBIrOWgozS+ig1IOHWkb5txnSpkG/oWD3HjOQXc5bCSbKg
bSWawE9kqTp0/tiv/oEKviqphCnMl/L2I1CLvAeLIJMaeKUygqhPXCluXfFdbcfc
mbip56WM4AhGzWJfgw+XQHJAJA9PtJ2pyaVqf8x4n2WSaG4Pj5NTXiwwmvaWq3xk
d31P+G1rXwzNKU1kRDKKz4R6tDS34oEIUjYXtCfolRCpNMO20vxWKG64bgVtqcDV
phhk5mUiDh+4O2P5nzLnU0uebHRqSoUWEnaUKwIDAQABAoIBAQCATy5g+Y0G6VLM
lDFpy0f//C79/JPOSWh6+qfUdUqGs3phlbCP3MtilkyAIyHR7XtbYU4xAaH+G1iA
oHqOGYHYMlgtmN+qJp6zum11dMhGXShrYrb7uDye4jpmmSnPCzniu3WlZDGXxY4n
PIElEYcBMgQi99Aa6br9KqLgYAgAtzSHmBKw1CPlmn44vmf6WB+lGGBjPEfVTCnd
I15WmMmzkrkwAarHQr36JN2j2FfWM9WfHaflyP1Ok2tB5zuj+O5AGX9R65tEApvp
8Ts3flO7ZZVcN7XKhxHatvS44XAUVwpDLfmDPqSw8dHM1+gyMVPKg9zOOdsw0Y+v
LZLsyDD5AoGBANc+YZQCzJ4RK4Cuo8dGLTmS8THfiTDjaIytx2o5yzfiwZa2a1ep
HiK3On4+1gDrPvD8btg6dl9kjrh1Pp7SBsXH3OpszaRZcJEGZqL20EsL7qmNxQKQ
Ou5+VDmzAetmfSCyKDLJjxghHiCz0EqYuusHhw98WX4n7BX8DW5sQKwdAoGBAM7C
4r56l7PIo+liJfxIVpy9wCa1Kub9cAbU6YatK/V2fCREmG6OJemiGbdWkYrjTe02
EmVF8K3n6kTdvG7BA/nE8U/GQSt4KpOYVo3Z0KLwObU7CgkPNul2YYt//j4HepcP
W6SAPwQF6TxDuqGndTUJmQ8Ai8t1UccRooc96X7nAoGAffJWjpEEwgkx9145H0WE
+QducsxmLmEisA6PfSzMKKtas6GSNf0TUST96RlDh84fSkurYIL0+OSSToTsW2px
5BEKx3Fa8ywSngmszPa28vLMeBIokVNr6FmrVwfTu7aAyTz2IKGoRWo7gs80tjGg
Th5dfUY554PctRCDm3VkclECgYAjxR+JKJhaKBoDZFGCBdnGICXADJOxhqL865TD
Ee6K9safV6avabQxaTPdvgJL7usqYLJqBuGOlJK4+0uANbBEY8gDrx7TMGTdR/uh
as9ngPva2K3xx0oOtcZGZgxMGusgey21leJRBdzF6km9ccUbOd/a8pM8zb0qHWjq
0NE2fQKBgG+4XabYHqM0DznSHEHjTzrPzhC+Kpo5p02sJeVoVbqxqfNFyg0hAdR1
DcRIB81aewUYGLs6/TEKWETB32C4W0QFVxCGt3SuGnkehuWwczJ33sJwdGYaN/qU
PMPyvWr50EUHJwdFaF3mS7DtK2FSVL42CmilDRuUP3iCC9+NkJEB
-----END RSA PRIVATE KEY-----

-----BEGIN EC PRIVATE KEY-----
MHcCAQEEIC5RULOwvXYfcqZuuOBhI9TBSbRM0SEhwfUPxZsbTBi3oAoGCCqGSM49
AwEHoUQDQgAE9aWSuKzdge7XdJLSc2MzIklGeMJeTXqYhWvbW1kidli2S8g1/OLL
3+yt6YauLlUhqkRztqPNbA1xNKOlhyLX3Q==
-----END EC PRIVATE KEY-----



Semuanya tidak bisa digunakan untuk login ke server asis.

Ditemukan perintah untuk mendownload file secret.zip

wget asis-ctf.ir/56f4846d2dce6afafb35f25970b6f792/secret.zip

Tapi file ini terenkripsi. Saya stuck di sini. Berdasarkan screenshot, saya bertanya ke @factoreal di irc.asis.io, tapi ternyata tidak dijawab oleh factoreal.

Teori saya: seharusnya saya bisa login dengan ssh key yang diberikan, tapi sepertinya server mereka error. Saya terlalu lama berpikir sebelum mengirimkan email ke panitia, jadi waktu saya sudah sangat sedikit. Akhirnya saya mengirimkan email ke panitia dengan key yang saya temukan, saya mendapatkan balasan:

Hello,
great job, what you are looking on the server is this:
wyP733TE6HTlmmsjsTfwCufOanStL44kHvot/iJ7Agg=
but you are one step away from it.
thanks
_factoreal

Sayangnya di langkah ini saya stuck lagi. Setelah selesai event ASISnya dan bertanya ke IRC, ternyata orang lain (atdog) menemukan URL ini: 0bin.asis.io/paste/cXLEG4r+ (entah kenapa, saya melewatkan nURL ini walaupun sudah berkali-kali memfilter kata “asis”). Tanpa key, URL tersebut sia-sia:

asis-paste1

Jika digabung dengan key yang diberikan oleh factoreal, maka didapat teks password:

http://0bin.asis.io/paste/cXLEG4r+#wyP733TE6HTlmmsjsTfwCufOanStL44kHvot/iJ7Agg=

asis-pastebin

Dan setelah kita unzip secret.zip, flagnya adalah:

ASIS_dab27f4eae72aa966887d80aa4cd2f0a

ASIS Quals 2014: Toq toq (Forensic100)

Soal ini sebenarnya sangat mudah: diberikan sebuah file PCAP, carilah port-port untuk melakukan port-knocking agar dapat membuka URL flagnya. Ide mengenai port-knocking didapatkan dari nama challenge (toq toq) dan analisa paket itu sendiri.
 
Setelah mengetahui IP asal dan tujuan yang berhubungan dengan flag, kita bisa memasukkan filter ini di Wireshark:
(ip.dst == 87.107.123.4) or (ip.src == 87.107.123.4)
Filter tersebut akan menghilangkan semua sampah yang ada di file.

forensic-100

Pada file pcap yang sudah kita filter juga akan di temukan 5 buah akses ke web yang menunjukkan informasi terkait flag dengan port yang berbeda-beda

















Seharusnya tantangan ini bisa diselesaikan seperti ini:
Pastikan server hidup:
ping <IP>
Ketok pintunya
knock –v<IP> port1 port2 port3
lynx http://<IP>:target/

Tapi koneksi ke server sering lambat, jadi knocking perlu dilakukan pelan-pelan:
for i in port1 port2 port3; do knock –v $IP $i; sleep 1; done

Bahkan cara ini pun kadang tidak berhasil, jadi perlu dilakukan berkali-kali. Ini harus dilakukan 5 kali (first_part_of_the_flag, second_part_of_the_flag, …, last_part_of_the_flag). Setelah berkali-kali mencoba dan menghubungi panita terkait ketersediaan server maka nantinya akan didapatkan flag dalam 5 part.

ASIS Quals 2014 Write Up: Gas Stations (PPC 225)

Deskripsi tantangan:
We want to plan the placement of some gas stations, in such a way that cost of traveling between homes and nearest gas station be the least possible amount.
nc 87.107.124.13 9302
Kita diminta untuk menghubungi 87.107.124.13:9302 untuk memulai tantangan ini. Berikut adalah screenshot ketika kita terhubung ke sana.


Begitu kita mengirimkan "START" permainan dimulai. Kita diberikan jumlah gas station (k) dan 100 data point. Tujuannya adalah kita harus menentukan lokasi gas station yang optimal sehingga jarak menuju ke sana dari 100 data poin adalah minimum. Bayangkan kita diberikan koordinat (x,y) dari 100 rumah dan Operator Seluler ingin membangun sebanyak k BTS, dimana lokasi BTS harus dibangun sehingga sinyalnya bisa melayani pelanggan dengan optimal ?

Problem ini bisa diselesaikan dengan clustering data, yaitu mengelompokkan data menjadi k kelompok. Salah satu algoritma yang populer adalah K-Means. Jadi di tantangan ini saya memakai module python sklearn untuk memakai KMeans.

Berikut adalah snippet fungsi untuk mencari solusi optimal dari soal yang diberikan.



Berikut adalah screenshot ketika kita secara manual memasukkan solusi, sistem akan membalas dengan "Good" bila solusi optimal atau "Bad" bila tidak. Setelah itu sistem akan memberi soal yang baru dengan data point yang berbeda dan jumlah gas station yang berbeda juga. Kita diminta menyelesaikan semua soal yang diberikan secepat mungkin, jadi tidak mungkin dengan cara manual, harus dibuat script untuk melakukan itu.

Berikut adalah source code yang saya pakai untuk menyelesaikan tantangan ini.

Setelah script berjalan, mulai dari k=3 sampai k=9 (9 gas station), akhirnya kita berhasil mendapatkan flagnya "Congratulations! The flag is ASIS_a1db095f08bde77fbccc5b903a8329bb".