Kategoriler
Siber Güvenlik

Bandit WriteUP – Part:2

Daha önce yarısına geldiğimiz sinir makine banditi çözmeye devam edelim.

Önceki çözümleri okumak için: https://caglar-celik.com/siber-guvenlik/bandit-writeup-part1/

bandit15

Bir sonraki seviyeye ait anahtar, mevcut seviyenin anahtarının, SSL şifrelemesi kullanılarak localhost’taki port 30001’e göndererek alınabilir.

Çözüm için kullanabileceğiniz komutlar:

ssh, telnet, nc, openssl, s_client, nmap

Yardımcı Kaynaklar

Çözüm:

Openssl ile localhosta bağlanıyorum. Bu bölüme giriş yaptığım anahtarı vererek sonraki seviyeye ulaşıyorum.

openssl s_client -quiet -connect localhost:30001

Flag: [vurgu color=”#dd3333″]cluFn7wTiGryunymYOu4RcffSxQluehd[/vurgu]

bandit16

Bir sonraki seviyeye ait anahtar, mevcut seviyenin anahtarının, SSL şifrelemesi kullanılarak localhost’taki port 30001’e göndererek alınabilir.

Çözüm için kullanabileceğiniz komutlar:

ssh, telnet, nc, openssl, s_client, nmap

Yardımcı Kaynaklar

Çözüm:

Sırf chmod olayını bilmediğim için acı çektiğim soru. Önce, hangi portta SSL mevcut bulmak için bir nmap taraması atıyorum. Ve aradığımı da buluyorum. 31790 portundan giriş yapabilirim.

nmap -sV -sT localhost -p 31000-32000

Daha sonra openssl ile bağlanmayı deniyorum ve beni bir key karşılıyor.

Aslında bütün olay bu kadardı. Daha sonra kendi makinenize bu keyi kopyalıyorsunuz ve bu key ile sonraki soruya bağlanmayı deniyorsunuz. Ben uzun süre makine içinde yazma izni olan yer aradım durdum, haliyle bulamadım ve sonra çark etti 🙂 Ancak o da hata verecektir. Bu durumda da key dosyanızın izinlerini değiştirmelisiniz.

chmod 600 private.key

ssh [email protected] -p 2220 -i private.key

Flag: [vurgu color=”#dd3333″]Karşı makineden aldığınız private key[/vurgu]

bandit17

Ana dizinde iki dosya yer alıyor. Bir sonraki seviyeye ait anahtar password.new içerisinde yer alıyor ve password.new ve password.old arasındaki farkı bulmanız gerekiyor.

Not: “byebye” mesajı ile karşılaşırsanız bu seviyeyi geçtiniz demektir. Ancak bu seviye, bandit19 ile alakalı.

Çözüm için kullanabileceğiniz komutlar:

cat, grep, ls, diff

Çözüm:

İki dosyayı karşılaştırıp farklı olan satırı bulmam gerekiyor. Bunun için diff kullanıyorum. Ortaya çıkan ilk satır benim anahtarım oluyor.

Flag: [vurgu color=”#dd3333″]kfBf3eYk5BPBRzwjqutbbfE887SVc5Yd[/vurgu]

bandit18

Bir sonraki seviyeye ait anahtar, ana dizindeki readme dosyası içerisinde. Ancak .bashrc dosyası, bir ssh bağlantısı yapıldığında oturumu kapatması için ayarlandı.

Çözüm için kullanabileceğiniz komutlar:

ssh,ls,cat

Çözüm:

Evet, giriş yaptığımda bağlantı kopuyor ancak ben de başka bir çözüm bulurum. SSH bağlantısı ile beraber readme dosyasının içini okurum.

Flag: [vurgu color=”#dd3333″]IueksS7Ubh8G3DCwVzrTd8rAVOwq3M5x[/vurgu]

bandit19

Bir sonraki seviyeye erişmek için, ana dizindeki setuid binary değerini kullanmalısınız. Nasıl kullanılacağını bulmak için argümanlar olmadan yürütün. Setuid ikilisini kullandıktan sonra, bu seviye için şifre  (/ etc / bandit_pass) bulunabilir.

Yardımcı Kaynaklar:

Çözüm:

bandit20-do isminde bir dosya var. Bu dosya çalıştırılabilir binary dosyası ancak erişmek için setuid değeri ile oynamam gerekiyor. Soru karşıma çıkana kadar ben de bilmiyordum ancak yardımcı kaynak ve internetteki diğer kaynaklara bakarak olayı anladım. Daha sonra soruda da verilen dosyayı setuid değeri olarak okutuyorum. Sonraki seviyenin anahtarı karşıma çıkıyor.

Flag: [vurgu color=”#dd3333″]GbKksEFF4yrVs6il55v6gwY5aVje5f0j[/vurgu]

bandit20

Ana dizindeki binary dosyası şunları yapıyor:

Localhostta belirtilen bağlantı noktası ile bağlantı kurar. Daha sonra bağlantıdan gelen metin satırını okur ve bunu önceki seviyenin anahtarı ile karşılaştırır. Eğer verilen anahtar doğru ise sonraki seviyeye ait anahtarı verir.

Çözüm için kullanabileceğiniz komutlar

ssh, nc, cat, bash, screen, tmux, Unix ‘job control’ (bg, fg, jobs, &, CTRL-Z, …)

Çözüm:

içeride suconnect isminde bir dosya var. ./suconnect dediğimde localhost üzerinde açılan bir porttan bağlanılması gerektiği ve diğer taraftan doğru anahtar gelirse yeni anahtarı vereceğini söylüyor. Ben de yeni bir SSH bağlantısı yapıp nc -l -p 12345 komutu ile 12345 portunu açıyorum. Önceki bağlantımdan ise ./suconnect 12345 yazarak bağlantıyı sağlıyorum. Yeni bağlantıya tekrar geçip önceki bölümün anahtarını gönderiyorum ve yeni anahtar karşıma çıkıyor. Kabul ediyorum biraz karışıktı. Ancak ekran görüntüleri ile daha anlaşılır olacak.

Flag: [vurgu color=”#dd3333″]gE269g2h3mw3pwgrj0Ha9Uoqen1c9DGr[/vurgu]

bandit21

Bir program, zamana bağlı iş zamanlayıcısı olan cron’dan düzenli aralıklarla otomatik olarak çalışıyor. Yapılandırma için /etc/cron.d/ adresine bakın ve hangi komutun yürütülmekte olduğunu görün.

Çözüm için kullanabileceğiniz komutlar

cron, crontab, crontab(5) (use “man 5 crontab” to access this)

Çözüm:

etc/cron.d dizinine gidiyorum ve içindekileri listelediğimde cronjob_bandit22 isminde bir dosya görüyorum. Onun da içini okuduğumda usr/bin dizininde cronjob_bandit22.sh isminde bir dosyaya yönlendiriyor. O dosyanın içini okuduğumda da /tmp dizininde t7O6lds9S0RqQh9aMcz6ShpAoZKF7fgv isminde bir dosyaya yönlendiriyor. E onu da okuduğumda anahtar karşımda.

Flag: [vurgu color=”#dd3333″]Yk7owGAcWjwMVRwrTesJEwB7WVOiILLI[/vurgu]

bandit22

Bir program, zamana bağlı iş zamanlayıcısı olan cron’dan düzenli aralıklarla otomatik olarak çalışıyor. Yapılandırma için /etc/cron.d/ adresine bakın ve hangi komutun yürütülmekte olduğunu görün.

Çözüm için kullanabileceğiniz komutlar

cron, crontab, crontab(5) (use “man 5 crontab” to access this)

Çözüm:

Yine etc/cron.d dizinine gidiyorum ve içindekileri listelediğimde cronjob_bandit23 isminde bir dosya görüyorum. Onun da içini okuduğumda usr/bin dizininde cronjob_bandit23.sh isminde bir dosyaya yönlendiriyor. Dosya içini okuduğumda bash scriptin neler yaptığını anlıyorum.

Scripti bir de çalıştırıp görmek istedim. $myname bandit22 olarak çıkıyor. (whoami komutu ile almıştık)Tmp içinde bir dosya oluşturuyor Tmp içinde bir dosya oluşturuyor  ve  “I am user bandit22” metnini md5 ile şifreleyerek o dosyanın adı olarak belirliyor.

Oluşan dosyayı okuduğumda bandit22’ye ait anahtarı alıyorum.E o zaman myname kısmı yerine bandit23 yazarsam onun anahtarına erişebilirim belki.

Flag: [vurgu color=”#dd3333″]jc1udXuA1tiHqjIsL8yaapX5XIAI6i0n[/vurgu]

Kategoriler
Siber Güvenlik

Bandit WriteUP – Part:1

Bandit WriteUP Part 2’yi de okumak isterseniz: https://caglar-celik.com/siber-guvenlik/bandit-writeup-part2/

Makine adresi: http://overthewire.org/wargames/bandit/

Terminal kullanmaya yönelik olan, bu makinede 34 aşama bulunuyor. Size terminal komutlarını öğretmek ve sinir bozucu hatalarda ne yapacağınızı öğretmek için oluşturulmuş. Biz çözerken oldukça eğlendik. Basit bir SSH bağlantısı ile başlıyoruz. Her bulduğumuz MD5 hashi, diğer SSH bağlantısının parolası oluyor. Takıldığınız yerlerde web sitesinden ip uçlarını okuyabilirsiniz, kullanabileceğiniz komutlara dair ipuçlarına erişebilirsiniz. “bandit0” ile ilk ssh bağlantımızı yaparak durumu kavrayalım.

bandit0

Amaç oyuna giriş yapmak. bandit.labs.overthewire.org adresine bandit0 kullanıcı adı ve bandit0 parolası ile giriş yapacağız. SSH portu 2220.

Çözüm için kullanabileceğiniz komutlar:

ssh

Yardımcı Kaynaklar

Çözüm:

ssh [email protected] -p 2220 komutundan sonra parola için bandit0 yazıyoruz ve makineye bağlanıyoruz. Sonrasında readme içerisindeki MD5 hashi bize bandit1 için giriş anahtarımızı veriyor.

Flag: [vurgu color=”#dd3333″]boJ9jbbUNNfktd78OOpsqOltutMc3MY1[/vurgu]

bandit1

Bir sonraki seviyeye geçmek için kullanacağınız anahtar – isimli dosyada bulunuyor.

Çözüm için kullanabileceğiniz komutlar:

ls, cd, cat, file, du, find

Yardımcı Kaynaklar

Çözüm:

Dosya ismi – (tire) olan bir dosya var. MD5 hashi de içinde. E şahane cat – der hemen dosya içine bakarım. Ama işte gelin görün ki bilgisayarlar o kadar da akıllı makineler değil. Siz tire işaretini kullandığınızda cat komutunun devamına bir parametre girmeniz bekleniyor. E madem öyle, ben de önceki dizine giderim oradan dosyayı okurum dedim. Başarılı da oldu.

Flag: [vurgu color=”#dd3333″]CV1DtqXWVFXTvM2F0k09SHz0YwRINYA9 [/vurgu]

bandit2

Bir sonraki seviyeye geçmek için kullanacağınız anahtar “spaces in this filename” isimli dosyada bulunuyor.

Çözüm için kullanabileceğiniz komutlar:

ls, cd, cat, file, du, find

Yardımcı Kaynaklar

Çözüm:

Bu seferki dosya isminde ise aralarda boşluk bulunuyor. Yani yine cat komutu ile pata küte okuyamıyoruz dosyayı. Onun yerine cat komutundan sonra TAB tuşuna basarak tamamlayabilirsiniz. Diğer yöntem ise her kelimeden sonra aralara ters slash(\) koymak.

Şu şekilde: cat spaces\ in\ this\ filename

 

Flag: [vurgu color=”#dd3333″]UmHadQclWmgdLOKQ3YNgjWxGoRMb5luK[/vurgu]

bandit3

Bir sonraki seviyeye geçmek için kullanacağınız anahtar inhere isimli dizinin içinde bulunuyor.

Çözüm için kullanabileceğiniz komutlar:

ls, cd, cat, file, du, find

Çözüm:

inhere dizininin içinde ls komutu yaptığımızda herhangi bir şey görünmüyor. Ancak ls -la komutu ile dizindeki gizli dosyalara da erişmek mümkün.

Flag: [vurgu color=”#dd3333″]pIwrPrtPN36QITSp3EQaw936yaFoFgAB[/vurgu]

bandit4

Bir sonraki seviyeye geçmek için kullanacağınız anahtar, okunabilir olan tek dosyada yer alıyor.

Çözüm için kullanabileceğiniz komutlar:

ls, cd, cat, file, du, find

Çözüm:

Yine gizli dosya… ls -la komutu ile dosyalara göz atıyorum. -file00 ile başlayan bir liste karşılıyor. Önceki dizine geçip file inhere/-file0* komutunu veriyorum. Bu sayede inhere dizini içinde file0 ismi ile başlayan tüm dosyaların dosya tipini görebiliyorum. E bize de okunabilir bir dosya var demişti soruda. O da görüldüğü üzere -file07. Flag onun içinde. İtiraf edeyim ki biz makineyi çözerken tüm dosyaların içini tek tek okuduk. Sonradan ya burada yüzlerce dosya olsaydı sorusu aklıma geldi ve alternatif olarak bu çözümü buldum.

Flag: [vurgu color=”#dd3333″]koReBOKuIDDepwhWk7jZC0RTdopnAYKh[/vurgu]

bandit5

Bir sonraki seviyeye geçmek için kullanacağınız anahtar inhere dizini içerisinde yer alıyor. Dosya execute edilemez, 1033 byte ve insanlar tarafından okunabilir.

Çözüm için kullanabileceğiniz komutlar:

ls, cd, cat, file, du, find

Çözüm:

Madem dosya boyutu 1033 byte, ben de dosya boyutuna göre arama yapabilirim. find -size 1033c komutu ile anahtara ulaşıyorum.

Flag: [vurgu color=”#dd3333″]DXjZPULLxYr17uwoI01bNLQbtFemEgo7[/vurgu]

bandit6

Bir sonraki seviyeye geçmek için kullanacağınız anahtar sunucuda bir yerde saklanıyor. Kullanıcı bandit7, grup bandit6 olan bir dosya ve boyutu 33 byte.

Çözüm için kullanabileceğiniz komutlar:

ls, cd, cat, file, du, find, grep

Çözüm:

Madem sunucuda her yerde olabilir diyor, ben de kök dizine gider ve işleme orada devam ederim (cd .. komutu). Daha sonra find komutu ile user, grup ve boyuta göre arama yapabilirim.

find -size 33c -user bandit7 -group bandit6

Oldukça karışık bir çıktı geliyor. Ancak erişim iznimiz olan tek bir dosya var. İçini okuduğumda yeni anahtarımı almış oluyorum.

./var/lib/dpkg/info/bandit7.password

Flag: [vurgu color=”#dd3333″]HKBPTKQnIay4Fw76bEy8PVxKEDQRKTzs[/vurgu]

 

bandit7

Bir sonraki seviyeye geçmek için kullanacağınız anahtar data.txt dosyasında millionth kelimesinin yanında yer alır.

Çözüm için kullanabileceğiniz komutlar:

grep, sort, uniq, strings, base64, tr, tar, gzip, bzip2, xxd

Çözüm:

Gayet basit. Madem millionth yanında yer alıyor ben de millionthnin bulunduğu satırı getiririm.

grep -r millionth

Flag: [vurgu color=”#dd3333″]cvX2JJa4CFALtqS87jk27qwqGhBM9plV[/vurgu]

 

bandit8

Bir sonraki seviyeye geçmek için kullanacağınız anahtar data.txt dosyasında saklanır ve kendini sadece bir defa tekrar eder.

Çözüm için kullanabileceğiniz komutlar:

grep, sort, uniq, strings, base64, tr, tar, gzip, bzip2, xxd

Yardımcı Kaynaklar

Çözüm:

Dosyayı okuyup tek tek bakacak olursanız durum facia. Elbette bunun da pratik bir yolu var.

cat data.txt | sort -n | uniq -c

Bu komut ile data.txt dosyasının içindekileri sort komutu ile sıralıyoruz, uniq komutu ile sayıyor ve yanına kaç tane olduğunu yazdırıyoruz. Zaten anahtar olmayan tüm veriler 10 kez tekrarlanmışken esas elemanımız 1 defa tekrarlanmış şekilde karşımıza çıkıyor.

Flag: [vurgu color=”#dd3333″]UsvVyFSfZZWbi6wgC7dAFyFuR6jQQUhR[/vurgu]

bandit9

Bir sonraki seviyeye geçmek için kullanacağınız anahtar data.txt içerisinde okunabilir formatta yer alıyor. “=” işaretinden sonrasına bakmanız yeterli.

Çözüm için kullanabileceğiniz komutlar:

grep, sort, uniq, strings, base64, tr, tar, gzip, bzip2, xxd

Çözüm:

Eşittir işaretinden sonrasını görmek için bir arama atmam yeterli oluyor. Ancak bu defa cat komutu kullanamıyorum. Çünkü binary formatında bir dosya ile karşı karşıyayım. Ben de strings komutu ile binary formatındaki dosyaları okuyabiliyorum.

strings data.txt | grep “=”
Flag: [vurgu color=”#dd3333″]truKLdjsbJ5g7yyJ2X2R0o3a5HQJFuLk[/vurgu]

 

bandit10

Bir sonraki seviyeye geçmek için kullanacağınız anahtar data.txt içerisinde base64 formatında.

Çözüm için kullanabileceğiniz komutlar:

grep, sort, uniq, strings, base64, tr, tar, gzip, bzip2, xxd

Çözüm:

E adam daha ne desin? Base64 demiş, Şu dosyanın içinde demiş.

Flag: [vurgu color=”#dd3333″]IFukwKGsFW8MOq3IRFqrxE1hxTNEbUPR[/vurgu]

 

bandit11

Bir sonraki seviyeye geçmek için kullanacağınız anahtar, tüm küçük harf (az) ve büyük harf (AZ) harflerinin 13 konumlu döndürüldüğü data.txt dosyasında saklanır.

Çözüm için kullanabileceğiniz komutlar:

grep, sort, uniq, strings, base64, tr, tar, gzip, bzip2, xxd

Çözüm:

Hevesimiz kırıldı. Sezar sorulur mu böyle tatlı tatlı terminalle oynarken? Herhangi bir sezar decode aracına gidin ve 13 harf kaydırın. Cevap ortada.

Flag: [vurgu color=”#dd3333″]5Te8Y4drgCRfCx8ugdwuEX8KFC6k2EUu[/vurgu]

 

bandit12

Bir sonraki seviyeye ait anahtar, art arda sıkıştırılmış bir dosyanın hexdump’ı olan data.txt dosyasında saklanır. Bu seviye için, / tmp altında mkdir kullanarak çalışabileceğiniz bir dizin oluşturmak faydalı olabilir. Örneğin: mkdir / tmp / myname123. Sonra cp ile dosyayı kopyalayın ve mv kullanarak yeniden adlandırın.

Çözüm için kullanabileceğiniz komutlar:

grep, sort, uniq, strings, base64, tr, tar, gzip, bzip2, xxd, mkdir, cp, mv, file

Çözüm:

Bizi sinir eden sorulardan. O kadar çok isim değiştirmemiz gerekti ki…

Öncelikle data.txt dosyasını tmp dizininde oluşturduğum zindik dizinine taşıdım. Daha sonrasında bu hexadecimal dosyayı tersine çevirmek için “xxd” isimli aracı kullandım.(Ben başka bir şekilde çevirdim ancak daha sonra araştırdığımda xxd’nin daha kolay olduğunu gördüm.) Daha sonra oluşan dosyanın türüne baktım. Ondan sonrası tam arap saçı. Dosya türüne göre dosya adını değiştirip sıkıştırılmış dosyadan çıkartıyoruz. Sonra tekrar dosya türüne bakıp başa sarıyoruz. Ta ki ASCII dosyasına erişene kadar.

Flag: [vurgu color=”#dd3333″]8ZjyCRiBWFYkneahHwxCv3wb2a1ORpYL[/vurgu]

bandit13

Bir sonraki seviyeye ait anahtar,  / etc / bandit_pass / bandit14 içinde saklanır ve sadece kullanıcı bandit14 tarafından okunabilir. Bu seviye için bir sonraki anahtarı alamazsınız, ancak bir sonraki seviyeye giriş yapmak için kullanılabilecek özel bir SSH anahtarı alırsınız.

Not: localhost , üzerinde çalıştığınız makineyi ifade eden bir ana bilgisayar adıdır.

Çözüm için kullanabileceğiniz komutlar:

ssh, telnet, nc, openssl, s_client, nmap

Çözüm:

Makineye baktığımda bir ssh dosyası görüyorum. İpucundan da yola çıkarak bandit14 için SSH bağlantısı yapıyorum.

Daha sonra bağlandığım makinede, soruda verilen dosyayı okuyorum ve cevaba ulaşıyorum. Hepsi bu.

 

Flag: [vurgu color=”#dd3333″]4wcYUJFw0k0XLShlDzztnTBHiqxU3b3e[/vurgu]

bandit14

Bir sonraki seviyeye ait anahtara erişmek için localhosttaki 30000’e bağlanıp bu bölümün parolasının girilmesi gerekiyor.

Çözüm için kullanabileceğiniz komutlar:

ssh, telnet, nc, openssl, s_client, nmap

Çözüm:

Zaten soruda verileni uygulayınca iş çözülüyor.

Flag: [vurgu color=”#dd3333″]BfMYroe26WYalil77FoDi9qh59eK5xNr[/vurgu]