Popüler Web Atakları / Nasıl Gerçekleşir? / Nasıl Önlenebilir?

xKemikkiran

Katılımcı Üye
22 Haz 2020
471
226
Zararlı yerlerde - Aydın
Web atakları nasıl gerçekleşir?


Aşağıda gördüğünüz şema 3 katmanlı web upgulama modelidir (3 layerd web application model).
İlk katman Web browser veya bağlantı sağlayan uygulamadır.
İkinci katman dinamik olarak içerik sunan platformdur. örn. Youtube yada haber siteleri örnek verilebilir.
Üçüncü katmanda ise verileri saklayan "veritabanı" bulunur.


t8zeg45.jpg

---------------------------------------------------------------------------
Olağan bir web site bağlantısı ve veritabanı sorgusu:


40fsb20.jpg

---------------------------------------------------------------------------

XSS ve SQL injection gibi veritabanına ulaşmamızı sağlayan saldırılar. Aşağıdaki resimde bulunan "STOP" sembolünün aşılması ile veritabanına ulaşılır ve yukarıda bahsettiğim ilk katman olan Son kullanıcıya ulaşır.


qjsj0fh.jpg


NOT= Bu saldırıları durdurmak için başta IDS/IPS ve Firewall kuralları oluşturulmuştur.


Web Aplikasyonlar Nasıl Çalışır

Sıradışı bir durumu tespit etmek için öncelikle bu teknolojinin nasıl çalıştığını öğrenmemiz gerekli.
Web aplikasyonlar Hyper-Text Transfer Protool (http) ile çalışır.

Şimdi EN TEMELE, OSI katmanına dönüyoruz

HTTP 7. osi katmanında çalışır. Bu, HTTP ulaşmadan önce Ethernet, IP, TCP, and SSL protokollerinden geçmektedir:


gg1mgnd.jpg


-----------------------------------------------------------------------------

HTTP kısaca istek-cevap şeklinde gerçekleşir:


rkkvnpd.jpg

----------------------------------------------------------------------------

HTTP Requests (HTTP istekleri)

Client tarafının yaptığı istekdir. Şu bölümlerden oluşur

-
Request Line (İstek satırı)
-
Request Headers (İstek başlığı)
-
Request Message Body (İstek, sunucuya mesaj bölümü)


auwj0lh.jpg

-----------------------------------------------------------------------------

Request line: Öncelikle hangi HTTP metodu ile bağlantı yapıldığı yazılır. Ardından istediği dosyanın yolu. En son olarak da HTTP ve HTTP sürümü yazılarak tamamlanır.

NOT: HTTP METODLARI: POST, GET, PUT, PATCH, and DELETE. Kısaca; "Post" mektubu göndermek olarak düşünülebilir, "Get" ise mektubu almak olarak düşünülebilir. "Put" ingilizceden çevirdiğimizde "koymak","bırakmak" anlamına gelir, "Patch" bir veriyi "yamalamak" olarak düşünülebilir, "Delete" ise adı üstünde, "siler" :)

-----------------------------------------------------------------------------


Request Headers: şu bölümlerden oluşur: "Host", "Cookie", "Upgrade-Insecure-Requests", "User-Agent", "Accept", "Accept-Encoding", "Accept-Language", "Connection". Şimdi bunları sırasıyla tanıyalım.

Host: Bağlantı yapılan URL'yi gösterir.

Cookie: Çerez verilerinin bulunduğu bölümdür.

Upgrade-Insecure-Requests: SSL kullanmak istenip istenmediğini bildirir. 1 ise kullanılır, https; 0 ise kullanılmaz, http olur :)

User-Agent: Bağlantı yapan kullanıcının: tarayıcı, işletim sistemi gibi bilgiler bulunur.

Accept: Kabul edilen dosya türlerini gösterir.

Accept-Encoding: İstek yapan tarafın hangi dosya türlerini anlayabildiğini gösterir.

Accept-Language: Hangi dillerinin kabul edildiğini gösterir.

