STMCTF'19 Write-Up Misc Particle

2021, Feb 12    

Selamlar, bu yazımda STMCTF’19 yarışmasında sorulan Misc kategorisinden Particle isimli sorunun çözümünü anlatacağım.

Soru dosyası : flag1401.rar

Soruda flag1401 isminde bir rar dosyası verilmiş. Rar dosyasını açtıktan sonra karşımıza flag466.txt ve flag1400.rar dosyaları çıkıyor. flag466 isimli text dosyasını okuduğumuzda içinde e karakteri olduğunu görüyoruz. Peki flag1400.rar içinden ne çıkacak?

image-1

Rar dosyası içinden çıkanları anlayabilmek için flag1400.rar dosyasını da açıyoruz ve içinden sadece flag1399.rar dosyası çıktığını görüyoruz.

image-1

Rar dosyası ismindeki sayısal değerin her bir extract işleminden sonra birer birer azaldığını gördük. İç içe geçmiş rar dosyalarını tek tek extract etmek mantıklı bir yaklaşım olmayacaktır. Bu yüzden bir python scripti yazarak bütün rar dosyalarını extract edebiliriz.

import os

counter = 1401
name = "flag" + str(counter) + ".rar"

while name != "flag0.rar":

        os.system("unrar e " + name)
        os.system("rm -r " + name)
        counter = counter-1
        name = "flag" + str(counter) + ".rar"
        os.system("clear")

print("islem basarili :)")

Python scriptimizi çalıştırdığımızda tüm rar dosyaları extract edilmiş oldu. Karşımıza sıralı olarak 467 adet txt dosyası çıktı.

image-1

Text dosyalarının içine rastgele baktığımızda her bir dosya içinde sadece bir karakter olduğunu farkediyoruz.

image-1

Tüm bu dosyaların içeriğini sıralı olarak okuyacak bir python scripti yazalım.

import os

counter = 0
characters = ""

while counter != 467:

        file = open("flag" + str(counter) + ".txt", "r")
        temp = file.read()
        characters += temp[0]
        counter += 1
        file.close()

print(characters)

Tüm karakterleri sıralı olarak okuduğumuzda karşımıza uzun bir metin çıkıyor:

zeroonetwothreezeroonetwofourzerooneonefivezeroonezerothreezeroonetwofourzeroonezerosixzerooneseventhreezeroonezerothreezerosixzerozeroonefivesixzeroonezerosevenzeroonesixtwozerosixfourzeroonesixfourzerooneseventwozerofivesixzerofouronezeroonethreeonezeroonefivesevenzeroonesixfivezeroonethreesevenzeroonezerosixzerosixzerozeroonesixfivezeroonefivesixzeroonezerofourzeroonethreesevenzerooneonefivezerosixthreezeroonethreesevenzeroseventhreezerofiveonezeroonesevenfive

Metni incelediğimizde aslında rakamların yazı karşılıklarının olduğunu görüyoruz. Herhangi bir text editorün replace özelliği ile rakamlara çevirelim.

image-1

Sayısal görünüme çevirdikten sonra rakamları inceleyelim. Karakter setini ortaya çıkarttığımızda rakamlar arasında 8 ve 9 sayılarının hiç bulunmadığını farkettik : 01234567 Bu durumda bu sayı dizisi octal(sekizlik) formdadır.

0123012401150103012401060173010306001560107016206401640172056041013101570165013701060600165015601040137011506301370730510175

Octal formdan ascii formatına çevirmek için sayı dizisinde fazla olan 0(sıfır) rakamlarını da çıkartarak ayıralım.

123 124 115 103 124 106 173 103 060 156 107 162 064 164 172 056 041 131 157 165 137 106 060 165 156 104 137 115 063 137 073 051 175

Online bir converter’a(http://www.unit-conversion.info/texttools/octal/) verip ascii karşılığını görelim.

image-1

Flag değerimizi elde etmiş oluyoruz.

STMCTF{C0nGr4tz.!You_F0unD_M3_;)}

Yazımı okuduğunuz için teşekkürler, bir başka yazıda görüşmek dileğiyle.. :smiley: