Capture the Flag (CTF) COMPFEST 11 adalah kompetisi keamanan jaringan dan informasi berskala nasional yang diselenggarakan secara online dan offline oleh Fakultas Ilmu Komputer Universitas Indonesia (Fasilkom UI). Konsep yang dibawa pada Capture the Flag kali ini adalah Jeopardy CTF pada babak penyisihan, serta Attack-Defense pada babak final. Konsep tersebut akan menguji kemampuan dan pengetahuan peserta dalam bidang web hacking, cryptography, digital forensic, reverse engineering, dan binary exploitation.

Resource dan writeup lainnya dapat dilihat di sini

๐Ÿ”— Cable News Network

image will be passed into Cable News Network Algorithm, can you figure it’s feature?

check this

Pembuat soal: Ariqqq

Diberikan file attachment berupa Image-file soal.png yang dengan tampilan sebagai berikut

preview-1

Selanjutnya, dilakukan static analysis untuk mengetahui informasi yang dimuat dari nilai pixel image. Adapun proses ini kami lakukan dengan bantuan module Python-PIL

$ python2
>>> from PIL import Image
>>> im = Image.open('soal.png')
>>> im.mode
'RGBA'
>>> len(set(im.getdata(0))
255
>>> len(set(im.getdata(1))
116
>>> len(set(im.getdata(2))
255
>>> set(im.getdata(3))
1

Sebagaimana terlihat, diketahui bahwa variansi nilai pixel pada green plane memiliki kecenderungan yang berbeda. Untuk membuktikan deduksi tersebut, kami lakukan ekstraksi nilai tuple pixel green plane pada instance Image yang lain. Hasilnya diperoleh representasi citra sebagai berikut

#!/usr/bin/env python2
from PIL import Image

im2 = Image.new('LA',(w,h))
im2.putdata(list(im.getdata(1)))
im2.show() 
preview-2

FLAG : COMPFEST11{pre_processing_convolutional_neural_network_yeay}

๐Ÿ”— Encang Maman belajar ngoding

Encang Maman belajar ngoding. Dia mengirim pesan untuk kalian. Dapatkah kalian membaca kode dari Encang Maman?

files here

Pembuat soal: FwP

Hint: 2 file (UTF-16; UTF-32) tersebut adalah 2 file yang ditulis dengan encoding tertentu, dengan penanda encoding yang dihapus

Diberikan dua buah file attachment berupa pesan1 dan pesan2. Apabila dilakukan analisa awal, tampak sekilas bahwa kedua file hanya memuat data gibberish saja. Akan tetapi merujuk pada hint yang diberikan, diketahui bahwa masing-masing file yang diberikan merupakan UTF-16 encoded & UTF-32 encoded text. Langsung saja dilakukan proses konversi sehingga diperoleh hasil sebagai berikut:

$ iconv -f UTF-16 -t UTF-8 pesan1 | strings
  COMPFEST11{p14Y1n6_

$ iconv -f UTF-32 -t UTF-8 pesan2 | strings
	wITH_un1C0D3_uWu}

FLAG : COMPFEST11{p14Y1n6_wITH_un1C0D3_uWu}

๐Ÿ”— File Separation

I split a file into 8 files. Can you assemble it?

sha256sum files:

  • b60ce2e740c5a06765517f839afcadc433fe5318b120acc65d505d1e537e91d5 5TJKUQMMHVSH6N26OVGYSEML7MR7XYMV

  • e481028895da1943756976a4c42982596106403532ada5d2d7aa22f2dbad205c 7UEIMXOSXHB7QMAK7ESUJFZ6W4S73L2Y

  • bf99b8b164759c799ca17c887fe36a25e6939812433a2624e6af45d1d330cd80 FUONSYBYZZFIZRO24CR7TUIJUOMMPWNL

  • e02502b6acf7a7ddf11bc04117b92b09f4086c7bfb4dc87c9a68a2063ca95fb0 L6MX2CYFKDEYXEZ5QWHHM4Q57H6WSJQK

  • 70c15c6e4ba56fc4d26fd21595ac2125208b9b71bcba83782c0090bb83fb0a38 LVF5LK4BNHVW2K5DBT4J7KIQJD4MQDQH

  • 13701a19d06ab1e8c521312d5e7a00de6dd0099cf7cd7e146eba1c61d289baed MXXRYR7KVHCQYQCCPTC4YTTZI4CVRHEB

  • a09368ce37801c5160337a1f3f9ffa8b7f97270b9fe2058a706789bd0e22c6bf O2KA5QQJO7SADZKP3REYQADUB7MR3CT6

  • 3402b69a92079f1f51d4a88dbfdad9c3b0eea27495c769d8c5a95eaede215304 YUAE3MNDTWG67BGF4BKXLFR2XNXWWGCV

Pembuat soal: FwP

P.S.: Format flag sesuai dengan soal (bukan rule)

Diberikan file attachment berupa ZIP archive yang memuat 8 buah potongan file sebagai berikut

$ ls -lhr
total 960K
-rwxr-xr-x+ 1 shouko None 119K Aug  4 06:29 YUAE3MNDTWG67BGF4BKXLFR2XNXWWGCV
-rwxr-xr-x+ 1 shouko None 119K Aug  4 06:29 O2KA5QQJO7SADZKP3REYQADUB7MR3CT6
-rwxr-xr-x+ 1 shouko None 119K Aug  4 06:29 MXXRYR7KVHCQYQCCPTC4YTTZI4CVRHEB
-rwxr-xr-x+ 1 shouko None 119K Aug  4 06:29 LVF5LK4BNHVW2K5DBT4J7KIQJD4MQDQH
-rwxr-xr-x+ 1 shouko None 119K Aug  4 06:29 L6MX2CYFKDEYXEZ5QWHHM4Q57H6WSJQK
-rwxr-xr-x+ 1 shouko None 119K Aug  4 06:29 FUONSYBYZZFIZRO24CR7TUIJUOMMPWNL
-rwxr-xr-x+ 1 shouko None 119K Aug  4 06:29 7UEIMXOSXHB7QMAK7ESUJFZ6W4S73L2Y
-rwxr-xr-x+ 1 shouko None 119K Aug  4 06:29 5TJKUQMMHVSH6N26OVGYSEML7MR7XYMV

Selanjutnya, sebagai acuan penelusuran awal dilakukan proses identifikasi dengan bantuan trid

$ trid *
TrID/32 - File Identifier v2.24 - (C) 2003-16 By M.Pontello
Definitions found:  9914
Analyzing...

File: 5TJKUQMMHVSH6N26OVGYSEML7MR7XYMV
       Unknown!
File: 7UEIMXOSXHB7QMAK7ESUJFZ6W4S73L2Y
       Unknown!
File: FUONSYBYZZFIZRO24CR7TUIJUOMMPWNL
 43.4% (.JPG) JFIF-EXIF JPEG Bitmap (5000/1/1)
File: L6MX2CYFKDEYXEZ5QWHHM4Q57H6WSJQK
       Unknown!
File: LVF5LK4BNHVW2K5DBT4J7KIQJD4MQDQH
       Unknown!
File: MXXRYR7KVHCQYQCCPTC4YTTZI4CVRHEB
       Unknown!
File: O2KA5QQJO7SADZKP3REYQADUB7MR3CT6
       Unknown!
File: YUAE3MNDTWG67BGF4BKXLFR2XNXWWGCV
       Unknown!

Adapun, dapat diketahui bahwa terdapat salah satu binary-file yang satisfiable dengan JPEG signature. Dari sini, Kami lakukan proses pengecekan terhadap EXIF-data sehingga diperoleh flag yang diminta

$ exiftool FUONSYBYZZFIZRO24CR7TUIJUOMMPWNL
..
..
..
Text Layer Name                 : COMFPEST11{l1 TTL3_t1R3D_hU H_9e153ed8}
Text Layer Text                 : COMFPEST11{l1 TTL3_t1R3D_hU H_9e153ed8}
Document Ancestors              : 70D11CC4C5B4D0B44B45BD1C9888DBEE
Warning                         : JPEG format error
Thumbnail Image                 : (Binary data 2139 bytes, use -b option to extract)

Untuk membuktikan flag yang diperoleh, dapat pula dilakukan proses permutasi untuk 7 buah potongan binary data, sedemikian hingga didapatkan hierarchy JPEG file yang valid. Adapun script yang digunakan ialah sebagai berikut

#!/usr/bin/env python2
from itertools import permutations
from PIL import Image
from glob import glob

def openFile(filename):
	return open(filename,'rb').read()

files = map(openFile, glob('*[!.jpg|.py]'))
head = openFile('FUONSYBYZZFIZRO24CR7TUIJUOMMPWNL.jpg')

for i,j in enumerate(permutations(files,7)):
	concat = head + ''.join(j)
	tmp = open('temp.jpg','wb').write(concat)
	try:
		im = Image.open('temp.jpg')
	except:
		continue
	open('{}.jpg'.format(i),'wb').write(concat)
$ python solve.py
$ ls | grep 'jpg'
4818.jpg
4819.jpg
4820.jpg
4821.jpg
4822.jpg
4823.jpg
temp.jpg

Hasilnya, ditemukan 6 buah JPEG file yang valid. Akan tetapi beberapa di antaranya memuat Data CHUNK yang tidak sesuai dengan tempatnya.Setelah dilakukan pengecekan, hierarchy file yang sesuai terdapat pada 4823.jpg.

preview-3

Akan tetapi, format flag yang didapatkan tidak sesuai, sehingga dilakukan penyesuaian format ke format COMPFEST11{%s}.

FLAG : COMPFEST11{l1TTL3_t1R3D_hUH_9e153ed8}