Connection: Bağlantının nasıl devam edeceğini gösterir, örn. "close" verisi bulunuyor ise bağlantı kesilecektir. "Keep-alive" bulunuyor ise bağlantı devam eder.

-------------------------------------------------------------------


Request Message Body: Yukarıda bahsedilen bölümler dışında bulunan veriler içindir, Örn. POST metodunda post edilen verinin bilgisi yer alabilir.

------------------------------------------------------------------

HTTP Responses (HTTP Cevapları)


icqnpnd.jpg

----------------------------------------------------------------

Status Line: Her zamanki gibi protokol hakkında bilgiler ve HTTP Kodu bulunur. Bu kodlar sunucunun durumunu ve yapılan istek hakkında bilgi verirler

100-199: Bilgi (information)

200-299: Başarılı istek (successful)

300-399: Yönlendirme (Redirection)

400-499: İstemci tarafı hata (Client error responses)

500-599: Server tarafı hata (Server error responses)

------------------------------------------------------------------


Response Headers:

- Date: Tarih

- Connection: Yukarıda bahsettiğim gibi bu bağlantıdan sonra ne yapılacağını bildirir.

- Server: HTTP sunucusunun bilgileri bulunur

- Last-Modifed: İstenilen dosyanın son değiştirme tarihini belirtir.

- Content-Type: İstenilen dosyanın türü hakkında bilgiler verir.

- Content-Length: Gönderilen verinin boyutu hakkında bilgi verir

- Response Body: Sunucudan İstemciye gönderilen veriyi içerir

--------------------------------------------------------------------


SQL injection nedir? Nasıl yakalanır?

SQLi herkesin bildiği gibi doğrudan veritabanından veri sızdırmamızı sağlayan bir atak türüdür. 3 Çeşittir:

1. In-band SQLi (Klasik sqli): Aynı uzantıya gönderilmiş sqli sorguları bu kategoriye girer. Faydalanması diğer çeşitlere göre daha kolaydır.

2. Inferential SQLi (Blind SQLi): Sunucudan görünmeyen yanıt alan çeşittir. Blind SQLi olarak da bilinir çünkü yanıtlar gözükmez (en(Blind) = tr(Kör))

3. Out-of-band SQLi: Alınan cevap diğer kanallar üzerinden ulaşmasına denir. Örn. DNS üzerinden ulaştığı zaman

---------------------------------------------------------------------


SQLi Nasıl Çalışır

Bir login sayfasında kullanıcı adı ve şifre girdiğimizde arka planda şuna benzer sorgular atılır:

SELECT * FROM users WHERE username = 'USERNAME’ AND password = 'USER_PASSWORD'

pekala biz kullanıcı adı veya şifre bölümüne " 'USERNAME' " girer isek 2 adet tırnak işareti bulunacağı için sql sunucusu bize hatalı söz dizimi cevabını verecektir. Bu da bizim "Giriş yap" butonuna bastığımızda doğrudan SQL sunucusuna sorgu atığımız anlamına gelir.

Bu durumda bazı kalıplaşmış payloadlar vardır örn: "' OR 1=1 -- -"

Bu durumda SQL sorgusu olarak aşağıdaki sorgu atılır:

SELECT * FROM users WHERE username = ‘’ OR 1=1 – - AND password = 'supersecretpassword'

"-- -" işaretinden sonrası yorum olarak yapılandığı için bu işaretten sonrası yokmuş gibi davranıcaktır 1 her zaman 1'e eşit olduğu için şifre doğru olarak bir yanıt döndürecektir.

-----------------------------------------------------------------


SQLi Tespit Etme

- Kullanıcının girdiği değerleri incelemek

- SQL anahtar kelimeleri kontrol etmek: "INSERT, SELECT, WHERE" gibi sql söz diziminde bulunan kelimeler

