CHRSOW

Writeup I-Secure CTF 2016 รอบคัดเลือก

วันนี้จะมาเฉลยแต่ละข้อในการแข่งขันรอบคัดเลือก CTF I-SECURE 2016 นะครับ จะพยายามเฉลยให้มากที่สุดเท่าที่ทำ+จำได้ แต่เนื่องจาก ณ เวลาที่ผมเขียนบล็อกนี้ ก็ผ่านการแข่งมาหลายวัน เซิฟเวอร์ปิดไปเรียบร้อยแล้ว ดังนั้นเฉลยส่วนมากจะเป็นเรื่อง Reverse Engineering, Cryptography, Forensics เท่าที่ผมได้ดาวน์โหลดไฟล์เก็บไว้นะครับ ส่วนหัวข้ออื่น จะพูดถึงวิธีทำอย่างเดียวครับผม

Reverse Engineering 2 [10 points]

link download

โจทย์ให้ไฟล์ jar มา เราก็จะมา decompile กัน ผมเลือกใช้ tool ที่มีชื่อว่า jd-gui ซึ่งจะทำให้เราสามารถดู source code ของไฟล์ “.class” ได้ พอเอาไฟล์ที่โจทย์มา decompile ก็จะเจอ flag

Tictactoe [10 points]

link download

เล่นไปเรื่อยๆ เดี่ยวก็ชนะเอง ชนะแล้ว Flag จะออกมาให้เห็น

GGEZ [10 points]

เป็นข้อที่ต้อง brute force เพื่อให้ได้ flag มา

import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('128.199.124.15',7777))
while True:
	a,b = s.recv(1024),s.recv(1024)
	print a
	print b
	str = "!#$%&()+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghi_jklmnopqrstuv*wxyz{|}~"
	i=0
	try :
	 while True:
			s.send(str[i])
			boo = s.recv(1024)
			guest = s.recv(1024)
			if 'Boo' in boo:
				i= (i+1)%88
			else:
				print boo
				print guest
				pwd+=str[i]
				print 'Passwod now : '+pwd
				i=0
	except:
		print 'Password is '+pwd
		exit(0)

Look at the picture [10 points]

link download

ข้อนี้เป็นข้อแรกที่เรา submit กันครับ

$ strings xnyv.png

มี output ท้ายสุดเป็น

secret.txtUT
VGhlX0YxQGdfMXNfRUBzeV9NM3RoMGQ=
secret.txtUT

พอเดาได้ว่าข้อความระหว่าง secret.txtUT น่าจะเป็น encoded flag และจากการที่มีเครื่องหมาย = ลงท้าย ทำให้พอเดาได้ว่าน่าจะเป็น base64 ก็ทำการ decode base 64 จะได้ flag ออกมา

Look at the shell [30 points]

link download

ข้อนี้ผมไม่มั่นใจว่าทางผู้ตั้งโจทย์ตั้งใจให้ใช้วิธีนี้รึเปล่า เพราะดูแล้ววิธีที่ได้ Flag มานั้น ง่ายกว่าข้อที่แล้วที่เป็นข้อ 10 คะแนน ! แต่คะแนนข้อนี้ 30 คะแนน !!

[update] ทางผู้จัดงานแจ้งมาแล้วครับว่าข้อนี้ต้อสร้าง Ubuntu profile ขึ้นมา แล้วค่อยอ่านคำสั่งภายในจะเห็น flag ครับ

$ tar -zxvf memdump.tar.gz
$ strings memdump | grep Fl@g

หวังว่าเฉลยอันนี้พอจะมีประโยชน์บ้าง ใครมีความเห็นอะไร มีวิธีทำที่ต่างจากนี้ หรือวิธีของผมมีจุดบกพร่องตรงไหน คอมเมนต์กันเข้ามาได้นะครับผม