"Vatanını en çok seven, görevini en iyi yapandır."

  • Yeni üyeler Neler Yapmalı, Nasıl Başlamalı? Detaylar için tıklayın
    Rütbeler ve genel görevlendirme konuları hakkında bilgi almak için tıklayın
    Uzmanlık alanları hakkında bildirge için tıklayın
    Güncel forum kuralları için tıklayın
Bug Bounty Temelleri

Bug Bounty Temelleri 2020-12-09

indirmek için izniniz yok
BUG BOUNTY TEMELLERİ
Eğer hacking konularına yeniyseniz bu döküman; internetin nasıl çalıştığını ve tarayıcının adres çubuğuna bir internet sitesinin URL’ini girdiğinizde arka planda ne gibi olayların meydana geldiğine dair temel bir anlayışın oluşmasını sağlayacaktır. Bir internet sitesinde gezinmek dışardan basit gibi görünse de içerik olarak HTTP istekleri (HTTP request), isteğin gönderileceği alan adını kimliklendirmek, alan adını IP adresine dönüştürmek, istek göndermek ve gelen cevabı yorumlamak gibi bir çok gizli ve farklı işlemi barındırır.

Bu bölümde zafiyetler, ödül avcılığı, istemci, sunucu, IP adresleri, ve HTTP gibi birçok temel terminolojik terimlerden ve tanımlardan bahsedeceğiz.

Böylelikle zafiyetlerden kaynaklanan ve dolayısıyla kişisel bilgilere izinsiz giriş ve erişim gibi çeşitli eylemler hakkında bilgi sahibi olacaksınız. Daha sonra adres çubuğuna bir web sayfasının URL adresini girdiğinizde neler olduğunu görecek, HTTP istek ve cevaplarının HTTP eylemleri olarak ne anlama geldiğini anlayacaksınız. Son olarak bölümü HTTP’nin neden durumsuz yani stateless olduğunu anlatarak döküman tamamlanacaktır.

ZAFİYETLER VE ÖDÜL AVCILIĞI (BUG BOUNTY)
Zafiyet (vulnerability) normal zamanda erişim kazanılmaması gereken bilgilere, saldırganlar tarafından istenmeyen eylemlerle erişim kazanılmasını sağlayan uygulama üzerindeki zayıflıklardır.

Örneğin bir kayıt tanımlayıcısının ID’sini değiştirmek, erişmemeniz gereken bilgilere ulaşmanızı sağladığından bu durum istenmeyen bir eylem olarak anlatılabilir.

Profil oluştururken; isim soyisim, e-mail, doğum tarihi ve adres gibi kişisel bilgileri girmenize izin veren bir web sayfası düşünün. Bu site bilgilerinizi gizli tutacak ve sadece arkadaşlarınızla paylaşmanızı sağlayacaktır. Fakat bu web sayfası eğer ki sizin izniniz olmadan başka birinin sizi arkadaş olarak eklemenize izin verirse işte bu bir zafiyet demektir. İnternet sitesi kişisel bilgilerinizi, arkadaş listenizin dışındaki kişilere vermediği halde bilgilerinize herhangi birinin erişim sağlamasına olanak verir. Bir siteyi test ederken, var olan işlevselliği herhangi birinin veya saldırganın nasıl exploit edebileceğini iyi düşünün.

Ödül Avcılığı (Bug Bounty) bir web sitesine etik olarak zarar vermeden bulunan zafiyetin raporlarının şirkete veya web sitesine iletilmesinden sonra, şirketin sorumlu site uzmanlarınca temin edilen ödül işlemidir. Ödül miktarı onlarca dolardan, On binlerce dolara kadar çıkabilir. Ödül avcılığının ödemeleri para olabileceği gibi, kripto para, ödül puanları, hizmet kredileri gibi farklı ödüller de olabilir.

Bir şirket ödül avcılığı programı açtığı zaman kullanıcıların şirketi test edebileceği bir ortam oluşturur. Ödül avcılığı bu dökümanda, şirketin web zafiyeti testlerini yapabilmek için kurulan bir taslak veya kurallar bütünü olarak tanıtılacaktır. Fakat bu durumu hiçbir zaman VDP (Vulnerability Disclosure Program) ile karıştırmayın. Ödül Avcılığı parasal bir ödül vaad ettiği halde VDP de böyle bir vaad yoktur. VDP ise şirketin onarması için etik hacker’ların zafiyetleri rapor edebileceği bir operasyon biçimidir. Bu dökümanlardaki zafiyetlerin bazılarına ödül verilmemesine rağmen, bug bounty programlarında kullanılabilecek türden örnekleri içermektedir.

İSTEMCİ VE SUNUCU (CLIENT AND SERVER)