- Özel karakter kontrolü yapmak: ('), (-) karakterlerini kontrol etmek

- Kalıplaşmış payload kelimelerin kontrolünü yapmak

--------------------------------------------------------------


Otomatik SQLi yakalama yöntemleri:

1. User-Agent bilgilerine dikkatli bakmak: Otomatik tarayıcı - brute force araçları User-Agent bölümünde kalıplaşmış bilgileri kullanırlar.

2. İsteklerin sıklığını kontrol etmek: Otomatik sqli araçları çok sık sorgu atarlar, bunu kaçırmamak önemli!

-------------------------------------------------------------

Küçük bir örnek.


51oe11t.jpg

yukarıdaki resimde gördüğünüz üzere bir sunucu logu bulunmaktadır.

Dikkatlice baktığınız zaman bu GET isteklerinin çok sık geldiğini görmekteyiz.

Peki bu bağlantı adresleri neden bu şekilde garip gözüküyor? Sebebi "URL ENCODE"

Örneğin arama çubuğuna "www.google.com/search/?q= " yazdığınız zaman boşluk yerine otomatik olarak "%20" işareti konulacaktır.

Aşağıda bazı işaretlerin url encode edilmiş hali bulunmaktadır.


iqenmlf.jpg

Bu durumda logumuzu decode ettğimiz zaman şu görüntü ortaya çıkmaktadır.

p9htwun.jpg

Gördüğünüz gibi bu bağlantı SQLi yapılmak için kullanılan kelimeleri içeriyor.

Cümlelerin en sonunda yazan bilgilere göre 200 kodu dönmüştür. Bu bağlantının başarılı olduğunu gösterir. Bu durumda bir WAF (Web Application Firewall) ürünü en doğru çözümlerden biri olacaktır.

NOT: Eğer WAF bulunursa genellikle 403 kodu dönecektir. Cümlelerin en başındaki IP adresleri bağlantının geldiği adreslerdir.

-------------------------------------------------------------------


XSS (Cross Site Scripting)

En doğru hatlarıyla url üzerinden php-javascript kodlarını çalıştırmaya olanak verir. 3 çeşiti bulunur:

1. Reflected XSS: URL üzerinden (saklanmayan) geçici saldırı türüdür.

2. Stored XSS: XSS payload dosyasını sunucuya upload etme durumudur, içlerinden en zararlı olanıdır.

3. DOM Based XSS:

-------------------------------------------------------------------


XSS nasıl çalışır?

"<p>Hello <?php echo $_GET['user']; ?>.</p>"

yukarıdaki koda sahip bir web sitemiz olduğunu düşünelim.

"https://www.test.site.com/?user=xKemikkiran" olarak bağlantı yaptığımızda

"Hello xKemikkiran" olarak bir cevap dönecektir.
Aynı zamanda "<script>alert(1)</script>" kalıbı da çokça kullanılmaktadır. Bu kalıp size bir pop-up penceresi çıkaracaktır.

Bu durumda XSS açığı bulunan sitelere JS ve PHP kodları yardımıyla istediğinizi yapabilirsiniz.
-----------------------------------------------------------------------


XSS Nasıl Tespit Edilir

9rk5gw9.jpg

---------------------------------------------------------------------

Gördüğünüz gibi URLler encode edilmiş şekilde bulunmaktadır, bunu decode ettiğimizde aşağıdaki gibi bir resim ortaya çıkmaktadır.


8sf8m8w.jpg

Gördüğünüz üzere gelen istekler çok sık bir şekilde olmaktadır.

URL Yollarına baktığımız zaman bir XSS açığını tespit etmeye çalıştığını görüyoruz.

User-Agent verisine baktığımız zaman "python-urllib3". Daha önceden bahsettiğim gibi user agent verileri kullanılan yazılım dili ve kütüphane ile ilgili olabilmekedir. Bu örnekte de python-urllib kütüphanesi kullanılmaktadır.

----------------------------------------------------------------------


Command Injection

Command Injection atakları kullanıcıdan alınan verileri ham şekilde işlendiği için oluşan bir açıktır.

2g07ifg.jpg

-----------------------------------------------------------------------

Nasıl Çalışır?

Örnek olarak kullanıcıdan POST metoduyla gönderilen dosyayı /tmp klasörüne kaydeden bir program düşünelim.

8zwle6v.jpg

Bu durumda gönderilen dosyanın "xkemikkiran;ls;.txt" olduğunu düşünelim.
Sonuç olarak PHP kodu "cp letsdefend;ls;.txt" komudunu çalıştıracaktır. Bash komudu olarak çalıştırdığı için ";" işareti kodun bittiği anlamına gelir ve sırasıyla "cp xkemikkiran", "ls", ".txt" komutları çalıştırır.

Peki bu gönderilen dosya "bluetam;shutdown;.txt" olsaydı? :)D).

