OverTheWire Bandit Çözümleri: Adım Adım Rehber (Türkçe)
Video
uzakta…
Walkthrough
Oyun Linki: overthewire.org/wargames/bandit/
Bandit Level 0 -> 1
Verilen bilgilere göre host:
bandit.labs.overthewire.org
port:2220
kullanıcı adı:bandit0
Parola:bandit0
. Bu bilgilere göre/home/bandit0/readme
adresindeki anahtarı bulalım.ssh ile bağlanalım:
ssh bandit0@bandit.labs.overthewire.org -p 2220
parolayı bize verdiği gibi
bandit0
şeklinde girelim. ssl uyarısına yes diyelim.bağlandıktan sonra cat ile içine bakalım:
cat /home/bandit0/readme
yeni seviyeye geçiş anahtarımız:
NH2SXQwcBdpmTEzi3bvBHMM9H66vVXjL
exit
ile oturumu sonlandıralım. çünküsu bandit
gibi oturum değiştirmeye izin vermiyor.
Bandit Level 1 -> 2
ssh ile bağlanalım:
ssh bandit1@bandit.labs.overthewire.org -p 2220
önceki seviyede bulduğumuz parolayı girelim:
NH2SXQwcBdpmTEzi3bvBHMM9H66vVXjL
ls
ile listeleyince adı-
olan bir dosya gördük.cat -
komutunu girdiğimizde çalışmayacak. bunun sebebi:https://stackoverflow.com/questions/42187323/how-to-open-a-dashed-filename-using-terminal
cat < -
kullanabiliriz.cat ./-
kullanabiliriz.
yeni parola:
rRGizSaX8Mk1RTb1CNQoXTcYZWU6lgzi
Bandit Level 2 -> 3
ssh ile bağlanalım:
ssh bandit2@bandit.labs.overthewire.org -p 2220
önceki seviyede bulduğumuz parolayı girelim:
rRGizSaX8Mk1RTb1CNQoXTcYZWU6lgzi
ls
ilespaces in this filename
adındaki dosyayı gördük.dosya adında boşluklar olduğu için iki seçeneğimiz var:
kaçış karakterinden faydalanırsak:
cat spaces\ in\ this\ filename
string olarak işlersek:
cat "spaces in this filename"
yeni parola:
aBZ0W5EmUfAf7kHTQeOwd8bauFJ2lAiG
Bandit Level 3 -> 4
ssh ile bağlanalım:
ssh bandit3@bandit.labs.overthewire.org -p 2220
önceki seviyede bulduğumuz parolayı girelim:
aBZ0W5EmUfAf7kHTQeOwd8bauFJ2lAiG
ls
ileinhere
adında bir dizine ulaştık vech
ile içine girdik.ls
ile listelediğimizde bir sonuç çıkmadı. emin olmak içinls -lah
ile tüm dosyaları gördük..hidden
isimli dosyayı cat ile açarsak:yeni parola:
2EW7BBsr6aMMoJ2HjW067dm8EgX26xNe
Bandit Level 4 -> 5
ssh ile bağlanalım:
ssh bandit4@bandit.labs.overthewire.org -p 2220
önceki seviyede bulduğumuz parolayı girelim:
2EW7BBsr6aMMoJ2HjW067dm8EgX26xNe
ls
ileinhere
adında bir dizine ulaştık vech
ile içine girdik.ls
ile birçok dosyanın olduğunu gördük.file
komutuyla dosyalar hakkında bilgi alabiliriz:1 2 3 4 5 6 7 8 9 10 11
bandit4@bandit:~/inhere$ file ./* ./-file00: data ./-file01: data ./-file02: data ./-file03: data ./-file04: data ./-file05: data ./-file06: data ./-file07: ASCII text ./-file08: data ./-file09: data
sadece
-file07
dosyasının ASCII text olduğunu gördük. bakmamız gereken bu dosya.cat ./-file07
ile dosyayı açarsak:yeni parola:
lrIWWI6bB37kxfiCQZqUdOIYfr6eEeqR
Bandit Level 5 -> 6
ssh ile bağlanalım:
ssh bandit5@bandit.labs.overthewire.org -p 2220
önceki seviyede bulduğumuz parolayı girelim:
lrIWWI6bB37kxfiCQZqUdOIYfr6eEeqR
ls
ileinhere
adında bir dizine ulaştık vech
ile içine girdik.ls
ile birçok dizinin bulunduğunu gördük.verdiği bilgilere göre ulaşmamız gereken dosya:
- human-readable
- 1033 bytes in size
- not executable
olmalıymış.
dosya boyutuna göre listelemede
du
komutu işe yarar.-a
parametresi verirseniz, dosyaları recursive olarak tarar. vermezseniz sadece o dizini tarar.-b
parametresi de her dosyanın byte olarak boyutunu verir.grep
ile çıkan sonucu dosya boyutu olan1033
ile filtrelersek:du -a -b | grep 1033
aradığımız dosyanın
1033 ./maybehere07/.file2
olduğunu görürüz.cat:
cat ./maybehere07/.file2
yeni parola:
P4L4vucdmLnm8I7Vl7jG1ApGSfjYKqJU
Bandit Level 6 -> 7
ssh ile bağlanalım:
ssh bandit6@bandit.labs.overthewire.org -p 2220
önceki seviyede bulduğumuz parolayı girelim:
P4L4vucdmLnm8I7Vl7jG1ApGSfjYKqJU
ls
ileinhere
adında bir dizine ulaştık vech
ile içine girdik.verdiği bilgilere göre ulaşmamız gereken dosya:
- owned by user bandit7
- owned by group bandit6
- 33 bytes in size
olmalıymış.
find
komutuyla/
araması yapabiliriz. böylece ulaşımımız olan her yerde dosyayı aramış oluruz.-type f
parametresi, sadece dosyaları görmemize yardımcı olacak.-user bandit7
arametresi, bandit7’ye ait olan dosyaları görmemize yardımcı olacak.-group bandit6
arametresi, bandit6 grubuna ait olan dosyaları görmemize yardımcı olacak.-size 33c
arametresi, 33 byte olan dosyaları görmemize yardımcı olacak.find / -type f -user bandit7 -group bandit6 -size 33c
çalıştırdığımızda bir sürü permission denied hatası aldık. hataları görmezden gelmek için:komutu söylenen şekilde düzenleyelim:
find / -type f -user bandit7 -group bandit6 -size 33c 2>/dev/null
aradığımız dosya:
/var/lib/dpkg/info/bandit7.password
cat:
cat /var/lib/dpkg/info/bandit7.password
yeni parola:
z7WtoNQU2XfjmMtWA8u5rN4vzqu4v99S
Bandit Level 7 -> 8
ssh ile bağlanalım:
ssh bandit7@bandit.labs.overthewire.org -p 2220
önceki seviyede bulduğumuz parolayı girelim:
z7WtoNQU2XfjmMtWA8u5rN4vzqu4v99S
cat ile
data.txt
dosyasını açtığımızda birçok kelime ve parola görünecek.bize
millionth
sözcüğünün hemen yanında olduğu bilgisi verilmiş. o zaman grep komutuyla birleştirirsek filtreleyebiliriz:cat data.txt | grep millionth
yeni parola:
TESKZC0XvTetK0S9xNwm25STk5iWrBvP
Bandit Level 8 -> 9
ssh ile bağlanalım:
ssh bandit8@bandit.labs.overthewire.org -p 2220
önceki seviyede bulduğumuz parolayı girelim:
TESKZC0XvTetK0S9xNwm25STk5iWrBvP
cat ile
data.txt
dosyasını açtığımızda birçok kelime ve parola görünecek. bizden istediği içerisinde tek sefer geçen sözcüğü bulmamız.sort komutuyla txt içindeki sözcükleri sıralayabiliriz:
sort data.txt
. ancak bu haliyle de yakalamamız zor olacak. uniq komutu aynı satırlara süzgeç uygulayabilir.-u
parametresine baktığımızda-u, --unique only print unique lines
istediğimiz sonuca ulaşabiliriz. bu iki komutu birleştirirsek:sort data.txt | uniq -u
yeni parola:
EN632PlfYiZbn3PhVK3XOGSlNInNE00t
Bandit Level 9 -> 10
ssh ile bağlanalım:
ssh bandit9@bandit.labs.overthewire.org -p 2220
önceki seviyede bulduğumuz parolayı girelim:
EN632PlfYiZbn3PhVK3XOGSlNInNE00t
cat ile
data.txt
dosyasını açtığımızda okuyamadığımız bir veriyle karşılaştık.açıklamalara göre aradığımız sözcüğün başında birkaç tane
=
varmış. bunun için veriyicat
ile değil destrings
ile açmalıyız. çünkü veri,file data.txt
ile bakarsakdata
türünde. iki tane eşittir işaretiyle filtrelersek:strings data.txt | grep ==
yeni parola:
G7w8LIi6J3kTb8A7j9LgrywtEUlyyp6s
Bandit Level 10 -> 11
ssh ile bağlanalım:
ssh bandit10@bandit.labs.overthewire.org -p 2220
önceki seviyede bulduğumuz parolayı girelim:
G7w8LIi6J3kTb8A7j9LgrywtEUlyyp6s
cat ile dosyayı açarsak:
VGhlIHBhc3N3b3JkIGlzIDZ6UGV6aUxkUjJSS05kTllGTmI2blZDS3pwaGxYSEJNCg==
bu bir
base64 encoded text
. ister online ister terminalden bunu decode edebiliriz:decode:
cat data.txt | base64 -d
ya dabase64 -d data.txt
yeni parola:
6zPeziLdR2RKNdNYFNb6nVCKzphlXHBM
Bandit Level 11 -> 12
ssh ile bağlanalım:
ssh bandit11@bandit.labs.overthewire.org -p 2220
önceki seviyede bulduğumuz parolayı girelim:
6zPeziLdR2RKNdNYFNb6nVCKzphlXHBM
cat ile dosyayı açarsak:
Gur cnffjbeq vf WIAOOSFzMjXXBC0KoSKBbJ8puQm5lIEi
ROT13 şifrelemesiyle karşı karşıyayız. ister online ister offline decode yapabiliriz:
terminalimize bunun için bir alias ekleyelim:
alias rot13="tr 'A-Za-z' 'N-ZA-Mn-za-m'"
şimdi yapmamız gereken bunları birleştirmek:
cat data.txt | rot13
yeni parola:
JVNBBFSmZwKKOP0XbFXOoW8chDz5yVRv
Bandit Level 12 -> 13
ssh ile bağlanalım:
ssh bandit12@bandit.labs.overthewire.org -p 2220
önceki seviyede bulduğumuz parolayı girelim:
JVNBBFSmZwKKOP0XbFXOoW8chDz5yVRv
hexdump bir data.txt dosyası vermiş. /tmp/ dizininde yeni bir dizin oluşturup oraya taşımamızı istemiş.
cd /tmp
vemktemp -d
ile yeni bir temp dizin oluşturalım. benim dizinim burası:/tmp/tmp.3jUaTPgTT4
. isim farklı olabilir.data.txt dosyasını buraya kopyalayalım ve adını data olarak değiştirelim:
cp ~/data.txt data
head data
ile içerisine göz atalım:xxd komutuyla
reverse hash dump
yapabiliyoruz. o zamancat data | xxd -r > dump
komutuyla dump adında bir dosyaya yazalım.file dump
ile özelliklerine baktığımızda:gzip compressed data, was "data2.bin"
data2.bin adında gzip ile sıkıştırılmış bir dosya olduğunu gördük.adını data.gz yapabiliriz:
mv dump dump.gz
sıkıştırılmış dosyayı çıkaralım:
gzip -d dump.gz
file dump
ile özelliklerine baktığımızda:bzip2 compressed data
olduğunu gördük. bu, bzip2 ile sıkıştırılmış bir dosya.adını data2.bz yapabiliriz:
mv dump dump.bz
sıkıştırılmış dosyayı çıkaralım:
bzip2 -d dump.bz
file dump
ile özelliklerine baktığımızda:gzip compressed data, was "data4.bin
data4.bin adında gzip ile sıkıştırılmış bir dosya olduğunu gördük.adını data.gz yapabiliriz:
mv dump dump.gz
sıkıştırılmış dosyayı çıkaralım:
gzip -d dump.gz
file dump
ile özelliklerine baktığımızda:POSIX tar archive (GNU)
bir tar arşivi olduğunu gördük.adını data.tar yapabiliriz:
mv dump dump.tar
sıkıştırılmış dosyayı çıkaralım ve arşivi silelim:
tar -xf dump.tar && rm dump.tar
file data5.bin
ile özelliklerine baktığımızda:POSIX tar archive (GNU)
bir tar arşivi olduğunu gördük.adını data.tar yapabiliriz:
mv data5.bin dump.tar
sıkıştırılmış dosyayı çıkaralım ve arşivi silelim:
tar -xf dump.tar && rm dump.tar
file data6.bin
ile özelliklerine baktığımızda:bzip2 compressed data
yine bu, bzip2 ile sıkıştırılmış bir dosya.adını data2.bz yapabiliriz:
mv data6.bin dump.bz
sıkıştırılmış dosyayı çıkaralım:
bzip2 -d dump.bz
file dump
ile özelliklerine baktığımızda:POSIX tar archive (GNU)
yine bir tar arşivi olduğunu gördük.adını data.tar yapabiliriz:
mv dump dump.tar
sıkıştırılmış dosyayı çıkaralım ve arşivi silelim:
tar -xf dump.tar && rm dump.tar
file data8.bin
ile özelliklerine baktığımızda:gzip compressed data, was "data9.bin"
data9.bin adında gzip ile sıkıştırılmış bir dosya olduğunu gördük.adını data.gz yapabiliriz:
mv data8.bin dump.gz
sıkıştırılmış dosyayı çıkaralım:
gzip -d dump.gz
file dump
ile özelliklerine baktığımızda:ASCII text
olduğunu görüyoruz.- cat:
cat dump
- cat:
yeni parola:
wbWdlBxEir4CaE8LaPhauuOo6pwRmrDw
Bandit Level 13 -> 14
ssh ile bağlanalım:
ssh bandit13@bandit.labs.overthewire.org -p 2220
önceki seviyede bulduğumuz parolayı girelim:
wbWdlBxEir4CaE8LaPhauuOo6pwRmrDw
ls
ilesshkey.private
adında bir dosya olduğunu gördük. bunu aktarmamız gerekecek:bağlantıyı
logout
veyaexit
ile kapatalım.dosyayı bu komutla lokale indirelim:
scp -P 2220 bandit13@bandit.labs.overthewire.org:sshkey.private .
cat:
cat sshkey.private
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
-----BEGIN RSA PRIVATE KEY----- MIIEpAIBAAKCAQEAxkkOE83W2cOT7IWhFc9aPaaQmQDdgzuXCv+ppZHa++buSkN+ gg0tcr7Fw8NLGa5+Uzec2rEg0WmeevB13AIoYp0MZyETq46t+jk9puNwZwIt9XgB ZufGtZEwWbFWw/vVLNwOXBe4UWStGRWzgPpEeSv5Tb1VjLZIBdGphTIK22Amz6Zb ThMsiMnyJafEwJ/T8PQO3myS91vUHEuoOMAzoUID4kN0MEZ3+XahyK0HJVq68KsV ObefXG1vvA3GAJ29kxJaqvRfgYnqZryWN7w3CHjNU4c/2Jkp+n8L0SnxaNA+WYA7 jiPyTF0is8uzMlYQ4l1Lzh/8/MpvhCQF8r22dwIDAQABAoIBAQC6dWBjhyEOzjeA J3j/RWmap9M5zfJ/wb2bfidNpwbB8rsJ4sZIDZQ7XuIh4LfygoAQSS+bBw3RXvzE pvJt3SmU8hIDuLsCjL1VnBY5pY7Bju8g8aR/3FyjyNAqx/TLfzlLYfOu7i9Jet67 xAh0tONG/u8FB5I3LAI2Vp6OviwvdWeC4nOxCthldpuPKNLA8rmMMVRTKQ+7T2VS nXmwYckKUcUgzoVSpiNZaS0zUDypdpy2+tRH3MQa5kqN1YKjvF8RC47woOYCktsD o3FFpGNFec9Taa3Msy+DfQQhHKZFKIL3bJDONtmrVvtYK40/yeU4aZ/HA2DQzwhe ol1AfiEhAoGBAOnVjosBkm7sblK+n4IEwPxs8sOmhPnTDUy5WGrpSCrXOmsVIBUf laL3ZGLx3xCIwtCnEucB9DvN2HZkupc/h6hTKUYLqXuyLD8njTrbRhLgbC9QrKrS M1F2fSTxVqPtZDlDMwjNR04xHA/fKh8bXXyTMqOHNJTHHNhbh3McdURjAoGBANkU 1hqfnw7+aXncJ9bjysr1ZWbqOE5Nd8AFgfwaKuGTTVX2NsUQnCMWdOp+wFak40JH PKWkJNdBG+ex0H9JNQsTK3X5PBMAS8AfX0GrKeuwKWA6erytVTqjOfLYcdp5+z9s 8DtVCxDuVsM+i4X8UqIGOlvGbtKEVokHPFXP1q/dAoGAcHg5YX7WEehCgCYTzpO+ xysX8ScM2qS6xuZ3MqUWAxUWkh7NGZvhe0sGy9iOdANzwKw7mUUFViaCMR/t54W1 GC83sOs3D7n5Mj8x3NdO8xFit7dT9a245TvaoYQ7KgmqpSg/ScKCw4c3eiLava+J 3btnJeSIU+8ZXq9XjPRpKwUCgYA7z6LiOQKxNeXH3qHXcnHok855maUj5fJNpPbY iDkyZ8ySF8GlcFsky8Yw6fWCqfG3zDrohJ5l9JmEsBh7SadkwsZhvecQcS9t4vby 9/8X4jS0P8ibfcKS4nBP+dT81kkkg5Z5MohXBORA7VWx+ACohcDEkprsQ+w32xeD qT1EvQKBgQDKm8ws2ByvSUVs9GjTilCajFqLJ0eVYzRPaY6f++Gv/UVfAPV4c+S0 kAWpXbv5tbkkzbS0eaLPTKgLzavXtQoTtKwrjpolHKIHUz6Wu+n4abfAIRFubOdN /+aLoRQ0yBDRbdXMsZN/jvY44eM+xRLdRVyMmdPtP8belRi2E2aEzA== -----END RSA PRIVATE KEY-----
indirdiğimiz dosya ile ssh’e bağlanalım. bunun için ssh
-i
parametresini kullanarak private key belirtebiliriz.ssh bandit14@bandit.labs.overthewire.org -p 2220 -i sshkey.private
komutunu girdiğimizde parola istiyor.hata mesajı:
Permissions 0640 for 'sshkey.private' are too open.
dosyayı sadece bize ait olarak ayarlayalım:
chmod 700 sshkey.private
dosya artık sadece bana ait:
ls -l
:
-rwx------ 1 fr0stb1rd fr0stb1rd 1679 May 12 15:05 sshkey.private
tekrar:
ssh bandit14@bandit.labs.overthewire.org -p 2220 -i sshkey.private
ve artık
bandit14@bandit
olarak bağlanabiliyoruz.bandit14 için anahtarı bulalım:
cat /etc/bandit_pass/bandit14
yeni parola:
fGrHPx402xGC7U7rXKDaxiWFTOiF0ENq
Bandit Level 14 -> 15
ister
sshkey.private
istersek de yeni edindiğimiz parola ile bağlanabiliriz.key ile:
ssh bandit14@bandit.labs.overthewire.org -p 2220 -i sshkey.private
ssh ile:
ssh bandit14@bandit.labs.overthewire.org -p 2220
önceki seviyede bulduğumuz parolayı girelim:
fGrHPx402xGC7U7rXKDaxiWFTOiF0ENq
burada istenen şey, 30000 portuna şu anki parolayı girerek yeni parolayı almamız. bakalım 30000 portunda ne varmış?
basit bir nmap taraması yapalım:
nmap localhost
:1 2 3 4 5 6 7 8 9 10 11 12 13 14
bandit14@bandit:~$ nmap localhost Starting Nmap 7.80 ( https://nmap.org ) at 2024-05-12 21:41 UTC Nmap scan report for localhost (127.0.0.1) Host is up (0.00015s latency). Not shown: 994 closed ports PORT STATE SERVICE 22/tcp open ssh 1111/tcp open lmsocialserver 1840/tcp open netopia-vo2 4321/tcp open rwhois 8000/tcp open http-alt 30000/tcp open ndmps Nmap done: 1 IP address (1 host up) scanned in 0.08 seconds
30000 portunda bir ndmps çalışıyormuş. netcat ile bu seviyenin parolasını gönderelim:
netcat localhost 30000 <<< "fGrHPx402xGC7U7rXKDaxiWFTOiF0ENq"
ya da
netcat localhost 30000 < /etc/bandit_pass/bandit14
ya da
netcat localhost 30000
yazıp parolayı yazabiliriz.
1 2
Correct! jN2kgmIXJ6fShzhT2avhotn4Zcka6tnt
yeni parola:
jN2kgmIXJ6fShzhT2avhotn4Zcka6tnt
Bandit Level 15 -> 16
ssh ile bağlanalım:
ssh bandit15@bandit.labs.overthewire.org -p 2220
önceki seviyede bulduğumuz parolayı girelim:
jN2kgmIXJ6fShzhT2avhotn4Zcka6tnt
OpenSSL, ağ üzerinde güvenli iletişim için bir kütüphanedir. HTTPS’te kullanılan Transport Layer Security (TLS) ve Secure Sockets Layer (SSL) şifreleme protokollerini destekliyor.
SSL/TLS kullanarak bir sunucuya bağlanacağız. bunun için openssl’in içinde olan s_client‘i kullanabiliriz.
tek komut ile:
echo jN2kgmIXJ6fShzhT2avhotn4Zcka6tnt | openssl s_client -ign_eof -connect localhost:30001
ya da:
cat /etc/bandit_pass/bandit15 | openssl s_client -ign_eof -connect localhost:30001
ya da önce:
openssl s_client -connect localhost:30001
ile bağlanıp ardındanjN2kgmIXJ6fShzhT2avhotn4Zcka6tnt
verisini gönderebiliriz.
yeni parola:
JQttfApK4SeyHwDlI9SXGR50qclOAil1
Bandit Level 16 -> 17
ssh ile bağlanalım:
ssh bandit16@bandit.labs.overthewire.org -p 2220
önceki seviyede bulduğumuz parolayı girelim:
JQttfApK4SeyHwDlI9SXGR50qclOAil1
31000 ve 32000 arasındaki portlardan birinde ssl açık olanları taramamızı istiyor. bunun için nmap taraması yapabiliriz.
-sV
parametresini de girerek servis taraması yapalım. bu parametre, her port için ssl olup olmadığını kontrol edecektir. haliyle biraz uzun sürebilir (~5dk).nmap:
nmap -sV localhost -p 31000-32000
1 2 3 4 5 6 7 8 9 10 11
bandit16@bandit:~$ nmap -sV localhost -p 31000-32000 Starting Nmap 7.80 ( https://nmap.org ) at 2024-05-13 13:09 UTC Nmap scan report for localhost (127.0.0.1) Host is up (0.00014s latency). Not shown: 996 closed ports PORT STATE SERVICE VERSION 31046/tcp open echo 31518/tcp open ssl/echo 31691/tcp open echo 31790/tcp open ssl/unknown 31960/tcp open echo
işimize yarayan portlar:
31518
ve31790
olacak. çünkü ssl servisi olarak görüyoruz.önce 31518 portunu deneyelim:
tek komut ile:
echo JQttfApK4SeyHwDlI9SXGR50qclOAil1 | openssl s_client -ign_eof -connect localhost:31518
ya da:
cat /etc/bandit_pass/bandit16 | openssl s_client -ign_eof -connect localhost:31518
ya da önce:
openssl s_client -connect localhost:30001
ile bağlanıp ardındanJQttfApK4SeyHwDlI9SXGR50qclOAil1
verisini gönderebiliriz.
31518
portunu denediğimizde aynı parolayı geri döndürdü.1 2 3 4
``` read R BLOCK JQttfApK4SeyHwDlI9SXGR50qclOAil1 ```
şimdi 31790 portunu deneyelim:
tek komut ile:
echo JQttfApK4SeyHwDlI9SXGR50qclOAil1 | openssl s_client -ign_eof -connect localhost:31790
ya da:
cat /etc/bandit_pass/bandit16 | openssl s_client -ign_eof -connect localhost:31790
ya da önce:
openssl s_client -connect localhost:31790
ile bağlanıp ardındanJQttfApK4SeyHwDlI9SXGR50qclOAil1
verisini gönderebiliriz.
31790
portunu denediğimizde bir rsa private key döndürdü.1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
``` -----BEGIN RSA PRIVATE KEY----- MIIEogIBAAKCAQEAvmOkuifmMg6HL2YPIOjon6iWfbp7c3jx34YkYWqUH57SUdyJ imZzeyGC0gtZPGujUSxiJSWI/oTqexh+cAMTSMlOJf7+BrJObArnxd9Y7YT2bRPQ Ja6Lzb558YW3FZl87ORiO+rW4LCDCNd2lUvLE/GL2GWyuKN0K5iCd5TbtJzEkQTu DSt2mcNn4rhAL+JFr56o4T6z8WWAW18BR6yGrMq7Q/kALHYW3OekePQAzL0VUYbW JGTi65CxbCnzc/w4+mqQyvmzpWtMAzJTzAzQxNbkR2MBGySxDLrjg0LWN6sK7wNX x0YVztz/zbIkPjfkU1jHS+9EbVNj+D1XFOJuaQIDAQABAoIBABagpxpM1aoLWfvD KHcj10nqcoBc4oE11aFYQwik7xfW+24pRNuDE6SFthOar69jp5RlLwD1NhPx3iBl J9nOM8OJ0VToum43UOS8YxF8WwhXriYGnc1sskbwpXOUDc9uX4+UESzH22P29ovd d8WErY0gPxun8pbJLmxkAtWNhpMvfe0050vk9TL5wqbu9AlbssgTcCXkMQnPw9nC YNN6DDP2lbcBrvgT9YCNL6C+ZKufD52yOQ9qOkwFTEQpjtF4uNtJom+asvlpmS8A vLY9r60wYSvmZhNqBUrj7lyCtXMIu1kkd4w7F77k+DjHoAXyxcUp1DGL51sOmama +TOWWgECgYEA8JtPxP0GRJ+IQkX262jM3dEIkza8ky5moIwUqYdsx0NxHgRRhORT 8c8hAuRBb2G82so8vUHk/fur85OEfc9TncnCY2crpoqsghifKLxrLgtT+qDpfZnx SatLdt8GfQ85yA7hnWWJ2MxF3NaeSDm75Lsm+tBbAiyc9P2jGRNtMSkCgYEAypHd HCctNi/FwjulhttFx/rHYKhLidZDFYeiE/v45bN4yFm8x7R/b0iE7KaszX+Exdvt SghaTdcG0Knyw1bpJVyusavPzpaJMjdJ6tcFhVAbAjm7enCIvGCSx+X3l5SiWg0A R57hJglezIiVjv3aGwHwvlZvtszK6zV6oXFAu0ECgYAbjo46T4hyP5tJi93V5HDi Ttiek7xRVxUl+iU7rWkGAXFpMLFteQEsRr7PJ/lemmEY5eTDAFMLy9FL2m9oQWCg R8VdwSk8r9FGLS+9aKcV5PI/WEKlwgXinB3OhYimtiG2Cg5JCqIZFHxD6MjEGOiu L8ktHMPvodBwNsSBULpG0QKBgBAplTfC1HOnWiMGOU3KPwYWt0O6CdTkmJOmL8Ni blh9elyZ9FsGxsgtRBXRsqXuz7wtsQAgLHxbdLq/ZJQ7YfzOKU4ZxEnabvXnvWkU YOdjHdSOoKvDQNWu6ucyLRAWFuISeXw9a/9p7ftpxm0TSgyvmfLF2MIAEwyzRqaM 77pBAoGAMmjmIJdjp+Ez8duyn3ieo36yrttF5NSsJLAbxFpdlc1gvtGCWW+9Cq0b dxviW8+TFVEBl1O4f7HVm6EpTscdDxU+bCXWkfjuRb7Dy9GOtt9JPsX8MBTakzh3 vBgsyi/sN3RqRBcGU40fOoZyfAMT8s1m/uYv52O6IgeuZ/ujbjY= -----END RSA PRIVATE KEY----- ```
yeni seviyeye bağlanmak için bu anahtarı kullanacağız. bunu
bandit17
isminde yeni bir dosyaya kaydedelim:nano
yu açalım- kopyaladığımız rsa private key’i yapıştıralım.
ctrl+x
ile çıkalımy
ile kaydedelimbandit17
yazarak isimlendirelim.- cat:
cat bandit17
yazarak oluşturduğumuz dosyayı kontrol edelim.
Bandit Level 17 -> 18
önceki seviyede edindiğimiz anahtarla bağlanalım:
ssh bandit17@bandit.labs.overthewire.org -p 2220 -i bandit17
bir hata mesajı alacağız:
It is required that your private key files are NOT accessible by others.
dosyayı sadece bize ait olarak ayarlayalım:
chmod 700 bandit17
- dosya artık sadece bana ait:
ls -l
:
-rwx------ 1 fr0stb1rd fr0stb1rd 1675 May 13 09:25 bandit17
- dosya artık sadece bana ait:
tekrar:
ssh bandit17@bandit.labs.overthewire.org -p 2220 -i bandit17
ve artık
bandit17@bandit
olarak bağlanabiliyoruz.
bandit17 için anahtarı bulalım:
cat /etc/bandit_pass/bandit17
bu seviyenin parolası:
VwOSWtCA7lRKkTfbr2IDh6awj9RNZM5e
yeni seviyeye geçmek için home dizinindeki
passwords.new
vepasswords.old
dosyalarında farklı olan satırı bulmamızı istemiş. ve parolanınpasswords.new
dosyasında olduğu bilgisini vermiş. bunun içindiff
aracını kullanabiliriz.diff:
diff passwords.new passwords.old
1 2 3 4
42c42 < hga5tuuCLF6fFzUpnagiMN8ssu9LFrdg --- > p6ggwdNHncnmCNxuAt0KtKVq185ZU7AW
burada diff aracında anlamamız gereken şey, ilk parametre ve ikinci parametrede ne girdiysek, sonuç da sağ ve sol olarak ikiye ayrılır. önce
passwords.new
parametresini verdiğim için<
olan her satırpasswords.new
dosyasında,>
olan her satır da ikinci parametrede yanipasswords.old
dosyasındadır.o halde aradığım anahtar:
hga5tuuCLF6fFzUpnagiMN8ssu9LFrdg
ayrıca
sort
ile de bu işlemi yapabiliriz:sort:
sort passwords.old passwords.new | uniq -u
1 2
hga5tuuCLF6fFzUpnagiMN8ssu9LFrdg p6ggwdNHncnmCNxuAt0KtKVq185ZU7AW
bu iki satır unique imiş. o zaman
passwords.new
dosyasında grep ile filtrelersem hangisinin olduğunu bulabilirim:cat passwords.new | grep p6ggwdNHncnmCNxuAt0KtKVq185ZU7AW
bir yanıt döndürmedi demek ki bulamadı.cat passwords.new | grep hga5tuuCLF6fFzUpnagiMN8ssu9LFrdg
ise buldu. keyi yine bulmuş olduk.
yeni parola:
hga5tuuCLF6fFzUpnagiMN8ssu9LFrdg
Bandit Level 18 -> 19
ssh ile bağlanalım:
ssh bandit18@bandit.labs.overthewire.org -p 2220
önceki seviyede bulduğumuz parolayı girelim:
hga5tuuCLF6fFzUpnagiMN8ssu9LFrdg
hemen server’dan attı:
1 2
Byebye ! Connection to bandit.labs.overthewire.org closed.
bilgilere göre home dizininde readme isimli dosya varmış. bu dosyaya bir bakalım.
ssh ile bağlandıktan sonra bir komut girebilirsiniz. örneğin ls komutu çalıştıralım:
ssh bandit18@bandit.labs.overthewire.org -p 2220 ls
ve bir
readme
dosyası gördük. cat ile içine bakalım.ssh bandit18@bandit.labs.overthewire.org -p 2220 cat readme
1 2 3 4 5 6 7 8 9 10 11 12
_ _ _ _ | |__ __ _ _ __ __| (_) |_ | '_ \ / _` | '_ \ / _` | | __| | |_) | (_| | | | | (_| | | |_ |_.__/ \__,_|_| |_|\__,_|_|\__| This is an OverTheWire game server. More information on http://www.overthewire.org/wargames bandit18@bandit.labs.overthewire.org's password: awhqfNnAbc1naukrpqDYcF95h7HoMTrC
bu işlemi yeni bir bash spawn ederek yapabiliriz. özellikle art arda komutlar gireceksek bu daha faydalı bir yöntemdir:
ssh bandit18@bandit.labs.overthewire.org -p 2220 /bin/bash
ssh bandit18@bandit.labs.overthewire.org -p 2220 -t /bin/sh
yeni parola:
awhqfNnAbc1naukrpqDYcF95h7HoMTrC
Bandit Level 19 -> 20
ssh ile bağlanalım:
ssh bandit19@bandit.labs.overthewire.org -p 2220
önceki seviyede bulduğumuz parolayı girelim:
awhqfNnAbc1naukrpqDYcF95h7HoMTrC
listeleyelim:
ls -l
-rwsr-x--- 1 bandit20 bandit19 14876 Oct 5 2023 bandit20-do
bu durumda dosyanın sahibi bandit20 ve grubu bandit19.
-rwsr-x---
bayraklarının anlamı, bandit19 kullanıcısı bu dosyayı çalıştırınca dosya sanki bandit20 çalıştırmış gibi davranabilmesidir. bunun ispatını./bandit20-do id
ile yapabiliriz:uid=11019(bandit19) gid=11019(bandit19) euid=11020(bandit20) groups=11019(bandit19)
euid=11020(bandit20)
programın bandit20 adına komutları çalıştıracağının kanıtıdır.bu dosyayı parametresiz olarak çalıştırmamızı istemiş.
./bandit20-do
1 2
Run a command as another user. Example: ./bandit20-do id
her seviyenin anahtarına o seviyedeyken ulaşabiliyorduk. o zaman bandit20’nin anahtarına da bu programı doğru kullanarak ulaşabiliriz.
önce /etc/bandit_pass dizinini kontrol edelim:
ls /etc/bandit_pass
:1 2 3 4
bandit0 bandit12 bandit16 bandit2 bandit23 bandit27 bandit30 bandit4 bandit8 bandit1 bandit13 bandit17 bandit20 bandit24 bandit28 bandit31 bandit5 bandit9 bandit10 bandit14 bandit18 bandit21 bandit25 bandit29 bandit32 bandit6 bandit11 bandit15 bandit19 bandit22 bandit26 bandit3 bandit33 bandit7
bu program olmadan anahtarı göstermeye çalışalım:
cat /etc/bandit_pass/bandit20
- erişim engellendi.
bize verilen programla deneyelim:
./bandit20-do cat /etc/bandit_pass/bandit20
yeni parola:
VxCazJaVykI6W36BkBU0mJTCM8rR95XT
Bandit Level 20 -> 21
ssh ile bağlanalım:
ssh bandit20@bandit.labs.overthewire.org -p 2220
önceki seviyede bulduğumuz parolayı girelim:
VxCazJaVykI6W36BkBU0mJTCM8rR95XT
listeleyelim:
ls -l
-rwsr-x--- 1 bandit21 bandit20 15600 Oct 5 2023 suconnect
bir server açıp, herhangi bir bağlantı oluşturulduğunda şu anki parolayı göndermemiz isteniyor. böylece şu anki parola uyuşursa yeni parolayı bize
suconnect
programı verecek.netcat ile bir server oluşturabiliriz. bağlantıda bir string göndermek için:
biraz düzenlersek:
echo -n 'VxCazJaVykI6W36BkBU0mJTCM8rR95XT' | nc -l -p 1234 &
- sonuna
&
koyduk ki arkaplanda çalışsın. 1234
portunu açtık.- echo’da
-n
parametresini verdik kinewline
karakterlerini işlemesin.
- sonuna
şimdi programa açtığımız portu parametre olarak gönderelim:
./suconnect 1234
:1 2 3
Read: VxCazJaVykI6W36BkBU0mJTCM8rR95XT Password matches, sending next password NvEJF7oVjkddltPSrdKEFOllh9V1IBcq
yeni parola:
NvEJF7oVjkddltPSrdKEFOllh9V1IBcq
Bandit Level 21 -> 22
ssh ile bağlanalım:
ssh bandit21@bandit.labs.overthewire.org -p 2220
önceki seviyede bulduğumuz parolayı girelim:
NvEJF7oVjkddltPSrdKEFOllh9V1IBcq
/etc/cron.d/
dizinine bakmamızı istemiş. ls:ls -lah /etc/cron.d/
-rw-r--r-- 1 root root 120 Oct 5 2023 cronjob_bandit22
dosyasına bakalım. cat:cat /etc/cron.d/cronjob_bandit22
1 2
@reboot bandit22 /usr/bin/cronjob_bandit22.sh &> /dev/null * * * * * bandit22 /usr/bin/cronjob_bandit22.sh &> /dev/null
bu cron, her dakika çalışıyor, sistemi yeniden başlatıyor ve bandit22 kullanıcısı olarak
/usr/bin/cronjob_bandit22.sh
dosyasını çalıştırıyor. bunu manipüle edebiliriz. cat:cat /usr/bin/cronjob_bandit22.sh
1 2 3
#!/bin/bash chmod 644 /tmp/t7O6lds9S0RqQh9aMcz6ShpAoZKF7fgv cat /etc/bandit_pass/bandit22 > /tmp/t7O6lds9S0RqQh9aMcz6ShpAoZKF7fgv
bu shell dosyası çalıştığında,
/tmp/
dizinindekit7O6lds9S0RqQh9aMcz6ShpAoZKF7fgv
dosyasına 644 bayrağını veriyor ve/etc/bandit_pass/bandit22
dosyasından okuduğu değeri/tmp/t7O6lds9S0RqQh9aMcz6ShpAoZKF7fgv
dosyasına yazıyor. o zaman bu dosyaya göz atarsak sonraki parolamızı bulmuş olacağız. cat:cat /tmp/t7O6lds9S0RqQh9aMcz6ShpAoZKF7fgv
yeni parola:
WdDozAdTM2z9DiFEQ2mGlwngMfj4EZff
Bandit Level 22 -> 23
ssh ile bağlanalım:
ssh bandit22@bandit.labs.overthewire.org -p 2220
önceki seviyede bulduğumuz parolayı girelim:
WdDozAdTM2z9DiFEQ2mGlwngMfj4EZff
/etc/cron.d/
dizinine bakmamızı istemiş. ls:ls -lah /etc/cron.d/
-rw-r--r-- 1 root root 122 Oct 5 2023 cronjob_bandit23
dosyasına bakalım. cat:cat /etc/cron.d/cronjob_bandit23
1 2
@reboot bandit23 /usr/bin/cronjob_bandit23.sh &> /dev/null * * * * * bandit23 /usr/bin/cronjob_bandit23.sh &> /dev/null
bu cron, her dakika çalışıyor, sistemi yeniden başlatıyor ve bandit23 kullanıcısı olarak
/usr/bin/cronjob_bandit23.sh
dosyasını çalıştırıyor. bunu manipüle edebiliriz. cat:cat /usr/bin/cronjob_bandit23.sh
1 2 3 4 5 6 7 8
!/bin/bash myname=$(whoami) mytarget=$(echo I am user $myname | md5sum | cut -d ' ' -f 1) echo "Copying passwordfile /etc/bandit_pass/$myname to /tmp/$mytarget" cat /etc/bandit_pass/$myname > /tmp/$mytarget
kodu incelersek, whoami ile çalışacak değer
bandit23
olacaktır. çünkü bu dosyayı çalıştıran kişi crontab’de bandit23 olarak ayarlanmış. o haldemyname
değeribandit23
olacaktır.mytarget
değerinin ne döndüreceğini terminalden çalıştırarak bulabiliriz:echo I am user bandit23 | md5sum | cut -d ' ' -f 1
bu komut,
I am user bandit23
tümcesini md5 ile hash’leyip sondaki gereksiz karakterleri kaldırıyor ve echo ile yazıyor.
bu komut
8ca319486bfbbc3663ea0fbe81326349
değerini döndürdü. o haldemytarget
değeri8ca319486bfbbc3663ea0fbe81326349
olacaktır.cat /etc/bandit_pass/$myname > /tmp/$mytarget
burada ise/etc/bandit_pass/bandit23
değerinin/tmp/8ca319486bfbbc3663ea0fbe81326349
dosyasına yazıldığını anlıyoruz. o halde cat:cat /tmp/8ca319486bfbbc3663ea0fbe81326349
yeni parola:
QYw0Y2aiA672PsMmh9puTQuhoz8SyR2G
Bandit Level 23 -> 24
ssh ile bağlanalım:
ssh bandit23@bandit.labs.overthewire.org -p 2220
önceki seviyede bulduğumuz parolayı girelim:
QYw0Y2aiA672PsMmh9puTQuhoz8SyR2G
/etc/cron.d/
dizinine bakmamızı istemiş. ls:ls -lah /etc/cron.d/
-rw-r--r-- 1 root root 120 Oct 5 2023 cronjob_bandit24
dosyasına bakalım. cat:cat /etc/cron.d/cronjob_bandit24
1 2
@reboot bandit24 /usr/bin/cronjob_bandit24.sh &> /dev/null * * * * * bandit24 /usr/bin/cronjob_bandit24.sh &> /dev/null
bu cron, her dakika çalışıyor, sistemi yeniden başlatıyor ve bandit24 kullanıcısı olarak
/usr/bin/cronjob_bandit24.sh
dosyasını çalıştırıyor. bunu manipüle edebiliriz. cat:cat /usr/bin/cronjob_bandit24.sh
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
#!/bin/bash myname=$(whoami) cd /var/spool/$myname/foo echo "Executing and deleting all scripts in /var/spool/$myname/foo:" for i in * .*; do if [ "$i" != "." -a "$i" != ".." ]; then echo "Handling $i" owner="$(stat --format "%U" ./$i)" if [ "${owner}" = "bandit23" ]; then timeout -s 9 60 ./$i fi rm -f ./$i fi done
bu betik her çalıştığında (yani her dakikada bir)
$myname
değişkeninebandit24
değeri otomatik atandığı için/var/spool/bandit24/foo/
dizinindeki tüm dosyaları önce çalıştırıp sonra siliyor:ilk kontrol satırı:
if [ "$i" != "." -a "$i" != ".." ];
dizin veya üst dizin söz konusuysa silmiyor.ikinci kontrol satırı:
if [ "${owner}" = "bandit23" ]; then
dosyanın sahibibandit23
ise siliyor yoksa silmiyor.şu anda bandit23 olduğumuz için bizim yazacağımız scripti silecektir.
o halde bir script yazalım ve bu scripti
/var/spool/bandit24/foo/
dizinine taşıyalım. her seviyede o seviyenin kullanıcısının erişimiyle parolayı bulabiliyorduk. o zaman bu konuma yazacağımız script de bandit24 kullanıcısı tarafından çalıştırılacak.öncelikle
/tmp/
dizinine gidelim. burada rahatça çalışabiliriz:mktemp -d
vecd /tmp/tmp.7eLTwOoNAm
diyerek çalışma dizinimize gidelim.nano
text editörünü açalım. içerisine basit bir script yazacağım. istediğimiz dosya:/etc/bandit_pass/bandit24
. o zaman bunu şu anki konuma kopyalayan basit bir script yazıyorum:1 2
#!/bin/bash cp /etc/bandit_pass/bandit24 /tmp/tmp.7eLTwOoNAm/bandit24
çıkış yapıp
virus.sh
dosya ismiyle kaydediyoruz. siz istediğiniz isimle kaydedebilirsiniz. dosyayı cat ile açıp kontrol etmeyi unutmayın.oluşturduğumuz dizine (
/tmp/tmp.7eLTwOoNAm/bandit24
) herkesin ulaşabilmesi, yazabilmesi ve çalıştırabilmesi gerekiyor. bunun içinchmod 777 .
yapalım vels -la
ile tekrar kontrol edelim.virus.sh dosyasına da çalıştırılabilir (executable) bayrağını ekleyelim:
chmod 777 ./virus.sh
cp ./virus.sh /var/spool/bandit24/foo/virus.sh
ile kopyalayalım ve arada birls
komutunu çalıştıralım ki dosya geldiğinde haberimiz olsun.maksimum 60 saniye sonra
bandit24
belirecek. ancak bir sorun var:
dosya izinleriyle beraber kopyalanmış. bunu aşmamız gerekecek.
cp komutuyla dosya izinleri olmadan kopyalamanın yolunu bulmalıyız.
- virus.sh dosyasını şu şekilde düzenlersek:
1 2
#!/bin/bash cp --no-preserve=mode,ownership /etc/bandit_pass/bandit24 /tmp/tmp.7eLTwOoNAm/bandit24
ve bir dakika sonra, cat:
cat bandit24
ta daa.parola:
VAfGXJ1PBSsPSnvsjI8p759leLZ9GGar
ayrıca cp ile değil de
cat
ile de yapabiliriz.bunun için şu an varolduğumuz dizinde pass24 adında bir dosya oluşturalım:
touch pass24
pass24 dosyasına tüm izinleri verelim ki bandit24 kullanıcısı içine yazabilsin:
chmod 777 pass24
oluşturduğumuz dizine (
/tmp/tmp.7eLTwOoNAm/bandit24
) herkesin ulaşabilmesi, yazabilmesi ve çalıştırabilmesi gerekiyor. bunun içinchmod 777 .
yapalım vels -la
ile tekrar kontrol edelim.virus.sh dosyasının içeriğini şu şekilde değiştirelim:
1 2
#!/bin/bash cat /etc/bandit_pass/bandit24 > /tmp/tmp.7eLTwOoNAm/pass24
bu işlem, cat ile dosyayı açıp okuyacak ve
/tmp/tmp.7eLTwOoNAm/pass24
adresindeki oluşturduğumuz dosyanın içine yazacak.cp ./virus.sh /var/spool/bandit24/foo/virus.sh
ile kopyalayalım ve arada birls -la
komutunu çalıştıralım kipass24
dosyasının boyutu değiştiğinde haberimiz olsun.ve parolayı ele geçirdik.
yeni parola:
VAfGXJ1PBSsPSnvsjI8p759leLZ9GGar
Bandit Level 24 -> 25
ssh ile bağlanalım:
ssh bandit24@bandit.labs.overthewire.org -p 2220
önceki seviyede bulduğumuz parolayı girelim:
VAfGXJ1PBSsPSnvsjI8p759leLZ9GGar
bizden istediği 30002 portuna 0000-9999 arasındaki tüm pinleri denememiz. bunu yaparken örnek format şu şekilde olmalıymış:
VAfGXJ1PBSsPSnvsjI8p759leLZ9GGar 0000
VAfGXJ1PBSsPSnvsjI8p759leLZ9GGar 0001
…
VAfGXJ1PBSsPSnvsjI8p759leLZ9GGar 9999
tüm olasılıkları denemek için öncelikle bir tanesini deneyip çıktı almayı deneyelim.
mktemp -d
ile yeni bir çalışma ortamı oluşturalım ve içine girelim:cd /tmp/tmp.qUkib7SF1N
bunun için bir script yazabiliriz:
1 2 3 4 5
#!/bin/bash for i in {0000..9999} do echo "VAfGXJ1PBSsPSnvsjI8p759leLZ9GGar $i" >> possible.txt done
bu script, 0000 ile 9999 arasında dönecek ve
possible.txt
dosyasına yazacak.nano ile yazdığımız betiği
write.sh
olarak kaydedelim.chmod +x write.sh
ile çalıştırma bayrağı ekleyelim.şimdi bu dosyayı netcat kullanarak 30002 portuna gönderebiliriz.
cat possible.txt | nc localhost 30002 > sonuc.txt &
sonuc.txt dosyasına netcat return değerini yazacak.
sonuna
&
koyduk ki arkaplanda çalışsın.arada bir
ls -l
yaparak sonuc.txt dosyasının boyutunu kontrol edebiliriz. dosya boyutu sabit kalıyorsa işlem tamamlanmış demektir.
- bu şekilde gönderince sunucu çökebiliyor. tıpkı fotoğraftaki gibi. bu yüzden işlemi ikiye ayıralım.
işlemi ikiye ayırarak deneyelim.
ilk script 0000-5555 arasını pos1.txt dosyasına yazsın. bunun için nano ile pos1.sh dosyasını hazırlayalım.
1 2 3 4 5
#!/bin/bash for i in {0000..5555} do echo "VAfGXJ1PBSsPSnvsjI8p759leLZ9GGar $i" >> pos1.txt done
ikinci script 5555-9999 arasını pos2.txt dosyasına yazsın. bunun için nano ile pos2.sh dosyasını hazırlayalım.
1 2 3 4 5
#!/bin/bash for i in {5555..9999} do echo "VAfGXJ1PBSsPSnvsjI8p759leLZ9GGar $i" >> pos2.txt done
ikisine de çalıştırma izinleri verelim:
chmod +x pos1.sh && chmod +x pos2.sh
ikisini de çalıştıralım:
./pos1.sh && ./pos2.sh
brute-force:
birinci dosyayı netcat ile 30002 portuna brute-force’layalım.
cat pos1.txt | nc localhost 30002 > sonuc.txt
ikinci dosyayı da gönderelim.
cat pos2.txt | nc localhost 30002 > sonuc.txt
eğer bu adımlarda sunucu çöküyorsa sonra tekrar oynamayı deneyin.
komutların sonuna
&
ekleyerek çalıştırırsanız arkaplanda çalışacaktır.örnek:
cat pos2.txt | nc localhost 30002 > sonuc.txt &
.böylece ara sıra
ls -l
yaparak dosya boyutuna bakabilirsiniz.işlem başladığında
[1] 62842
gibi bir yanıt verir. bupid
yani process id’dir.bittiğinde de bildirim alırsınız.
örnek:
[1]+ Done cat pos1.txt | nc localhost 30002 > sonuc.txt
işlemleri görüntülemek için ara sıra
ps aux
‘a da bakabilirsiniz (önemli)
işlem tamamlandığında
sort sonuc.txt | grep -v "Wrong"
komutunu uygulayalım.sort sonuc.txt
: bu komut, sonuc.txt dosyasındaki içeriği sıralar. sıralama, satırların alfabetik olarak küçükten büyüğe veya büyükten küçüğe sıralanması anlamına gelir. bu durumda, satırlar varsayılan olarak alfabetik olarak sıralanacaktır.grep -v "Wrong"
: bu komut, grep aracını kullanarak belirli bir metni içermeyen satırları ekrana yazdırır.-v
parametresi, belirtilen metni içermeyen satırları seçmek için kullanılır. yani, “Wrong” ifadesini içermeyen tüm satırlar ekrana yazdırılır.bu iki komut pipe (
|
) işaretiyle (sort sonuc.txt | grep -v "Wrong"
) birbirine bağlanmıştır. bu, bir komutun çıktısını diğerine iletmek için kullanılır. yani,sort
komutunun çıktısı grep komutuna girer ve “Wrong” ifadesini içermeyen satırlar ekrana yazdırılır. bu şekilde, işlemler sırayla gerçekleştirilir ve sonuçlar filtrelenir.
- yeni parola:
p7TaowMYrmu23Ol8hiZh9UvD0O9hpx8d
başka bir şekilde de yapabiliriz.
- her döngü arasına 0.1 saniyelik bekleme ekleyelim. bunun için sleep komutunu kullanabiliriz.
1 2 3 4 5 6 7 8 9 10 11 12 13
#!/bin/bash process_lines() { while IFS= read -r line; do while true; do if output=$(echo "$line" | nc -w 2 localhost 30002 2>&1); then echo "$output" >> sonuc.txt break fi done sleep 0.01s done < "possible.txt" } process_lines
bu script:
daha önceden yazdığımız possible.txt dosyasından her satırı tek tek okuyacak
her satırı netcat ile localhost’a 30002 portuna gönderecek
her satır için çalışan netcat dönüşünü (return) sonuc.txt’ye ekleyecek.
#!/bin/bash:
bu satır, bash betiğinin yürütülebilir olduğunu belirtir. betiğin bir bash kabuğunda çalıştırılacağını ifade eder.process_lines()
bu satır, process_lines adında bir fonksiyon tanımlar. fonksiyonun içindeki komutlar, bu fonksiyon çağrıldığında çalıştırılacaktır.while ifs= read -r line; do:
bu satır, possible.txt dosyasındaki her satırı tek tek işlemek için bir döngü başlatır. her satır, line değişkenine atanır.while true; do:
sonsuz bir döngü başlatır. her döngü adımında, nc komutunun çalışma durumu kontrol edilecek ve gerekirse tekrar denenecek.output=$(echo "$line" | nc -w 2 localhost 30002 2>&1):
bu ifade,echo "$line" | nc -w 2 localhost 30002
komutunu çalıştırır ve bu komutun çıktısını output değişkenine atar. burada:echo "$line"
: line değişkeninin değerini (possible.txt dosyasından okunan her satır) standart çıktıya yazdırır.|
: bu, “pipe” operatörüdür ve bir komutun çıktısını başka bir komuta giriş olarak sağlar.nc -w 2 localhost 30002
: bu, nc komutunu çalıştırır ve -w 2 seçeneği ile 2 saniyelik bir zaman aşımı belirler. localhost üzerindeki30002
numaralı bağlantı noktasına bir ağ bağlantısı kurmaya çalışır.2>&1
: bu, standart hata çıktısını (stderr
) standart çıktıya (stdout
) yönlendirir. bu sayede, herhangi bir hata mesajı da output değişkenine atanır.- yani, bu satır, nc komutunu çalıştırarak bir bağlantı kurar ve output değişkenine bu komutun çıktısını atar. eğer bağlantı kurma işlemi başarılı ise (yani, herhangi bir hata olmadan işlem tamamlanırsa), then bloğu içindeki komutlar çalıştırılır.
echo "$output" >> sonuc.txt:
komutun çıktısını sonuc.txt dosyasına ekler.break:
iç içe döngülerin içinde bulunduğu döngüden çıkar. yani, while true döngüsünden çıkar ve bir sonraki satıra geçer. diğer yazılım dillerinde gördüğümüz break ile aynı.done:
iç içe döngülerin iç döngüsünün sonunu belirtir.sleep 0.01s:
her işlem arasında 0.01 saniye bekleme süresi ekler.done < "possible.txt":
dış döngünün sonunu belirtir ve possible.txt dosyasındaki satırların sonuna gelindiğini ifade eder.process_lines:
tanımlanan process_lines fonksiyonunu çağırır. bu, betiğin çalışmasını başlatır.eğer yine sorun çıkarırsa
sleep 0.01s
değerini arttırabiliriz.nano
ile bu scriptibekleyerek.sh
olarak kaydedelim.chmod +x bekleyerek.sh
ile çalıştırma yetkilerini verelim./bekleyerek.sh
ile çalıştırıp ~3 dakika bekleyelim.
betiğin daha gelişmiş ve hızlı hali (aynı anda 5 işlem yaptırdığımız için):
1 2 3 4 5 6 7 8 9 10 11 12 13
#!/bin/bash process_lines() { cat "possible.txt" | xargs -P 5 -I {} -n 1 sh -c ' while true; do if output=$(echo "$1" | nc -w 2 localhost 30002 2>&1); then echo "$output" >> hizlisonuc.txt break fi sleep 0.01 done ' sh {} } process_lines
sonunda scriptin tamamlandığını göreceğiz. bütün return değerlerini
sonuc.txt
dosyasına yazdı.uyarı: bu, önerdikleri yöntem değil. bu yöntemle, her seferinde tekrar tekrar bağlantı yapmış oluruz.
şimdi bu sonuc.txt dosyasından şifreyi ayıklayalım.
sort sonuc.txt | grep -v "Wrong"
komutunu uygulayalım.sort sonuc.txt
: bu komut, sonuc.txt dosyasındaki içeriği sıralar. sıralama, satırların alfabetik olarak küçükten büyüğe veya büyükten küçüğe sıralanması anlamına gelir. bu durumda, satırlar varsayılan olarak alfabetik olarak sıralanacaktır.grep -v "Wrong"
: bu komut, grep aracını kullanarak belirli bir metni içermeyen satırları ekrana yazdırır.-v
parametresi, belirtilen metni içermeyen satırları seçmek için kullanılır. yani, “Wrong” ifadesini içermeyen tüm satırlar ekrana yazdırılır.bu iki komut pipe (
|
) işaretiyle (sort sonuc.txt | grep -v "Wrong"
) birbirine bağlanmıştır. bu, bir komutun çıktısını diğerine iletmek için kullanılır. yani,sort
komutunun çıktısı grep komutuna girer ve “Wrong” ifadesini içermeyen satırlar ekrana yazdırılır. bu şekilde, işlemler sırayla gerçekleştirilir ve sonuçlar filtrelenir.
yeni parola:
p7TaowMYrmu23Ol8hiZh9UvD0O9hpx8d
Bandit Level 25 -> 26
ssh ile bağlanalım:
ssh bandit25@bandit.labs.overthewire.org -p 2220
önceki seviyede bulduğumuz parolayı girelim:
p7TaowMYrmu23Ol8hiZh9UvD0O9hpx8d
ls
ilebandit26.sshkey
adında bir dosya olduğunu gördük. bunu aktarmamız gerekecek.bağlantıyı
logout
veyaexit
ile kapatalım.dosyayı bu komutla lokale indirelim:
scp -P 2220 bandit25@bandit.labs.overthewire.org:bandit26.sshkey .
cat:
cat bandit26.sshkey
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
-----BEGIN RSA PRIVATE KEY----- MIIEpQIBAAKCAQEApis2AuoooEqeYWamtwX2k5z9uU1Afl2F8VyXQqbv/LTrIwdW pTfaeRHXzr0Y0a5Oe3GB/+W2+PReif+bPZlzTY1XFwpk+DiHk1kmL0moEW8HJuT9 /5XbnpjSzn0eEAfFax2OcopjrzVqdBJQerkj0puv3UXY07AskgkyD5XepwGAlJOG xZsMq1oZqQ0W29aBtfykuGie2bxroRjuAPrYM4o3MMmtlNE5fC4G9Ihq0eq73MDi 1ze6d2jIGce873qxn308BA2qhRPJNEbnPev5gI+5tU+UxebW8KLbk0EhoXB953Ix 3lgOIrT9Y6skRjsMSFmC6WN/O7ovu8QzGqxdywIDAQABAoIBAAaXoETtVT9GtpHW qLaKHgYtLEO1tOFOhInWyolyZgL4inuRRva3CIvVEWK6TcnDyIlNL4MfcerehwGi il4fQFvLR7E6UFcopvhJiSJHIcvPQ9FfNFR3dYcNOQ/IFvE73bEqMwSISPwiel6w e1DjF3C7jHaS1s9PJfWFN982aublL/yLbJP+ou3ifdljS7QzjWZA8NRiMwmBGPIh Yq8weR3jIVQl3ndEYxO7Cr/wXXebZwlP6CPZb67rBy0jg+366mxQbDZIwZYEaUME zY5izFclr/kKj4s7NTRkC76Yx+rTNP5+BX+JT+rgz5aoQq8ghMw43NYwxjXym/MX c8X8g0ECgYEA1crBUAR1gSkM+5mGjjoFLJKrFP+IhUHFh25qGI4Dcxxh1f3M53le wF1rkp5SJnHRFm9IW3gM1JoF0PQxI5aXHRGHphwPeKnsQ/xQBRWCeYpqTme9amJV tD3aDHkpIhYxkNxqol5gDCAt6tdFSxqPaNfdfsfaAOXiKGrQESUjIBcCgYEAxvmI 2ROJsBXaiM4Iyg9hUpjZIn8TW2UlH76pojFG6/KBd1NcnW3fu0ZUU790wAu7QbbU i7pieeqCqSYcZsmkhnOvbdx54A6NNCR2btc+si6pDOe1jdsGdXISDRHFb9QxjZCj 6xzWMNvb5n1yUb9w9nfN1PZzATfUsOV+Fy8CbG0CgYEAifkTLwfhqZyLk2huTSWm pzB0ltWfDpj22MNqVzR3h3d+sHLeJVjPzIe9396rF8KGdNsWsGlWpnJMZKDjgZsz JQBmMc6UMYRARVP1dIKANN4eY0FSHfEebHcqXLho0mXOUTXe37DWfZza5V9Oify3 JquBd8uUptW1Ue41H4t/ErsCgYEArc5FYtF1QXIlfcDz3oUGz16itUZpgzlb71nd 1cbTm8EupCwWR5I1j+IEQU+JTUQyI1nwWcnKwZI+5kBbKNJUu/mLsRyY/UXYxEZh ibrNklm94373kV1US/0DlZUDcQba7jz9Yp/C3dT/RlwoIw5mP3UxQCizFspNKOSe euPeaxUCgYEAntklXwBbokgdDup/u/3ms5Lb/bm22zDOCg2HrlWQCqKEkWkAO6R5 /Wwyqhp/wTl8VXjxWo+W+DmewGdPHGQQ5fFdqgpuQpGUq24YZS8m66v5ANBwd76t IZdtF5HXs2S5CADTwniUS5mX1HO9l5gUkk+h0cH5JnPtsMCnAUM+BRY= -----END RSA PRIVATE KEY-----
indirdiğimiz dosya ile ssh’e bağlanalım. bunun için ssh
-i
parametresini kullanarak private key belirtebiliriz.ssh bandit26@bandit.labs.overthewire.org -p 2220 -i bandit26.sshkey
hata mesajı:
Permissions 0640 for 'bandit26.sshkey' are too open.
dosyayı sadece bize ait olarak ayarlayalım:
chmod 700 bandit26.sshkey
dosya artık sadece bana ait:
ls -l
:
-rw------- 1 fr0stb1rd fr0stb1rd 1679 May 16 15:49 bandit26.sshkey
tekrar:
ssh bandit26@bandit.labs.overthewire.org -p 2220 -i bandit26.sshkey
yeni bir hata mesajı alıyoruz:
Connection to bandit.labs.overthewire.org closed.
karşı sunucu anında bağlantıyı sonlandırıyor. bağlantıdan sonra bir bash spawnlamaya çalışalım. böylece yeni shell’imiz kapanmaz.
her kullanıcının bir varsayılan kabuk (
shell
) ayarı vardır. bu özellikle ssh kullanılırken önemlidir, çünkü bu varsayılan kabuk, gösterilecek olan kabuktur. bir kullanıcının varsayılan kabuğunun ne olduğu bilgisi,/etc/passwd
dosyasındaki kullanıcı satırının sonunda bulunabilir.bandit25
olarak yeniden giriş yapıpbandit26
kabuğunu öğrenelim.ssh ile bağlanalım:
ssh bandit25@bandit.labs.overthewire.org -p 2220
önceki seviyenin parolasını girelim:
p7TaowMYrmu23Ol8hiZh9UvD0O9hpx8d
bandit26
için olan bash’i bulalım:cat /etc/passwd | grep bandit26
bandit26:x:11026:11026:bandit level 26:/home/bandit26:/usr/bin/showtext
cat:
cat /usr/bin/showtext
1 2 3 4
#!/bin/sh export TERM=linux exec more ~/text.txt exit 0
export TERM=linux
: Bu satır, TERM ortam değişkeninin değerini ‘linux’ olarak ayarlar. TERM değişkeni, terminal türünü belirtir ve betiğin düzgün bir şekilde çalışması için bazı durumlarda gereklidir.linux
, terminalin Linux türü olduğunu belirtir.more
, dosyaları etkileşimli bir modda görüntülemeyi sağlayan bir kabuk komutudur. özellikle, bu etkileşimli mod, dosyanın içeriğinin terminal penceresinde tam olarak görüntülenemeyecek kadar büyük olduğu durumlarda çalışır. bu etkileşimli modda izin verilen bir komutv
‘dir. bu komut dosyayıvim
adlı düzenleyicide açar.vim bir metin düzenleyicidir. ayrıca kabuk komutlarını çalıştırmanızı sağlar. kısıtlanmış bir ortamdan çıkmak ve bir kabuk oluşturmak için vim’i kullanmak mümkündür. kullanıcının varsayılan kabuğunu oluşturmak için, komut
:shell
kullanılır. kabuğu/bin/bash
olarak değiştirmek için komut:set shell=/bin/sh
‘dir.
o zaman terminal penceresini küçülterek işleme devam edelim. böylece
more
işlemine girebiliriz.exit
ile çıkış yapalım.ssh bandit26@bandit.labs.overthewire.org -p 2220 -i bandit26.sshkey
görüldüğü gibi tüm içerik gösterilmiyor. daha fazla içeriği görmek için kaydırma yapmamızı bekleyen bir more komutumuz var, bu komut çalışmasını tamamladığında ise
exit 0
yürütülüyor. yani komutu ortasında durduruyoruz.şimdi etkileşimli mod özelliğini kullanabiliriz. etkileşimli modda
v
(görsel mod), belirli metin alanlarını görsel olarak vurgulamanıza (seçmenize) ve onlar üzerinde komut çalıştırmanıza izin verir.v
tuşuna basalım ve vim’e girelim. vim’de:set shell=/bin/bash
komutu, harici komutları çalıştırırken vim tarafından kullanılan kabuğu değiştirmek için kullanılır. bu komut, kabuğu genellikle bash kabuğu olan/bin/bash
olarak ayarlar.:set shell=/bin/bash
diyelim ve bu işlemi gerçekleştirelim.şimdi
:shell
diyerek ayarladığımız bash’i çalıştıralım.ve bandit26 olarak yeni bir shell açtık:
bandit26@bandit:~$
artık terminal boyutunu büyütebiliriz.bandit26 için anahtarı bulalım:
cat /etc/bandit_pass/bandit26
yeni parola:
c7GvcKlw9mC7aUQaPx7nwFstuAIBw1o1
Bandit Level 26 -> 27
terminal penceremizi küçültelim.
ssh ile bağlanalım:
ssh bandit26@bandit.labs.overthewire.org -p 2220
önceki seviyede bulduğumuz parolayı girelim:
c7GvcKlw9mC7aUQaPx7nwFstuAIBw1o1
more
sözcüğü belirincev
diyelim.:set shell=/bin/bash
ile terminali ayarlayalım.:shell
diyerek ayarladığımız bash’i çalıştıralım, terminal penceresini artık büyütebiliriz.ls -l
diyerek ne var ne yok diyebakalım.bandit27-do
isminde bir dosya var ve suid yetkisine sahip. programını deneyelim.bu, bandit27 kullanıcısı iel komut çalıştırmamızı sağlayacak. o halde parolayı almaya çalışalım.
./bandit27-do cat /etc/bandit_pass/bandit27
yeni parola:
YnQpBuifNMas1hcUFk70ZmqkhUU2EuaS
Bandit Level 27 -> 28
ssh ile bağlanalım:
ssh bandit27@bandit.labs.overthewire.org -p 2220
önceki seviyede bulduğumuz parolayı girelim:
YnQpBuifNMas1hcUFk70ZmqkhUU2EuaS
ssh://bandit27-git@localhost/home/bandit27-git/repo
adresinde bir git reposu varmış. bunu klonlamamızı istemiş. parola bu seviyenin parolasıyla aynıymış. ayrıca port 2220’da çalışıyormuş.mktemp -d
ile yeni bir temp dizin oluşturalım. benim dizinim burası:/tmp/tmp.pHaDrLfaAc
. isim farklı olabilir. bu dizine gidelim. cd:cd /tmp/tmp.pHaDrLfaAc
git clone ssh://bandit27-git@localhost:2220/home/bandit27-git/repo
yeni parola:
AVanL161y9rsbcJIsFHuw35rjaOM19nR
Bandit Level 28 -> 29
ssh ile bağlanalım:
ssh bandit28@bandit.labs.overthewire.org -p 2220
önceki seviyede bulduğumuz parolayı girelim:
AVanL161y9rsbcJIsFHuw35rjaOM19nR
ssh://bandit28-git@localhost/home/bandit28-git/repo
adresinde bir git reposu varmış, 2220 portundaymış, parola da şu anki seviyenin parolasıymış.mktemp -d
ile yeni bir temp dizin oluşturalım. benim dizinim burası:/tmp/tmp.bU7UdKcIu4
. isim farklı olabilir. bu dizine gidelim. cd:cd /tmp/tmp.bU7UdKcIu4
git clone ssh://bandit28-git@localhost:2220/home/bandit28-git/repo
içeride bir readme dosyası var ancak parola sansürlenmiş. git geçmişini kontrol edelim:
git log
fix info leak
commitinden de anlayabileceğimiz gibi, son commit’te parolayı xxx olarak değiştirmiş olma ihtimalleri yüksek. önceki commiti görüntüleyelim:git show f08b9cc63fa1a4602fb065257633c2dae6e5651b
ile baktığımızda daha önceki commit’te parolayı readme dosyasına yazmış. son sürümde ise xxx olarak değiştirmiş. tam tahmin ettiğimiz gibi.bu işlemi git checkout ile de yapabiliriz.
git checkout f08b9cc63fa1a4602fb065257633c2dae6e5651b
yeni parola:
tQKvmcwNYcFS6vmPHIUSI3ShmsrQZK8S
Bandit Level 29 -> 30
ssh ile bağlanalım:
ssh bandit29@bandit.labs.overthewire.org -p 2220
önceki seviyede bulduğumuz parolayı girelim:
tQKvmcwNYcFS6vmPHIUSI3ShmsrQZK8S
ssh://bandit29-git@localhost/home/bandit29-git/repo
adresinde bir git reposu varmış, 2220 portundaymış, parola da şu anki seviyenin parolasıymış.mktemp -d
ile yeni bir temp dizin oluşturalım. benim dizinim burası:/tmp/tmp.NMXrq4miBS
. isim farklı olabilir. bu dizine gidelim. cd:cd /tmp/tmp.NMXrq4miBS
git clone ssh://bandit29-git@localhost:2220/home/bandit29-git/repo
‘No passwords in production!’ cümlesi, başka dallar (branches) olabileceği izlenimini veriyor. bu yüzden kontrol edelim:
git branch -a
tüm branşları sıra sıra kontrol edelim:
git checkout dev
ls
ile listeleyipcat README.md
dersek:yeni parola:
xbhV3HpNGlTIdnjUrdAlPzc2L6y9EOnS
Bandit Level 30 -> 31
ssh ile bağlanalım:
ssh bandit30@bandit.labs.overthewire.org -p 2220
önceki seviyede bulduğumuz parolayı girelim:
xbhV3HpNGlTIdnjUrdAlPzc2L6y9EOnS
ssh://bandit30-git@localhost/home/bandit30-git/repo
adresinde bir git reposu varmış, 2220 portundaymış, parola da şu anki seviyenin parolasıymış.mktemp -d
ile yeni bir temp dizin oluşturalım. benim dizinim burası:/tmp/tmp.qw27gRj8KF
. isim farklı olabilir. bu dizine gidelim. cd:cd /tmp/tmp.qw27gRj8KF
git clone ssh://bandit30-git@localhost:2220/home/bandit30-git/repo
cd repo
ile içine giripls
dedik ve listeledik.cat README.md
ile içine bakınca bizime dalga geçti:just an epmty file... muahaha
dedi. başka branşları kontrol edelim:git branch -a
1 2 3 4 5
bandit30@bandit:/tmp/tmp.qw27gRj8KF/repo$ git branch -a * master remotes/origin/HEAD -> origin/master remotes/origin/master bandit30@bandit:/tmp/tmp.qw27gRj8KF/repo$
başka branş yok, log yok, hiçbir şey yok. bir de tag’e bakalım. git tag’ini kontrol ettiğimizde,
secret
adlı tarihte bir nokta buluyoruz.git show secret
dersek:yeni parola:
OoffzGDlzhAlerFJ2cAiz1D41JW1Mhmt
Bandit Level 31 -> 32
ssh ile bağlanalım:
ssh bandit31@bandit.labs.overthewire.org -p 2220
önceki seviyede bulduğumuz parolayı girelim:
OoffzGDlzhAlerFJ2cAiz1D41JW1Mhmt
ssh://bandit31-git@localhost/home/bandit31-git/repo
adresinde bir git reposu varmış, 2220 portundaymış, parola da şu anki seviyenin parolasıymış.mktemp -d
ile yeni bir temp dizin oluşturalım. benim dizinim burası:/tmp/tmp.IU9AtQ0u0I
. isim farklı olabilir. bu dizine gidelim. cd:cd /tmp/tmp.IU9AtQ0u0I
git clone ssh://bandit31-git@localhost:2220/home/bandit31-git/repo
klonlama bitince
repo
dizinindeki readme dosyasında şöyle yazıyor:1 2 3 4 5 6
This time your task is to push a file to the remote repository. Details: File name: key.txt Content: 'May I come in?' Branch: master
dediklerini yapmak için,
bir
txt
dosyası oluşturacağız ve adıkey.txt
olacak.içine
May I come in?
yazacağızmaster
branşınapush
‘layacağız.
o halde yapalım:
echo -n 'May I come in?' > key.txt
git add key.txt
dediğimizde ya.gitignore
dosyasında txt dosyaları için olan engeli kaldıracağız ya da-f
parametresi ileforce
olarak push edeceğiz.git add key.txt -f
diyerek zorla ekledik.git commit -m 'ekleme'
ile dosyayı ekledik.git push
ile master branşına push etmeye çalıştık.- bu komutu
git push origin master
olarak kullanmak daha medenicedir ama bu şekilde kullanırsanız da kimse sizi bıçaklamaz (opsiyonel)
- bu komutu
yeni parola:
rmCBvG56y58BXzv98yZGdO7ATVL5dW8y
Bandit Level 32 -> 33
ssh ile bağlanalım:
ssh bandit32@bandit.labs.overthewire.org -p 2220
önceki seviyede bulduğumuz parolayı girelim:
rmCBvG56y58BXzv98yZGdO7ATVL5dW8y
ls
dediğimizde LS
şeklinde büyük karakterlerle çalıştıran bir shell’e denk geldik.
linux’ta, yerel değişkenler, kabuk değişkenleri ve ortam değişkenleri olmak üzere değişkenler bulunur. bu değişkenlerin adları yalnızca büyük harflerle yazılır. Komut satırında
VAR_NAME=var_value
yazarak tanımlanırlar. bir değişkenin içeriğini görmek içinecho $VAR_NAME
yazabilirsiniz. tüm ortam değişkenlerini yazdırmak için printenv kullanabilirsiniz. bilmekte fayda olan bazı yaygın değişkenler şunlardır:TERM
: geçerli terminal emülasyonuHOME
: geçerli kullanıcıya ait ev dizininin yoluLANG
: geçerli yerel ayarlarıPATH
: komutların çalıştırılacağı dizinlerin listesiPWD
: geçerli çalışma dizininin yoluSHELL
: geçerli kullanıcının kabuğunun yoluUSER
: geçerli oturum açmış kullanıcı
linux’ta büyük harfle yazılan şeyler değişkenlerdir. özellikle, $0 değişkeni bir kabuğa referans içerir. bunu kendi makinenizde echo $0 yazarak görebilirsiniz. bu sayede büyük harf kabuğundan çıkabilir ve komutları tekrar kullanabiliriz.
örneğin:
./betik.sh arg1 arg2 arg3
şeklinde bir komut girip çalıştırırsak:$0
:./betik.sh
$1
:.arg1
$2
:arg2
$3
:arg3
olacaktır. o halde bizim senaryomuzda şu anda$0
, shell’e yani birsh
komutuna referanstır.
sh uppercase.sh
diye çalıştırıldığını düşünürsek:1 2 3
- `$0`: `sh` - `$1`: `uppercase.sh`
$0
yazıp denersek, artık normal bir shell’e sahibiz.1 2 3 4 5 6 7 8 9
>> $0 $ ls -la total 36 drwxr-xr-x 2 root root 4096 Oct 5 2023 . drwxr-xr-x 70 root root 4096 Oct 5 2023 .. -rw-r--r-- 1 root root 220 Jan 6 2022 .bash_logout -rw-r--r-- 1 root root 3771 Jan 6 2022 .bashrc -rw-r--r-- 1 root root 807 Jan 6 2022 .profile -rwsr-x--- 1 bandit33 bandit32 15128 Oct 5 2023 uppershell
burada göreceğimiz gibi:
-rwsr-x--- 1 bandit33 bandit32 15128 Oct 5 2023 uppershell
- uppershell dosyası bandit33 ayrıcalıkları ile çalışıyor. yani şu anda içinde bulunduğumuz shell, bandit33 kullanıcısı yetkilerine sahip. bunu kanıtlamak için
whoami
veyaid
kullanalım.
- uppershell dosyası bandit33 ayrıcalıkları ile çalışıyor. yani şu anda içinde bulunduğumuz shell, bandit33 kullanıcısı yetkilerine sahip. bunu kanıtlamak için
bandit33 için anahtarı bulalım:
cat /etc/bandit_pass/bandit33
yeni parola:
odHo63fHiFqcWWJG9rLiLDtPm45KzUKy
Bandit Level 33 -> 34
ssh ile bağlanalım:
ssh bandit33@bandit.labs.overthewire.org -p 2220
önceki seviyede bulduğumuz parolayı girelim:
odHo63fHiFqcWWJG9rLiLDtPm45KzUKy
1 2 3 4 5 6 7 8 9 10 11 12
bandit33@bandit:~$ ls -l total 4 -rw------- 1 bandit33 bandit33 430 Oct 5 2023 README.txt bandit33@bandit:~$ cat README.txt Congratulations on solving the last level of this game! At this moment, there are no more levels to play in this game. However, we are constantly working on new levels and will most likely expand this game with more levels soon. Keep an eye out for an announcement on our usual communication channels! In the meantime, you could play some of our other wargames. If you have an idea for an awesome new level, please let us know!
ve oyunu bitirdik.
Notlar
her oyun arası
exit
veyalogout
ile oturumu sonlandırdık. çünküsu bandit
gibi oturum değiştirmeye izin vermiyor.terminalden kopyalama işlemini metni seçtikten sonra
ctrl+shift+c
ile, terminale yapıştırma işleminictrl+shift+v
ile yapabilirsiniz.bu makale, linux temellerini gerçekten pratik yaparak deneyimlemenizi sağlayacak. kafanızda bundan önce
ls ile cd'yi öğrendim ben artık linux biliyorum
düşüncesi varsa bunu silmeye yarayacak.you know nothing Jon Snow
seviyeleri bitirdikten sonra, gidip video çekin, not alın, gidip siz de makale şeklinde yazın. benden daha da güzelini yapın. daha da açıklayıcı olun. bunları yapmayacaksanız gidin kafanızı çöp kutusuna sokun daha iyi.
yeni yazıda ya da projede görüşmek dileğiyle, esenlikler…