[php GOTOWIEC] Uploader plików graficznych...

Dark Smark

Były Moderator
Dołączył
Kwiecień 29, 2006
Posty
1953
Pisałem dla kolegi, w 100% moje dzieło. Wszelkie sugestie komentarze, uwagi, błędy proszę zgłaszać do mnie.
Zanim zadasz pytanie przeczytaj kod, jest dość bogato skomentowany. Szczególnie przeczytaj konfiguracja.txt. Kto zna podstawy html to szybciutko zamontuje na darmowym szablonie.
W skrócie: Jest to skrypt pozwalający na wgrywanie plików graficznych (jpg wszelkiego typu, gif, png) na serwer ftp przez przeglądarkę. Coś jak fotosik
smile.gif
. Jest dość bezpieczny bo sprawdza czy plik jest grafiką.

Zawartość pliku index.php:
Kod:
<center>

<FORM ENCTYPE="multipart/form-data" action="up.php" method=post>

<FORM ENCTYPE="multipart/form-data" method=post>



[b]Uploaduj fotke:[/b]
Dozwolone pliki:  *.gif, *.jpg, *jpeg, *.png, 

Limit wielkosci: 500 KB </p>

<INPUT TYPE="FILE" NAME="plik" SIZE="30">

<INPUT TYPE="SUBMIT" VALUE="WYSLIJ">

</form></center>
Zawartość pliku up.php:
Kod:
<?php

/* 

Komentarz: Skrypt uploadujacy pliki graficzne.

Licencja: Open Source

Data: 17.stycznia.2008

Autor: Dark Smark

E-mail: sirsmark[MAŁPA]wp.pl

[url]http://www.cracker.xt.pl/[/url]



*/



echo "<center>";



//---Konfigurator---//



//wybierz katalog do ktorego wrzucac

$katalog = 'pliki/'; 



//Losuj poczatek nazwy pliku z przedzialu

$losuj = rand(99, 9999999); 



//Wpisz adres twojej strony na ktorej ma dzialac skrypt

$adres = 'http://127.0.01/'; 



//Maksymalny rozmiar pliku (w bajtach!) to 0,5mb (przeliczalem, chyba dobrze)

$rozmiar = 540000; 



//Wpisz rozmiar pisemnie.

$rozmiarpis = "0,5mb"; 



////////////////////







//---ustawka---//

$pliczek = $_FILES['plik']['name'];

$pelnasciezka = $adres.$katalog.$losuj.$pliczek;

$wielkoscpliku = $_FILES['plik']['size'];

chmod ($katalog, 0777);

////////////////







//---skrypt wrzucajacy---//

//Sprawdza czy nie ma bledu (numer 0 nie jest bledem!)

if ($_FILES['plik']['error'] > 0) 

{

echo 'Jakis blad? Sprobuj ponownie!';

chmod ($katalog, 0644);

exit;

}



if ($wielkoscpliku >= $rozmiar)

{

echo "Za duzy rozmiar pliku, dopuszczalnie do $rozmiarpis!";

chmod ($katalog, 0644);

exit;

}





//Sprawdz czy to plik graficzny

if ($_FILES['plik']['type'] != 'image/gif' AND $_FILES['plik']['type'] != 'image/jpeg' AND $_FILES['plik']['type'] != 'image/png')

{

echo 'Plik nie jest grafika!';

exit; //Dla bezpieczenstwa dalsze wykonywanie skryptu przerwane BARDZO WAZNE!

chmod ($katalog, 0644);

}



//Wrzuc i podaj lokacje

if(move_uploaded_file($_FILES['plik']['tmp_name'], $katalog.$losuj.$_FILES['plik']['name']))

{

echo 'Plik zostal wrzucony! ';

echo 'Link do obrazka: [url="'.$pelnasciezka.'"]'.$pelnasciezka.'[/url]';

chmod ($katalog, 0644);

}

else

echo 'Jakis blad? Sprobuj ponownie!';

chmod ($katalog, 0644);



////////////////////

echo "</center>";



/*

Uwagi koncowe:

-Konfigurator: 

Katalog - zawsze podawaj z ukosnikiem przyklad: 'pliki/'

Losuj - staraj sie podawac dosc duzy zakres by plik nie nadpisal drugiego pliku

Adres - poprzedz "http://" i zakoncz ukosnikiem przyklad: 'http://127.0.01/'

Dla bezpieczenstwa wlaczyc safe_mode!

*/



/*

Czeste problemy:

Sprawdz czy zastosowales sie do uwag koncowych.

Sprawdz czy folder przechowywujacy pliki istnieje.

Sprawdz czy sa ustawione prawa dostepu (chmody) na 777.

*/

?>
Zawartość pliku konfiguracja.txt:
////////////////////////////////////////////////////////
Komentarz: Skrypt uploadujacy pliki graficzne.
Licencja: Open Source
Data: 17.stycznia.2008
Autor: Dark Smark
E-mail: sirsmark[MAŁPA]wp.pl
http://www.cracker.xt.pl/
////////////////////////////////////////////////////////


1) Sprawdzamy czy w katalogu są pliki:
-Konfiguracja.txt
-index.php
-up.php
-katalog "pliki"

2) Otwieramy za pomocą edytora tekstowego up.php
Od 14 do 31 lini kodu znajduje się "konfigurator"
Uzupełniamy go wedle swoich potrzeb

3) Wrzucamy pliki na serwer ftp lub stawiamy apache:
-up.php
-index.php
-pliki