-----------------------------------------------------------------


Nasıl tespit edilir?

Örnek bir user agent üzerinden ilerleyelim

GET / HTTP/1.1

Host: yourcompany.com

User-Agent: () { :;}; echo "NS:" $(</etc/passwd)

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9

Accept-Encoding: gzip, deflate

Accept-Language: en-US,en;q=0.9

Connection: close



Gördüğünüz üzere bu kez POST metodu yerine User-Agent bölümü yerinde bir kod parçası bulunmaktadır. Bunu engellemek için komutlar eğer istek içerisinde geçiyor ise devre dışı bırakılabilir.

--------------------------------------------------------------------


IDOR (Insecure Direct Object Reference)

IDOR Yetkilendirme servisini URL üzerinden yapan uygulamalar için bir çeşit manipülasyon yöntemidir.

------------------------------------------------------------------


IDOR nasl çalışır?

En basit olarak bir sosyal medya sitesi örnek verelim. Kullanıcı adınız "xkemikkiran" ve şifre değiştirme ekranında bulunuyosunuz. Bu ekranın URlsi:

"www.sosyalmosyal.com/rst-psswrd?user=xkemikkiran"

Bu durumda "user" verisi kullanıcı adını almaktadır. Peki bunu başka bir kullanıcı için yapar isek?
Bu kullanıcının, kullanıcı adı da "THT" olsun.

"www.sosyalmosyal.com/rst-psswrd?user="THT"

Bu durumda ben xKemikkiran olduğum halde THT kullanıcısının şifre değiştirme ekranına ulaşabilmekteyim.

--------------------------------------------------------------------


RFI & LFI Atakları

LFI (Local File Inclusion) Nedir?

LFI, kullanıcıdan alınan verinin işlenmeden bir dosyaya aktarıldığı saldırı türüdür. RFI'dan farkı yerel dossyaya bir yönlendirme yapar

--------------------------------------------------------------------


RFI (Remote File Inclusion) Nedir?

RFI, kullanıcıdan alınan verinin işlenmeden uzak bir sunucudaki dosyaya aktarıldığı saldırı türüdür.

----------------------------------------------------------------------


RFI & LFI nasıl çalışır?

"www.rfilfi.com/index.php?language=en" olarak bir bağlantıya sahip olduğumuzu düşünelim.

Bu bağlantı ise bizi yönlendirme ile şu linke gönderecektir:
"www.rfilfi.com/en/index.php" Bu durumda "language" parametresinin aldığı değer bağlantıya işlemektedir.

Eğer language parametresini " /../../../../../../../../../etc/passwd%00" yapar isek bizi şuraya yönlendirecektir:
"www.rfilfi.com//../../../../../../../../../etc/passwd%00/home.php"

"%0" dan sonrası bağlantıya dahil edilmediği için sonuç olarak şu şekil ortaya çıkacaktır:
"www.rfilfi.com//../../../../../../../../../etc/passwd"

"../" komudu linux üzerinde bulunduğunuz klasörün bir üst klasörüne erişme komudu olduğu için bu şekilde en üst klasöre ulaşabiliriz.
Ardından "/etc/passwd" komudu ise bize bulunduğu dosyanın içeriğini döndürecektir.

----------------------------------------------------------------------


RFI & LFI ataklarını nasıl önleriz?

Bu durumda, bağlantıda özel karakter durumu kontrol edilebilir.

Eğer kritik dosya adlarına aşina olursanız saldırıyı daha kolay tespit edebilirsiniz.

---------------------------------------------------------------------

Konu biraz fazla uzun oldu anlamadığınız veya anlatım hatası yaptığım yer varsa bildirirseniz sevinirim.
 
