Wykorzystanie błędów w fopen() |
W tym texcie opisze na czym polegają błędy w wykorzystaniu funkcji PHP jaką jest fopen() i fread()
Jeśli macie jakieś problemy to: michal@elektrobit.com.pl lub GG# 2222545
Zaprzaszam na strone www.deep-under.com ;) Greetz for speTZnut
---/ Przykład błedu /---
Dziurę taką poznajemy tak samo jak bug z include() czyli np.
http://www.ofiara.com/index.php?id=start.htm
Kod ktory otwiera daną strone z wykorzystaniem fopen() i fread() może wyglądać
np. tak:
<?
if(!isset($id)) { $id='start.htm'; }
if ($id=="") {$id='start.htm';}
if (file_exists($id)){
$file=fopen($id,'r');
$dane=fread($file,filesize($id));
echo($dane);} else { echo('Nie ma takiej strony');}
?>
Teraz małe wytłumaczenie. Funkcja isset() sprawdza czy zmienna podana w paramatrze
istnieje. Następnie jeśli nie istnieje zmiennej $id przypisujemy wartość "start.htm"
jeśli zaś istnieje otwieramy plik ktory jest w nij podany po uprzednim sprawdzeniu czy istnieniu (funkcja file_exists() ) a następnie odczytujemy z niego całą zawartość i wyświetlamy na stronie za pomocą echo()
Co dzięki temu możemy osiągnąć?? Między innymi przeglądać pliki na serwerze.
A teraz sposób jak to zrobić:
W oknie przglądarki wpisujemy
http://www.ofiara.com/index.php?id=index.php
Dzięki temu widzimy kod źródłowy pliku index.php
Możemy to także wykorzystać aby odczytać np. plik z hasłami
http://www.ofiara.com/index.php?id=/etc/passwd
Ale uwaga jeśli hasła są ukrywanie (shadow) w pliku /etc/shadow
to małe są szanse że go odczytamy. Dlaczego??
Ano dlatego że przeglądając w ten sposob pliki mamy uprawnienia takie na jakich jest uruchomiony serwer WWW.
Jak narazie to tyle jeśli ktoś ma ochote może dopisywać kolejne sposoby.
Jeśli coś nie działa piszcie na mail lub na gg ( podałem na górze textu )
[root@localhost]# whoiam
Vengeance
[root@localhost]#
Początek formularza
Dół formularza