Tarayıcı internete dayanan ve bilgisayarların birbirine mesaj göndermesini sağlayan bri network’dür. Bu mesajların teknik ismi paketlerdir. Paketler üzerinde gönderici ve hedef bilgilerinin yer aldığı veriler bütünüdür.

İnternet üzerindeki her bilgisayarın kendisine paket gönderilmesini sağlayan bir adresi vardır. Fakat bazı bilgisayarlar sadece belirli tipteki paketleri alırlar ve diğerleri ise sadece kısıtlı bir listeden paket alımına izin verirler. Bundan sonrası ise paketlere ne yapılacağı ve nasıl cevap verileceği konusunda paketi alan bilgisayara bağlıdır.

Bu dökümanın amacına göre, sadece paketlerin kendisine değil içerisindeki verilere odaklanacağız. Bunlar da HTTP mesajlarıdır. Bu bilgisayarlara sunucu ve istemci adını vereceğiz. İstekler bir tarayıcı, komut arayüzü veya başka bir şekilde gelse bile - her ne olursa olsun - istekleri başlatan makinaya istemci adını vereceğiz.

Burada sunucu olarak adlandırılan makine ise istekleri alan web sayfaları ve web uygulamalarıdır. Eğer bu konsept hem sunucuya hem de istemciye uyuyorsa onlara da makina (computer) adını vereceğiz.

Çünkü bilgisayarlar, internet üzerinde haberleşirken bu haberleşmenin niteliğini ve niceliğini bir standart üzerinden yapması gerekmektedir. Bu standart RFC - Request for Comment olarak adlandırılır. Örneğin HTTP - Hypertext Transfer Protocol tarayıcınızın uzaktaki sunucu ile IP - Internet Protocol üzerinden nasıl iletişim kuracağını belirler. Bu senaryoda hem sunucu hem de istemcinin alınan ve gönderilen paketleri anlayabilmek için aynı standartlara uymak zorundadır.

BİR WEB SİTESİ’Nİ ZİYARET EDİNCE NE OLUR?



Bu dökümanda HTTP mesajlarına odaklanacağımızdan dolayı, tarayıcınızın adres çubuğuna bir web sayfasına ait URL girildiğinde meydana gelen süreçler, yüksek - seviyeli bir bakış açısıyla değerlendirilecektir.

ADIM 1: Alan adını ayıklamak (Extracting the domain name)

Google.com’a bir defa girdiğinizde, URL’den bir alan adı belirlemiş olur. Ziyaret edeceğiniz web sayfasına ait alan adı RFC tarafından özelleşmiş kurallara uymalıdır. Örneğin alan adı (domain name) sadece alfanümerik karakterler ve noktalama işaretlerini içerebilir. Uluslararası domain adları ise bir istisna olarak bu kitapta ele alınmıştır. Daha fazlasını öğrenmek RFC 3490’a göz atabilirsiniz. Alan adı (domain name), sunucu adresini bulmak için bir yoldur.

ADIM 2: IP Adresini Çözümlemek (Resolving an IP Adress)
Alan adı belirlendikten sonra, tarayıcınız alan adı ile bağlantılı olan IP Adreslerini çözümlemeye başlar. Bu işleme IP Adresi çözümlemesi denir ve internette her alan adına ait bir IP Adresi olup 2 türlü IP Adresi vardır.

Internet Protocol Version4 (IPv4)
Internet Protocol Version6 (IPv6)


Sadece alan adını kullanarak bir IP Adresini sorgulamak için, makina DNS (Domain Name System) sunucularına bir istek gönderir. DNS; Alan Adı (Domain Name) ve IP Adreslerinin tüm kayıtlarının tutulduğu özelleşmiş sunuculardır.

Bu örnekte (google.com) bağlandığımız DNS sunucusundan gelen IP Adresi 216.58.201.228 IPv4 adresli google.com’a uymalıdır.

ADIM 3: TCP Bağlantısı Kurmak (Establishing a TCP Connection)
Bu işlemden sonra Google olarak girdiğimiz siteye istemci TCP - Transmission Control Protocol üzerinden edinilen IP Adresleriyle 80 numaralı port üzerinden bir bağlantı sağlar. Makineler birbirleriyle farklı protokollerden de iletişim kurabildikleri için TCP protokolünün detayları çok önemli değildir. TCP protokolü gönderici ve alıcının mesajlarını doğrulayabildiği için 2 - taraflı iletişim sağlar ve dolayısıyla veri aktarımı sırasında kayıplar oluşmaz.

İstek gönderdiğimiz sunucu birden fazla servis çalıştırıyor olabilir (servisleri bilgisayar uygulamaları olarak düşünebilirsiniz). Dolayısıyla gelen istekleri bir düzene sokabilmek için ve sınıflandırabilmek için port’lar kullanılır. Port’ları sunucuların internete açılan kapıları olarak düşünebilirsiniz. Port’lar olmasaydı sunucuya gelen veriler farklı işlemleri yapan uygulamalara gitmesi gerekirken aynı işlemi yapan uygulamalara giderdi ve karmaşa çıkardı.

