Hoşgeldin Misafir

HTTP Verb Tampering Anlatimi

CWGaZaNFeR

15 Ağu 2023
407 Mesaj

Aktiflik

Seviye

Deneyim

TIM / GÖREV:
Es-selamun aleykum

HTTP Verb Tampering, saldirganlarin bir web sunucusuna gonderilen HTTP isteklerindeki HTTP metodu degerlerini degistirerek, sunucunun beklenmedik bir sekilde davranmasina neden olan bir saldiri turudur ve dolayisiyla da web uygulamalarinin guvenligi acisindan onemli bir konudur. Boylece saldirganlar, yetkisiz islemler gerceklestirebilir, kullanici verilerine erisebilir ya da web uygulamasinin cokmesine neden olabilirler. Bu sebepten oturu, web uygulama gelistiricileri ve guvenlik uzmanlari, HTTP Verb Tampering saldirilarina karsi onlem almak icin etkili yontemler gelistirmelidirler. Bu yazida, HTTP Verb Tampering saldirilarina yakindan bakacak ve bu saldirilari onlemek icin alinabilecek onlemleri ele alacagiz.

HTTP Verb” tanimini kafa karistirmadan, bildiginiz “HTTP Methods” olarak dusunebilirsiniz. Iletilen komutlari isletme gorevi HTTP sunucuya aitse, sunucunun yapacagi islemler ve donusleri de “Fiil” olarak degerlendirilir. Bu sebeple ilgili tabir uygun gorulmustur.

HTTP Verb Tampering, bir web uygulamasina gonderilen HTTP isteklerinin degistirilerek beklenmeyen davranislar elde edilmesine olanak taniyan bir saldiri turudur. Bir saldiri yontemi olarak kullanilan bu durum, web uygulamasi icin kullanilan HTTP yontemlerinin (GET, POST, PUT, DELETE vb.) yanlis veya kotuye kullanimi yoluyla gerceklestirilir.

Örnegin bir uygulamanin bizden bekledigi olagan GET istegi yerine, olusturulmus POST istegi gonderilmesiyle, bir formun yanlis sekilde islenmesine veya dogrudan bir veritabanina erisim saglamasina neden olunabilmektedir. Istegin bu yolla basari saglamasi neticesinde, bir web uygulamasindaki gizli verilerin calmasi veya uygulamada yanlislikla zararli kod calistirmasi sonuclariyla karsi karsiya kalinabilmektedir.

Asagida, bir HTTP Verb Tampering saldirisina olanak taniyan ornek kodlara dair ornekler yer almaktadir:

Örnek-1: Bir web uygulamasina gonderilen POST istegi, bir saldirgan tarafindan GET istegine donusturulebilir:

HTML:
<form method="post" action="/processform">
<input type="text" name="username" />
<input type="password" name="password" />
<input type="submit" value="Login" />
</form>

Saldirgan, bu formda yer alan "method" ozelligi olan “POST” tipinde istegi "GET" olarak degistirerek formu bu sekilde gonderebilir:

HTML:
<form method="get" action="/processform">
<input type="text" name="username" />
<input type="password" name="password" />
<input type="submit" value="Login" />
</form>

Bu saldiri, izinsiz bicimde kullanici hesap bilgilerini goruntulemek icin kullanilabilir.

Örnek-2: Bir web uygulamasina gonderilen GET istegi, bir saldirgan tarafindan PUT istegine donusturulebilir:

HTML:
<img src="/profileimage?id=987" />

Saldirgan, bu img etiketini bir PUT istegi ile degistirerek ilgili profil resminde manipulasyon saglayabilir:

HTML:
<img src="/profileimage?id=987" method="put" />

Ilgili aktivitenin saldiri maksadiyla yapildigini dusunecek olursak, bir kullanicinin profil resmini degistirip bunun izinsiz/ele gecirilen hesap uzerinden yapildigini adminlere o kullaniciymis gibi bildirip, ikna ederek hesabi hizli bicimde askiya aldirtabilirsiniz en basitinden.

Bu tur saldirilardan korunmak icin, uygulama gelistiricileri web uygulamalarinin gelen istekleri dogru bir sekilde islediginden ve manipule edilmediginden emin olmak icin bazi guvenlik onlemleri almalidir. Örnegin, uygulama gelistiricileri, HTTP yontemlerinin dogru bir sekilde kullanildigini dogrulamak icin kod icerisine veri dogrulama kisimlari ekleyebilirler.

Bu baslik altinda sorun olusturabilecek bir diger durum da “X-HTTP-Method-Override” “header”idir. HTTP istegindeki method degerini degistirmek icin kullanilan bir header’dir. Bu header, ozellikle RESTful web servislerinde HTTP methodlarinin kisitlandigi durumlarda kullanilabilir. Bu kisitlama ozellikle web uygulamalarinda guvenlik nedeniyle yapilir. Örnegin, bir web uygulamasinda sadece GET ve POST methodlarinin kullanilmasina izin verilir ve bu methodlar disindaki istekler engellenir. Ancak bu durumda bazi durumlarda diger methodlara da ihtiyac duyulabilir. Bu gibi durumlarda X-HTTP-Method-Override header’i kullanilarak oncelikle POST methodu ile bir istek yapilir ve istekteki X-HTTP-Method-Override header’i ile istenen method belirtilir.

