CRLF Injection Nedir? Neden Oluşur ve Nasıl Önlenir?

PwnLab.Me

Admin
Katılım
21 Ocak 2024
Mesajlar
202
Tepkime puanı
9
Puanları
18
Devran Atuğ tarafından yazılmıştır.

[TR] CRLF Injection Nedir? Neden Oluşur ve Nasıl Önlenir?​


Crlf injection tam olarak anlamak için crlf kelimesinin ne anlama geldiğini öğrenmeniz gerekiyor. ‘CR’ ve ‘LR’ kombinasyonuna satır başı(\r) , yeni satır(\n) anlamlarına gelir. Bu acığın etkisi http yanıtını bölerek http üst başlığı ekleyebilirsiniz, bu şekilde web cache, xss, ve bazı durumlarda rate limit bypass gibi güvenlik açıklarına yükseltilebilir. Ayrıca loglar üzerinden oynamalar yapılabilir.​



Bu acık genelikle sitelerin geliştirilme şekline bağlıdır. Peki bu acık web sitesinde olduğunu nasıl anlarsınız derseniz, site içerisindeki seçtiğiniz GET isteğinin tutun ve intruder atın path kısmına github sayfasından alınan payload listesini kopyalayın ve intruder ile işaretlenmiş olan kısma dosya olarak verin ve başlatın. İstekler yanıtları içerisinden başlık kısımlarını kontrol ediniz sizin tarafınızdan yerleştirilmiş olan başlığını görün.​

Selection_001-300x207.png

Crlf ile xss acığına yükseltme örnekleri​

Crlf ile web cache acığına yükseltme örnekleri​

Crlf ile rate limit bypass örnekleri​

CRLF Injection nasıl önlenir ?​

  • Path kısmına girilen crlf payloadlarını direk olarak firewall dan banlabilir.
  • Gönderilen istek üzerinden hacker tespit edilir ve Honeypota yönlendirilebilir.
  • Encodelanmış karakterlerin replace methodu ile boşluk karakterine dönüştürülebilir.
  • İstek üzerinden alınan ‘\r’ ve ‘\n’ karakterlerinin Kâle alınmamalıdır.

Nodejs CRLF Injection Önleme ?​


Kod örneği alt tarafta verilmiştir.

var http = require(“http”)
var fs = require(“fs”);
var path = require(“path”);
var express = require(“express”)
var app = express();
var redirect = new Object();
var indexkontrol = function(req, res){
res.sendFile(path.join(__dirname,’index.html’));
console.log(“index sayfası”);
}
var dortyüzuc = function(req, res){
res.sendFile(path.join(__dirname, ‘login.html’));
console.log(“403 sayfası”);
}
redirect[“/index.html”] = indexkontrol;
redirect[“/403.html”] = dortyüzuc;
var server = http.createServer(function(req,res){
console.log(req.url);
var str = req.url;
var regex = /%00/i;
var request_regex = str.replace(regex, “”);
if (request_regex in redirect){
redirect[req.url](req, res);
console.log(request_regex);
}
})
server.listen(8000);

İlk önçelikle kodun temel amacı sırasıyla;

  1. Kullanıcı tarafından url kısmına girilen sayfa ismi alınıyor.
  2. Kod bu url kısmına girilen sayfa ismini str değişkenine atıyor.
  3. Tekrardan bir değişken oluşturuldu ve değişken adı regex oldu bu kısma crlf acığının meydana gelen bazı özel karakterler değişkene atanıyor.
  4. Str değişkenine girilen değer ve regex değişkenin içerisine yazılan filterelenmesi gereken içeriği “request_regex” değişkeninde karşılaştırılıyor eğer regex değişkenin içerisinden çıkan değerler str değişkeninde bulunur ise bunu direk olarak boş bir karakterle değiştiriyor.
  5. Sonrasında request_regex içerisinden alınan değer if ile birlikte böyle bir sayfanın olup olmadığını redirect içerisinden kontrol sağlanıyor.
  6. Eğer sayfa bulunmaz consola “böyle bir sayfa yok” yazdırıyor.
 
Moderatör tarafında düzenlendi:
Geri
Üst