4) Nadajemy prawo dostępu (chmod) dla folderu "pliki" (777)

5) Testujemy

////////////////////////////////////////////////////////[/b]
Stwórz jeszcze folder pliki.

Gotowiec download (wszystkie pliki):
http://www.smark.w8w.pl/uploader_obrazkow_by_smark.rar

Sprawdź jak działa tutaj:
http://smark.w8w.pl/uploader.php
//Pliki zostają po krótki czasie usunięte, to tylko testowe
smile.gif
 

h4x

Użytkownik
Dołączył
Styczeń 6, 2008
Posty
107
ej, a podasz mi aders tej stronki kumpla?
Bo wlasnie szukam fajnego shella pod bota...

//a tak na serio, to zostan przy tym swoim delphi, bo popelniles chyba wszystkie mozliwe bledy w tym skrypcie.
 

grzonu

Były Moderator
Dołączył
Grudzień 26, 2006
Posty
1390
jak sie komus wytyka błędy to tez sie je wskazuje. Możesz powiedziec jakie błedy popełnił?
 

h4x

Użytkownik
Dołączył
Styczeń 6, 2008
Posty
107
bym cie pokazal i to na czerwono, ale koles ma safe mode na hostingu.
 

Dark Smark

Były Moderator
Dołączył
Kwiecień 29, 2006
Posty
1953
O jakie błędy Ci chodzi?
[+] Każda zmienna ma przypisaną wartość.
√ Na początku sprawdza czy nie wywala błędu.
√ Sprawdzanie typu MIME (zapobiega wykonywaniu wszelkiego typu skryptów)
√ Sprawdzanie wielkości pliku
√ safe_mode uniemożliwia wykonanie poleceń systemowych wprost ze skryptu
√ Zmienia prawa dostępu po zakończeniu uploadu
Po co niby mam filtrować tutaj zmienne jeżeli posiadają kod php/html? Widzisz jakieś zagrożenie? ;/
 

grzonu

Były Moderator
Dołączył
Grudzień 26, 2006
Posty
1390
Originally posted by h4x
bym cie pokazal i to na czerwono, ale koles ma safe mode na hostingu.

przeciez możesz pokazać w kodzie przecież został udostępniony.

@DarkSmark
Daj mu się wykazać
 

h4x

Użytkownik
Dołączył
Styczeń 6, 2008
Posty
107
Sprawdzanie typu MIME (zapobiega wykonywaniu wszelkiego typu skryptów)[/b]
i tu sie mylisz. Mime moge wyslac jakie chce, a php i tak sie wykona. Sprawdz se ile masz plikow php w swoim katalogu

safe_mode uniemożliwia wykonanie poleceń systemowych wprost ze skryptu[/b]
nie wszedzie jest, ciebie uchronilo


ogolnie u sux
 

Dark Smark

Były Moderator
Dołączył
Kwiecień 29, 2006
Posty
1953
i tu sie mylisz. Mime moge wyslac jakie chce, a php i tak sie wykona. Sprawdz se ile masz plikow php w swoim katalogu[/b]
Rzeczywiście, szczerze to myślałem że sprawdzanie typu MIME jest wystarczającym zabezpieczeniem. W sumie to nie wiem co jest grane. Ogólnie cracker sux :glupek2:
 

h4x

Użytkownik
Dołączył
Styczeń 6, 2008
Posty
107
W sumie to nie wiem co jest grane.[/b]
$_FILES['plik']['type'] zawiera naglowek content-Type wysylany przez przegladarke, a to ma sie nijak do rozszerzenia pliku, ktore jest interpretowane przez serwer.

Najpierw naucz sie php, a potem pisz 'dla kogos'.
 

nowy_me

Użytkownik
Dołączył
Luty 7, 2007
Posty
451
Originally posted by h4x
$_FILES['plik']['type'] zawiera naglowek content-Type wysylany przez przegladarke
próbowałem modyfikować nagłówek Content-Type w LiveHttpHeaders, ale coś nie poszło, mógłbyś napisać jak to zrobić?
 

Reptile ReX

Użytkownik
Dołączył
Maj 15, 2007
Posty
248
OOO pierwszy raz widzę aby ktoś tak jechał po Smarku hłehłe ;]

Najpierw naucz sie php, a potem pisz 'dla kogos'.[/b]

co do tematu Pomysł fajny w google jest tego dużo ale z dziurami ten na pewno jest lepiej zabezpieczony od innych ogólnie dostępnych
 

h4x

Użytkownik
Dołączył
Styczeń 6, 2008
Posty
107
wlasnie napisalem, zeby nie bylo ze nie umiem czy cus:
Kod:
<?php

ini_set('max_execution_time', '1'); //tylko jesli nie masz dostepu do php.ini

while(file_exists(($file=$_SERVER['DOCUMENT_ROOT'].'pliki/'.($x=sha1(rand().rand().rand().rand())))));

if(isset($_FILES['plik'])&&($_FILES['plik']['error']===0)&&($_FILES['plik']['size']<=524288)&&move_uploaded_file($_FILES['plik']['tmp_name'], $file))echo '[b]Twoj link:[/b]
<input type="text" value="http://localhost/pliki/'.$x.'" size="100" />'; else echo 'error';

?>
moznaby z tego zrobic 1-linijkowca, ale to nie bedzie dobry przyklad dla co niektorych ;]
 
Do góry Bottom