Örnegin, bir RESTful web servisinde bir kaydin guncellenmesi PUT methodu ile gerceklestirilirken, web uygulamasi sadece GET ve POST methodlarini destekliyor olabilir. Bu durumda, kaydin guncellenmesi icin bir POST istegi gonderilir ve X-HTTP-Method-Override header’i ile PUT methodu belirtilir:

Kod:
POST /update-record.php HTTP/1.1
Host: www.example.com
Content-Type: application/x-www-form-urlencoded
X-HTTP-Method-Override: PUT

record_id=1234&name=Turkhacks

Dogru sekilde yetkilendirme ve dogrulama mekanizmalari olusturmadigi takdirde, ilgili header kullanilarak, bypass icin sonradan hazirlanmis, isletilmek uzere farkli metod iceren bir paket ile bu aksiyon saglanabilmektedir.

Asagida Python ile hazirlanmis kodu, HTTP Verb Tampering aktivitesi oncesi basit tespit icin kullanabilirsiniz. Çalisma bicimi ise; belirlenmis bir URL'ye HTTP methodlarinin sira sira, standart bir sekilde ve X-HTTP-Method-Override header'i kullanilarak gonderilmesi saglanir. Ardindan, iki yanitin durum kodlari karsilastirilir ve farkli ise, sunucunun HTTP Verb Tampering saldirisina karsi savunmasiz oldugu sonucu cikarilabilir. Bu kodun kullanimi, web uygulamalari icin guvenlik testlerinde faydali olabilir.

Kod:
import requests

# HTTP methodlarinin listesi
http_methods = ['GET', 'HEAD', 'POST', 'PUT', 'DELETE', 'CONNECT', 'OPTIONS', 'TRACE', 'PATCH']

# Test edilecek URL
url = 'http://testphp.vulnweb.com/'

# HTTP methodlarinin test edilmesi
for method in http_methods:

# Varsayilan olarak HTTP istekleri olusturulmasi
response = requests.request(method, url)

# X-HTTP-Method-Override header'i ile HTTP istegi olusturulmasi
response_x = requests.post(url, headers={'X-HTTP-Method-Override': method})

# HTTP response sonucunun dogrulanmasi
if response.status_code != response_x.status_code:

print(f'X-HTTP-Method-Override header\'i ile {method} methodu destekleniyor!')

Haricinde, kapsamli olarak bir HTTP Verb Tampering tespitini asagidaki Nmap uzerinde NSE scripting yardimiyla saglayabilirsiniz. Yapmaniz gereken sadece “http-method-tamper” olarak herhangi arama motorunda sorgu yaparak ilgili koda ulasabilirsiniz. Haricen, kullanim amaciniza gore de ozellestirebilirsiniz.

Kod:
# Kullanim Ornekleri:

nmap -sV --script http-method-tamper <target>

nmap -p80 --script http-method-tamper --script-args 'http-method-tamper.paths={/protected/db.php,/protected/index.php}' <target>

WWW uzerinde yayin yapan cogu Web uygulamasi, dogrudan kendisi ya da bagli oldugu “Service Provider” kabiliyetleri dahilinde yapacagi is ortakliklariyla, gelen isteklerdeki herhangi bir manipulasyon girisimini tespit etmek ve engellemek icin web uygulama guvenlik duvari (Web Application Firewall - WAF) gibi guvenlik araclari kullanabilirler. WAF'lar, web uygulamalarina gelen trafikleri “real-time” filtrelemeyle, zararli trafiklerden arindirir ve sadece guvenli trafikleri uygulamaya yonlendirirler.

Asagidaki PHP ornegi, HTTP Verb Tampering saldirisindan basitce nasil korunabilecegine dair fikir verebilir:

PHP:
php
if (class=hljs-variable>$_SERVER['REQUEST_METHOD'] !== class=hljs-string>'POST') {
    class=hljs-keyword>die("Invalid Request");
}
 
class=hljs-variable>$username = $_POST[class=hljs-string>'username'];
class=hljs-variable>$password = $_POST[class=hljs-string>'password'];
 
class=hljs-comment>// Veri dogrulama islemleri
class=hljs-keyword>if (!empty(class=hljs-variable>$username) && !class=hljs-keyword>empty($password)) {
    class=hljs-comment>// Dogru islemler yap
} class=hljs-keyword>else {
    class=hljs-keyword>die("Lutfen kullanici adi ve sifrenizi girin.");
}

Bu kod, sadece POST isteklerinin islendigini kontrol eder ve dogru veri girisi yapildigini dogrular. Bu tur dogrulama islemleri, web uygulamasinin HTTP Verb Tampering saldirilarindan korunmasina yardimci olur.

Toparlayacak olursak, HTTP Verb Tampering saldirilari, web uygulamalari icin onemli bir tehdit olusturur ve uygulama gelistiricileri, dogru guvenlik onlemlerini alarak bu tur saldirilardan korunabilirler. Alinabilecek tedbirler anlaminda yukarida bahsedilenlerle beraber; web uygulamasinin dogru sekilde yapilandirilmasi, girdi dogrulama ve istek filtreleme, yetkilendirme kontrolleri ve SSL/TLS gibi guvenli protokollerin kullanimi yer almaktadir. Ayrica, HTTP methodlarinin ihtiyaca uygun, dogru bir sekilde kullanilmasi ve X-HTTP-Method-Override header'inin kullaniminin sinirlanmasi da onemlidir.

misyon dahilinde kullanin

selam ve dua ile