Son düzenleme:

ATE$

Moderasyon Ekibi Çaylak
9 Kas 2021
314
128
Siber Şubede geziyor.
Web atakları nasıl gerçekleşir?


Aşağıda gördüğünüz şema 3 katmanlı web upgulama modelidir (3 layerd web application model).
İlk katman Web browser veya bağlantı sağlayan uygulamadır.
İkinci katman dinamik olarak içerik sunan platformdur. örn. Youtube yada haber siteleri örnek verilebilir.
Üçüncü katmanda ise verileri saklayan "veritabanı" bulunur.


t8zeg45.jpg

---------------------------------------------------------------------------
Olağan bir web site bağlantısı ve veritabanı sorgusu:


40fsb20.jpg

---------------------------------------------------------------------------

XSS ve SQL injection gibi veritabanına ulaşmamızı sağlayan saldırılar. Aşağıdaki resimde bulunan "STOP" sembolünün aşılması ile veritabanına ulaşılır ve yukarıda bahsettiğim ilk katman olan Son kullanıcıya ulaşır.


qjsj0fh.jpg


NOT= Bu saldırıları durdurmak için başta IDS/IPS ve Firewall kuralları oluşturulmuştur.


Web Aplikasyonlar Nasıl Çalışır

Sıradışı bir durumu tespit etmek için öncelikle bu teknolojinin nasıl çalıştığını öğrenmemiz gerekli.
Web aplikasyonlar Hyper-Text Transfer Protool (http) ile çalışır.

Şimdi EN TEMELE, OSI katmanına dönüyoruz

HTTP 7. osi katmanında çalışır. Bu, HTTP ulaşmadan önce Ethernet, IP, TCP, and SSL protokollerinden geçmektedir:


gg1mgnd.jpg


-----------------------------------------------------------------------------

HTTP kısaca istek-cevap şeklinde gerçekleşir:


rkkvnpd.jpg

----------------------------------------------------------------------------

HTTP Requests (HTTP istekleri)

Client tarafının yaptığı istekdir. Şu bölümlerden oluşur

-
Request Line (İstek satırı)
-
Request Headers (İstek başlığı)
-
Request Message Body (İstek, sunucuya mesaj bölümü)


auwj0lh.jpg

-----------------------------------------------------------------------------

Request line: Öncelikle hangi HTTP metodu ile bağlantı yapıldığı yazılır. Ardından istediği dosyanın yolu. En son olarak da HTTP ve HTTP sürümü yazılarak tamamlanır.

NOT: HTTP METODLARI: POST, GET, PUT, PATCH, and DELETE. Kısaca; "Post" mektubu göndermek olarak düşünülebilir, "Get" ise mektubu almak olarak düşünülebilir. "Put" ingilizceden çevirdiğimizde "koymak","bırakmak" anlamına gelir, "Patch" bir veriyi "yamalamak" olarak düşünülebilir, "Delete" ise adı üstünde, "siler" :)

-----------------------------------------------------------------------------


Request Headers: şu bölümlerden oluşur: "Host", "Cookie", "Upgrade-Insecure-Requests", "User-Agent", "Accept", "Accept-Encoding", "Accept-Language", "Connection". Şimdi bunları sırasıyla tanıyalım.

Host: Bağlantı yapılan URL'yi gösterir.

Cookie: Çerez verilerinin bulunduğu bölümdür.

Upgrade-Insecure-Requests: SSL kullanmak istenip istenmediğini bildirir. 1 ise kullanılır, https; 0 ise kullanılmaz, http olur :)

User-Agent: Bağlantı yapan kullanıcının: tarayıcı, işletim sistemi gibi bilgiler bulunur.

Accept: Kabul edilen dosya türlerini gösterir.

Accept-Encoding: İstek yapan tarafın hangi dosya türlerini anlayabildiğini gösterir.

Accept-Language: Hangi dillerinin kabul edildiğini gösterir.

Connection: Bağlantının nasıl devam edeceğini gösterir, örn. "close" verisi bulunuyor ise bağlantı kesilecektir. "Keep-alive" bulunuyor ise bağlantı devam eder.