Bu durumda servislerin birbirleriyle ne şekilde işbirliği kuracağı ve bir servise gelen verinin diğer servisten veriyi çalmayacağı şekilde bir standart tanımlamamız gerekir. Örneği 80 numaralı port şifrelenmemeiş HTTP isteklerinin alındığı ve gönderildiği standart bri porttur. Bir diğer sık kullanılan port ise 443 numaralı şifrelenmiş HTTPS isteklerinin kullanıldığı porttur. 80 numaralı port HTTP, 443 numaralı port HTTPS için olsa da TCP iletişimi yöneticinin uygulamayı ne şekilde konfigüre ettiğine bağlı olarak herhangi bir port üzerinden de gerçekleştirilebilir.

ADIM 4: HTTP İsteklerini Göndermek (Sending an HTTP Request)
Örnek olarak google’dan devam edecek olursak, Adım 3’teki bağlantı başarılıysa, tarayıcınız bri HTTP isteği düzenleyecek ve gönderecektir.



Tarayıcı 1 No’lu dizinden bir GET isteği üretir. Bu istek web sayfasının root dizinidir. Bir web sayfasının içeriği aynı bir bilgisayarın içindeki dosyalar ve dizinler gibi organize edilmiştir. Her dosyanın derinliğine indikçe dosya adları bir “/” işareti ile kaydedilir. Sitenin ilk sayfasını ziyaret ettiğinizde root dizinine erişim sağlarsınız. Tarayıcı HTTP version 1.1 protokolünü kullandığını gösterir. Bir GET isteğinin yaptığı iş sadece bilgiyi geri getirmektir. 2 numaradaki makinaya ait başlık (host header) gönderilen isteğin bir kısmı olarak işlem görür. HTTP 1.1’in verilen IP Adresine ait sunucuyu kimliklendirmesi (identify) gerekir. Çünkü bir IP Adresi birden çok domain belirtebilir. 3 numaralı yerde connection header diye adlandırdığımız yerdir ve bağlantının sık sık kurulup geri kopmasını engellemeyi sağlar ki bu şekilde gelen isteklerden sonra oluşan bağlantının devamlılığı sağlanır. 4 numaralı yerde beklenen cevabın (response) formatını görebilirsiniz. Bu şartlar altında beklediğimiz format “/” ile ayrılmış şekilde lt;application/html gt; idi fakat cevabı farklı formatlarda da alabiliriz. Bu formatlar: lt;application/json gt;, lt;application/html gt;, lt;application/octet-stream gt; veya text-plain şeklinde de olabilir. Son olarak 5 numarada görülen User-Agent isteği göndermekten sorumlu olan yazılıma işaret eder.

ADIM 5: Sunucu Cevabı (Server Response)
Giden isteğe sunucu aşağıdaki gibi bir cevap verir.



Burada bilinen 200 durum kodlu (status code) HTTP cevabı, HTTP 1.1 üzerinde gösteriliyor. Durum Kodları önemlidir. Çünkü sunucunun gelen istekleri nasıl cevapladığını gösterir. RCF’de tanımlandığı gibi bu kodlar 3 basamaklı sayılar olup 2,3,4 veya 5 ile başlayabilirler. Bu kodların sunucular tarafından tam olarak özelleşmiş kodlar olmadığı bilinse de 2xx şeklindeki kodlar isteğin başarılı şekilde ulaştırıldığını söyler. Çünkü HTTP kodlarının nasıl ve ne şekilde uygulanacağına dair henüz tam bir kural yoktur. Dolayısıyla HTTP mesajlarında uygulama hatası yazmasına rağmen çalışan bir web uygulamasından 200 kodu alabilirsiniz. 3 Numaralı bölgede ise istek ve gelen cevap ile bağlantılı olarak oluşturulan HTTP mesajı içeriğidir. içerik çok fazla olduğu için ---snip--- ile ayrılmıştır. Yani ekrana basılmamıştır. Çünkü söz konusu site google.com’dur. Bu metin bir web sayfasına ait olduğu için HTML şeklinde gelen cevaptır. Fakat bu cevaplar bir web uygulamasına aitse json olarak da dönebilir. Content - Type - Header (2) dediğimiz yer body olarak adlandırılan medya tipini belirler. Medya tipi body tarayıcının içeriğini ne şekilde yorumlayacağını belirler. Fakat tarayıcılar her zaman uygulamadan dönen cevaba bakmazlar. Bunun yerine MIME sniffing yaparlar. Bu body içeriğinin ilk bitini okuyacak medya tipini belirlerler. Uygulamalar bu tarayıcı davranışını header’a X - Content - Type - Options: no-sniff diyerek kapatabilirler. Tabi biz bunu bir önceki örnekte görmedik. 3xx ile başlayan diğer cevap kodları bir yönlendirme (redirect) olduğuna dair bilgi verir. Ki bu bilgi ile tarayıcının ek bir istek yapabilmesini sağlar. Örneğin; teorik olarak eğer ki google sizi bir URL’den diğer URL’e kalıcı olarak yönlendiriyorsa 301 cevap kodu döner. Tam tersine 302 cevap kodu da geçici bir yönlendirme sağlar. 3xx durum kodu alındığında tarayıcı URL’e yeni bir lokasyon bilgisi ekleyerek HTTP isteği gönderir.



