Battleware CTF Write-Up Forensics Weird
Selamlar, bu yazımda Battleware CTF yarışmasında sorulan Forensics
kategorisinden Weird
isimli sorunun çözümünü anlatacağım. Battleware CTF yarışması 8 Hafta sürecek bir yarışmadır. Bu soru 3.Haftada sorulan sorulardan biridir.
Soru dosyası : weird.pdf
Soruda weird
isminde bir pdf dosyası verilmiş. Dosya içeriğini incelediğimizde içerisinde 0 ve 1 bitlerinin farklı bir gösterim ile ifade edildiğini gördük.
Öncelikle bu gösterimi anlamamız gerekli. Her bir satırda “+” işaretiyle ayrılmış aynı bit değerine sahip bit dizileri mevcut. İlk satırdaki iki eleman ile örnekleyelim.
Örnek : 0x17+1x1 : 17 Adet 0 biti + 1 Adet 1 biti : 000000000000000001
Örnekte görüldüğü gibi dosya içindeki 25 satırda yer alan bu ifadeleri açmamız gerekli. Fakat bu işlemi manuel olarak yapmamız mümkün değil. Bu işlemi yapan python scriptimizi yazalım.
------------------------ solver.py ------------------------
file = open('weird.txt', 'r')
all_content = file.readlines()
counter1 = 0
while counter1 < len(all_content):
all_line = all_content[counter1]
all_line_elements = all_line.split("+")
result = ""
counter2 = 0
while counter2 < len(all_line_elements):
temp = all_line_elements[counter2].split("x")
bit_value = temp[0]
counter3 = 0
while counter3 < int(temp[1])-1:
temp[0] += bit_value
counter3 += 1
result += str(temp[0])
counter2 += 1
counter1 += 1
print(result)
file.close()
Scriptimize text dosyası vereceğimiz için weird.pdf
dosyasındaki içeriği weird.txt
dosyası içeriği olacak şekilde oluşturuyoruz. Scriptimizi çalıştırarak sonucu result.txt
dosyasına kaydedelim.
kali@kali:~/battleware-ctf/hafta3$ sudo python solver.py > result.txt
Sonucu kaydettiğimiz result.txt dosyasını text editorde açalım. Text editor üzerinde karakterleri küçültecek şekilde zoom out yaptığımızda aslında flag değerinin ascii art şeklinde 1 bitleriyle oluşturulduğunu görebiliriz.
Bazı bitler arasında boşluklar bulunmaktadır. Bunun sebebi orjinal dosyada da bu boşlukların bulunmasıdır. Text editordeki replace özelliği ile boşlukları silelim. Fakat flag değerini okumakta zorluk çekiyoruz. Flag değerini rahatlıkla okuyabilmek için text editordeki mark özelliğini kullanalım ve 1 bitlerini işaretleyelim.
Flag değerimiz belirgin bir şekilde ortaya çıkıyor.
Flag{NOTTHATWEIRDRIGHT?}
Yazımı okuduğunuz için teşekkürler, bir başka yazıda görüşmek dileğiyle..