-------------------------------------------------------------------


Request Message Body: Yukarıda bahsedilen bölümler dışında bulunan veriler içindir, Örn. POST metodunda post edilen verinin bilgisi yer alabilir.

------------------------------------------------------------------

HTTP Responses (HTTP Cevapları)


icqnpnd.jpg

----------------------------------------------------------------

Status Line: Her zamanki gibi protokol hakkında bilgiler ve HTTP Kodu bulunur. Bu kodlar sunucunun durumunu ve yapılan istek hakkında bilgi verirler

100-199: Bilgi (information)

200-299: Başarılı istek (successful)

300-399: Yönlendirme (Redirection)

400-499: İstemci tarafı hata (Client error responses)

500-599: Server tarafı hata (Server error responses)

------------------------------------------------------------------


Response Headers:

- Date: Tarih

- Connection: Yukarıda bahsettiğim gibi bu bağlantıdan sonra ne yapılacağını bildirir.

- Server: HTTP sunucusunun bilgileri bulunur

- Last-Modifed: İstenilen dosyanın son değiştirme tarihini belirtir.

- Content-Type: İstenilen dosyanın türü hakkında bilgiler verir.

- Content-Length: Gönderilen verinin boyutu hakkında bilgi verir

- Response Body: Sunucudan İstemciye gönderilen veriyi içerir

--------------------------------------------------------------------


SQL injection nedir? Nasıl yakalanır?

SQLi herkesin bildiği gibi doğrudan veritabanından veri sızdırmamızı sağlayan bir atak türüdür. 3 Çeşittir:

1. In-band SQLi (Klasik sqli): Aynı uzantıya gönderilmiş sqli sorguları bu kategoriye girer. Faydalanması diğer çeşitlere göre daha kolaydır.

2. Inferential SQLi (Blind SQLi): Sunucudan görünmeyen yanıt alan çeşittir. Blind SQLi olarak da bilinir çünkü yanıtlar gözükmez (en(Blind) = tr(Kör))

3. Out-of-band SQLi: Alınan cevap diğer kanallar üzerinden ulaşmasına denir. Örn. DNS üzerinden ulaştığı zaman

---------------------------------------------------------------------


SQLi Nasıl Çalışır

Bir login sayfasında kullanıcı adı ve şifre girdiğimizde arka planda şuna benzer sorgular atılır:

SELECT * FROM users WHERE username = 'USERNAME’ AND password = 'USER_PASSWORD'

pekala biz kullanıcı adı veya şifre bölümüne " 'USERNAME' " girer isek 2 adet tırnak işareti bulunacağı için sql sunucusu bize hatalı söz dizimi cevabını verecektir. Bu da bizim "Giriş yap" butonuna bastığımızda doğrudan SQL sunucusuna sorgu atığımız anlamına gelir.

Bu durumda bazı kalıplaşmış payloadlar vardır örn: "' OR 1=1 -- -"

Bu durumda SQL sorgusu olarak aşağıdaki sorgu atılır:

SELECT * FROM users WHERE username = ‘’ OR 1=1 – - AND password = 'supersecretpassword'

"-- -" işaretinden sonrası yorum olarak yapılandığı için bu işaretten sonrası yokmuş gibi davranıcaktır 1 her zaman 1'e eşit olduğu için şifre doğru olarak bir yanıt döndürecektir.

-----------------------------------------------------------------


SQLi Tespit Etme

- Kullanıcının girdiği değerleri incelemek

- SQL anahtar kelimeleri kontrol etmek: "INSERT, SELECT, WHERE" gibi sql söz diziminde bulunan kelimeler