ADIM 6: Cevapları İşlemek (Rendering Response)
Sunucu; içerik şekli lt;text/html gt; olan 200 kodlu cevabı gönderince, tarayıcı aldığı içeriği işlemeye başlayacaktır. Gelen cevabın body kısmında tarayıcının kullanıcıya hangi verileri sunacağı belirtilmektedir.

Örnekten hareket edecek olursak, sayfa iskeletinde HTML, sayfanın görsel bütünlüğünde CSS, video ve fotoğraflar gibi medya ve ek dinamik işlevleri için de Javascript kullanılmaktadır. Sunucu için XML gibi farklı içerikleri göndermek mümkün olsa bile bu dökümanda temel bilgiler işlendiği için bu konuyu ileride ele alacağız.

Web sayfaları için CSS, Javascript ve çeşitli medya içerikleri gibi harici dosyaları tanımak mümkün olsa da, tarayıcı bu şekilde tanımlanan her bir içerik için ek HTTP isteği düzenlemek zorundadır. Tarayıcı bu ek dosyalara istek düzenlerken, gelen cevabı ayrıştırır (parse) ve body kısmında belirtilen içerikleri size bir web sayfası olarak sunar.

Bu arada Javascript’in her tarayıcı tarafından yorumlanabilen ve desteklenen bir script dili olduğunu bilmeniz elzemdir. Javascript web sayfalarına, siteyi tekrar yüklemeksizin içeriği güncelleme, - bazı sayfalarda - parolaların zayıf veya güçlü olup olmadığını kontrol etme gibi çeşitli dinamik işlevler kazandırır. Diğer programlama dillerinde olduğu gibi, Javascript değişkenlerin içerisine değer atamak, web sayfalarından gelen cevaplarda kod çalıştırmak gibi tümleşik işlevlere sahiptir. Aynı zamanda çeşitli tarayıcı API’lerine (Application Programming Interface) erişimi vardır. Bu API’ler Javascript kodlarının diğer sistemlerle etkileşime girmesini sağlar ki en önemlilerinden biri DOM (Document Object Model) ‘dir.

DOM sayesinde Javascript kodlarıyla bir web sayfasına ait HTML ve CSS kodlarına erişme ve onları değiştirme olanağı elde edebilirsiniz. Bu durum önemlidir çünkü saldırgan bir web sayfası üzerinde kendine ait kodları çalıştırma olanağı bulabiliyorsa, DOM’a da erişimi var ve hedeflenen kullanıcı üzerinde çeşitli işlemler yapabilecek demektir. İleriki bölümlerde bu konu detaylı incelenecektir.

HTTP İSTEKLERİ (HTTP REQUEST)
İstemci ve sunucu arasındaki anlaşmada HTTP isteklerinin nasıl işleneceği konusu yapılan isteklerin metotlarının tanımlanmasına bağlıdır. Bir istek metodu (request method), istemcinin yaptığı isteğin amacına ve sunucunun başarılı sonuç için beklentileri ile ilgilidir. Çünkü internet birbirlerinden uzak bilgisayarların iletişimi için tasarlanmıştır evet, ama istek metodları da bu ağ üzerinde gerçekleştirilen eylemlerin birbirinden ayrılması için geliştirilmiş ve uygulanmıştır.

Bir HTTP standardı aşağıdaki istek metodlarını içerir:

GET, HEAD, POST, PUT, DELETE, TRACE, CONNECT AND OPTIONS (PATCH uygulamada önerilmektedir fakat HTTP RFC’de genel olarak uygulanmaz.). Bu döküman boyunca tarayıcılar HTML kullanarak sadece GET ve POST istekleri göndereceklerdir. Fakat herhangi bir PUT, PATCH veya DELETE gibi isteklere rastlarsanız bilin ki bu istekler Javascript tarafından çalıştırılmaktadır. İleriki bölümlerde zafiyetlerle ilgili örnekler yapılırken bu metod tipleriyle sıkça karşılaşacaksınız.
Yazar
1njecti0n
İndirilme
0
İlk Yayınlama
Son Güncelleme
Değerlendirme
0.00 yıldız(lar) 0 rating

1njecti0n kullanıcısının diğer makaleleri;

Üst