- Özel karakter kontrolü yapmak: ('), (-) karakterlerini kontrol etmek

- Kalıplaşmış payload kelimelerin kontrolünü yapmak

--------------------------------------------------------------


Otomatik SQLi yakalama yöntemleri:

1. User-Agent bilgilerine dikkatli bakmak: Otomatik tarayıcı - brute force araçları User-Agent bölümünde kalıplaşmış bilgileri kullanırlar.

2. İsteklerin sıklığını kontrol etmek: Otomatik sqli araçları çok sık sorgu atarlar, bunu kaçırmamak önemli!

-------------------------------------------------------------

Küçük bir örnek.


51oe11t.jpg

yukarıdaki resimde gördüğünüz üzere bir sunucu logu bulunmaktadır.

Dikkatlice baktığınız zaman bu GET isteklerinin çok sık geldiğini görmekteyiz.

Peki bu bağlantı adresleri neden bu şekilde garip gözüküyor? Sebebi "URL ENCODE"

Örneğin arama çubuğuna "www.google.com/search/?q= " yazdığınız zaman boşluk yerine otomatik olarak "%20" işareti konulacaktır.

Aşağıda bazı işaretlerin url encode edilmiş hali bulunmaktadır.


iqenmlf.jpg

Bu durumda logumuzu decode ettğimiz zaman şu görüntü ortaya çıkmaktadır.

p9htwun.jpg

Gördüğünüz gibi bu bağlantı SQLi yapılmak için kullanılan kelimeleri içeriyor.

Cümlelerin en sonunda yazan bilgilere göre 200 kodu dönmüştür. Bu bağlantının başarılı olduğunu gösterir. Bu durumda bir WAF (Web Application Firewall) ürünü en doğru çözümlerden biri olacaktır.

NOT: Eğer WAF bulunursa genellikle 403 kodu dönecektir. Cümlelerin en başındaki IP adresleri bağlantının geldiği adreslerdir.

-------------------------------------------------------------------


XSS (Cross Site Scripting)

En doğru hatlarıyla url üzerinden php-javascript kodlarını çalıştırmaya olanak verir. 3 çeşiti bulunur:

1. Reflected XSS: URL üzerinden (saklanmayan) geçici saldırı türüdür.

2. Stored XSS: XSS payload dosyasını sunucuya upload etme durumudur, içlerinden en zararlı olanıdır.

3. DOM Based XSS:

-------------------------------------------------------------------


XSS nasıl çalışır?

"<p>Hello <?php echo $_GET['user']; ?>.</p>"

yukarıdaki koda sahip bir web sitemiz olduğunu düşünelim.

"https://www.test.site.com/?user=xKemikkiran" olarak bağlantı yaptığımızda

"Hello xKemikkiran" olarak bir cevap dönecektir.
Aynı zamanda "<script>alert(1)</script>" kalıbı da çokça kullanılmaktadır. Bu kalıp size bir pop-up penceresi çıkaracaktır.

Bu durumda XSS açığı bulunan sitelere JS ve PHP kodları yardımıyla istediğinizi yapabilirsiniz.
-----------------------------------------------------------------------


XSS Nasıl Tespit Edilir

9rk5gw9.jpg

---------------------------------------------------------------------

Gördüğünüz gibi URLler encode edilmiş şekilde bulunmaktadır, bunu decode ettiğimizde aşağıdaki gibi bir resim ortaya çıkmaktadır.


8sf8m8w.jpg

Gördüğünüz üzere gelen istekler çok sık bir şekilde olmaktadır.

URL Yollarına baktığımız zaman bir XSS açığını tespit etmeye çalıştığını görüyoruz.

User-Agent verisine baktığımız zaman "python-urllib3". Daha önceden bahsettiğim gibi user agent verileri kullanılan yazılım dili ve kütüphane ile ilgili olabilmekedir. Bu örnekte de python-urllib kütüphanesi kullanılmaktadır.

----------------------------------------------------------------------


Command Injection

Command Injection atakları kullanıcıdan alınan verileri ham şekilde işlendiği için oluşan bir açıktır.

2g07ifg.jpg

-----------------------------------------------------------------------

Nasıl Çalışır?

Örnek olarak kullanıcıdan POST metoduyla gönderilen dosyayı /tmp klasörüne kaydeden bir program düşünelim.

8zwle6v.jpg

Bu durumda gönderilen dosyanın "xkemikkiran;ls;.txt" olduğunu düşünelim.
Sonuç olarak PHP kodu "cp letsdefend;ls;.txt" komudunu çalıştıracaktır. Bash komudu olarak çalıştırdığı için ";" işareti kodun bittiği anlamına gelir ve sırasıyla "cp xkemikkiran", "ls", ".txt" komutları çalıştırır.

Peki bu gönderilen dosya "bluetam;shutdown;.txt" olsaydı? :)D).

-----------------------------------------------------------------


Nasıl tespit edilir?

Örnek bir user agent üzerinden ilerleyelim

GET / HTTP/1.1

Host: yourcompany.com

User-Agent: () { :;}; echo "NS:" $(</etc/passwd)

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9

Accept-Encoding: gzip, deflate

Accept-Language: en-US,en;q=0.9

Connection: close



Gördüğünüz üzere bu kez POST metodu yerine User-Agent bölümü yerinde bir kod parçası bulunmaktadır. Bunu engellemek için komutlar eğer istek içerisinde geçiyor ise devre dışı bırakılabilir.

--------------------------------------------------------------------


IDOR (Insecure Direct Object Reference)

IDOR Yetkilendirme servisini URL üzerinden yapan uygulamalar için bir çeşit manipülasyon yöntemidir.

------------------------------------------------------------------


IDOR nasl çalışır?

En basit olarak bir sosyal medya sitesi örnek verelim. Kullanıcı adınız "xkemikkiran" ve şifre değiştirme ekranında bulunuyosunuz. Bu ekranın URlsi:

"www.sosyalmosyal.com/rst-psswrd?user=xkemikkiran"

Bu durumda "user" verisi kullanıcı adını almaktadır. Peki bunu başka bir kullanıcı için yapar isek?
Bu kullanıcının, kullanıcı adı da "THT" olsun.

"www.sosyalmosyal.com/rst-psswrd?user="THT"

Bu durumda ben xKemikkiran olduğum halde THT kullanıcısının şifre değiştirme ekranına ulaşabilmekteyim.

--------------------------------------------------------------------


RFI & LFI Atakları

LFI (Local File Inclusion) Nedir?

LFI, kullanıcıdan alınan verinin işlenmeden bir dosyaya aktarıldığı saldırı türüdür. RFI'dan farkı yerel dossyaya bir yönlendirme yapar

--------------------------------------------------------------------


RFI (Remote File Inclusion) Nedir?

RFI, kullanıcıdan alınan verinin işlenmeden uzak bir sunucudaki dosyaya aktarıldığı saldırı türüdür.

----------------------------------------------------------------------


RFI & LFI nasıl çalışır?

"www.rfilfi.com/index.php?language=en" olarak bir bağlantıya sahip olduğumuzu düşünelim.

Bu bağlantı ise bizi yönlendirme ile şu linke gönderecektir:
"www.rfilfi.com/en/index.php" Bu durumda "language" parametresinin aldığı değer bağlantıya işlemektedir.

Eğer language parametresini " /../../../../../../../../../etc/passwd%00" yapar isek bizi şuraya yönlendirecektir:
"www.rfilfi.com//../../../../../../../../../etc/passwd%00/home.php"

"%0" dan sonrası bağlantıya dahil edilmediği için sonuç olarak şu şekil ortaya çıkacaktır:
"www.rfilfi.com//../../../../../../../../../etc/passwd"

"../" komudu linux üzerinde bulunduğunuz klasörün bir üst klasörüne erişme komudu olduğu için bu şekilde en üst klasöre ulaşabiliriz.
Ardından "/etc/passwd" komudu ise bize bulunduğu dosyanın içeriğini döndürecektir.

----------------------------------------------------------------------


RFI & LFI ataklarını nasıl önleriz?

Bu durumda, bağlantıda özel karakter durumu kontrol edilebilir.

Eğer kritik dosya adlarına aşina olursanız saldırıyı daha kolay tespit edebilirsiniz.

---------------------------------------------------------------------

Konu biraz fazla uzun oldu anlamadığınız veya anlatım hatası yaptığım yer varsa bildirirseniz sevinirim.
Ellerine sağlık güzel bir konu olmuş
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.