FireMan
4.10.2008, 21:40:30
Witam. Jeżeli pisze nie na temat, w złym dziale itp to BARDZO przepraszam

.
Mam takie pytanie. Czy znacie jakiś kody php które moge dodać do mojej stronki robie upload zdjęć coś ala imageshack.us i juz kolega z popisu 2 razy zhakował mi strone wgrał index.html i sie co innego pokazywało. Jak temu zapobiec ? Podobno w uploadzie nei ma zabezpieczeń i uploadnoł plik .html jako fote. Jak to zabezpieczyć ?
rodia
4.10.2008, 21:47:34
Jeśli ktoś ci tak zrobil to znaczy, że upload następuje do katalogu głównego - co jest błędem. Uploaduj zdjęcia do jakiegoś podkatalogu i po sprawie.
Poza tym podstawowa sprawa to kontrola rozszerzeń jakie są dozwolone. Jak uploadujesz plik to przecież jedna ze zmiennych w tablicy $_FILE to rodzaj pliku - tu sprawdzasz tym pliku no i po rozszerzeniu drugi raz.
Piszesz, że w uploadzie nie ma zabezpieczeń. A jak to sobie wyobrażasz? PHP ma mieć wbudowany mechanizm ochrony przed uploadem niektorych plikow? Kto zdecyduje jakich? Programista ma decydować i implementować zabezpieczenia. Potrzeby uploadu są tak szerokie, że PHP nie może ot tak sobie wbrew woli programisty zabronić uploadu np. pliku index.html.
FireMan
4.10.2008, 21:50:20
zdjęcia są uploadowane do pod katalogu /files/
rodia
4.10.2008, 21:53:50
W takim razie jak to możliwe, że zamiast pliku index.html jest wyświetlany plik files/index.html ?
No coś nie tak z tego co mowisz. Serwer ładuje pliki index.htm index.html i index.php ale tylko z katalogu głównego.
Czy jesteś pewien że ten plik index.html wrzucono ci przez opcje uploadu a nie inaczej? Poza tym czy jest to kompletny plik index.html ? czy tylko ma taką nazwę a jego treść wstrzykuje sie w znaczniki IMG lub inne?
FireMan
4.10.2008, 21:57:15
Jestem pewny ze index.html był przez upload dodany ja a on ukrył zdjęcie w kodzie i jak zrobił to to nie wiem powinno byc w /files/index.html a poszło do katalogu głównego.
rodia
4.10.2008, 22:02:54
Powiedz mi skąd masz pewność, że przez upload?
Podaj link do tej strony, zobaczymy.
marcio
4.10.2008, 22:08:07
Albo nie miales zabezpieczonego katalogu nadrzednego albo zrobil przekierowanie lub nadpisal ci twoj index z katalogu glownego
FireMan
4.10.2008, 22:10:23
macie www.upload2.yoyo.pl taki prototyp ;p tam to dał jeszcze mi mowił ze ukrył w focie kod czy coś takiego.
marcio
4.10.2008, 22:15:17
Nie mam nawet jak pozmieniac naglowki na kompie od mamy nie posiadam livethttpheaders i nie chce mi sie go instalowac wiec nie pomoge a bez zmiany naglowkow masz zabezpieczone
FireMan
4.10.2008, 22:17:49
Sory może jestem nie kumaty ale możesz jaśniej

?
marcio
4.10.2008, 22:20:51
Wrzucam jakis tam plik inny niz img i mam blad:
Cytat
Przepraszamy, Przepisy.rtf(application/octet-stream) wystapil blad.
To:
application/octet-stream) wystepuje w naglowkach wysylanych i mozna nimi manipulowac i teraz moze to zadzialac jesli filtrujesz pliki na podstawie tego naglowka jesli na podstawie rozszerzenia nie zadziala.
FireMan
4.10.2008, 22:23:16
No łapie powoli ale jak to zabezpieczyć ?
FireMan
4.10.2008, 22:30:23
Macie:
<?php
$MAX_SIZE = 500000000000;
$FILE_MIMES = array('image/jpeg','image/jpg','image/gif','image/bmp');
$FILE_EXTS = array('.jpg','.gif','.jpeg','.bmp');
$DELETABLE = false;
$site_name = $_SERVER['HTTP_HOST'];
$url_dir = "http://".$_SERVER['HTTP_HOST'].dirname($_SERVER['php_SELF']);
$url_this = "http://".$_SERVER['HTTP_HOST'].$_SERVER['php_SELF'];
$upload_dir = "files/";
$upload_url = $url_dir."/files/";
$message ="";
if (!is_dir("files")) {
if (!mkdir($upload_dir))
die ("upload_files katalog nie istnieje.");
if (!chmod($upload_dir,0755))
die ("Blad.");
}
if ($_REQUEST[del] && $DELETABLE) {
$resource = fopen("log32.txt","a");
fwrite($resource,date("Ymd h:i:s")."DELETE - $_SERVER[REMOTE_ADDR]"."$_REQUEST[del]\n");
fclose($resource);
if (strpos($_REQUEST[del],"/.")>0);
else if (strpos($_REQUEST[del],$upload_dir) === false);
else if (substr($_REQUEST[del],0,6)==$upload_dir) {
unlink($_REQUEST[del]);
print "<script>window.location.href='$url_this?message=deleted successfully'</script>";
}
}
else if ($_FILES['userfile']) {
$resource = fopen("log32.txt","a");
fwrite($resource,date("Ymd h:i:s")."upload - $_SERVER[REMOTE_ADDR]"
.$_FILES['userfile']['name']." "
.$_FILES['userfile']['type']."\n");
fclose($resource);
$file_type = $_FILES['userfile']['type'];
$file_name = $_FILES['userfile']['name'];
$file_ext = strtolower(substr($file_name,strrpos($file_name,".")));
if ( $_FILES['userfile']['size'] > $MAX_SIZE)
$message = "Maksymalny rozmiar pliku 5MB.";
else if (!in_array($file_type, $FILE_MIMES)
&&!in_array($file_ext, $FILE_EXTS) )
$message = "Przepraszamy, $file_name($file_type) wystapil blad.";
else
$message = do_upload($upload_dir, $upload_url);
print "<script>window.location.href='$url_this?message=$message'</script>";
}
else if (!$_FILES['userfile']);
else
$message = "Nieprawidłowo określony plik.";
$handle=opendir($upload_dir);
$filelist = "";
while ($file = readdir($handle)) {
if(!is_dir($file) &&!is_link($file)) {
$filelist .= "<a href='$upload_dir$file'>".$file."</a>";
if ($DELETABLE) {
$delfile = $file;
$delfile = str_replace("%","%25",$delfile);
$delfile = str_replace("&","%26",$delfile);
$delfile = str_replace("+","%2b",$delfile);
$delfile = str_replace("?","%3f",$delfile);
$filelist .= " <a href='?del=$upload_dir".$delfile."' title='delete'>x</a>";
}
$filelist .= "<sub><small><small><font color=grey> ".date("", filemtime($upload_dir.$file))
."</font></small></small></sub>";
$filelist .="<br>";
}
}
function do_upload($upload_dir, $upload_url) {
$temp_name = $_FILES['userfile']['tmp_name'];
$file_name = $_FILES['userfile']['name'];
$file_name = str_replace("\\","",$file_name);
$file_name = str_replace("'","",$file_name);
$file_path = $upload_dir.$file_name;
//File Name Check
if ( $file_name =="") {
$message = "Nieprawidłowa nazwa pliku określonego";
return $message;
}
$result = move_uploaded_file($temp_name, $file_path);
if (!chmod($file_path,0777))
$message = "Blad.";
else
$message = ($result)?"Link do pliku: www.upload2.yoyo.pl/files/$file_name " :
"Błąd.";
return $message;
}
$sciezka = './banlista.php';
$lista_ip = file($sciezka);
foreach($lista_ip as $ip)
{
if(eregi(trim($ip), getenv('REMOTE_ADDR')))
{
die('Nie masz dostępu do tej strony. Twój adres został zbanowany.');
}
}
?>
<html>
<head>
<link rel="shortcut icon" href="images/favicon.ico" type="image/x-icon">
<title>
Upload zdjęć
</title>
</head>
<body>
<center>
<font color=blue><?=$_REQUEST[message]?></font>
<br>
<form name="upload" id="upload" ENCTYPE="multipart/form-data" method="post">
Wrzuć zdjęcie <input type="file" id="userfile" name="userfile">
<input type="submit" name="upload" value="upload">
</form>
Dozwolone rozszerzenia: <b>.jpg .jpeg .gif .bmp</b><br>
Maksymalna wielkosc pliku: <font color="red">5MB</font>
<br>
<br>
<div style='position: width=70%;'><img src="images/belka1.jpg"></div>
</center>
<div style='position: absolute; top: 30px; left: 930px;'><img src="images/beta.jpg"></div>
<div style='position: absolute; top: -300px; left: 0px;'><img src="images/belka2.jpg"></div>
<div style='position: absolute; top: -300px; left: 1400px;'><img src="images/belka2.jpg"></div>
</body
</html>
oto i przyczyna
<?php
$file_type = $_FILES['userfile']['type'];
$file_name = $_FILES['userfile']['name'];
if ( $_FILES['userfile']['size'] > $MAX_SIZE)
$message = "Maksymalny rozmiar pliku 5MB.";
else if (!in_array($file_type, $FILE_MIMES) $message = "Przepraszamy, $file_name($file_type) wystapil blad.";
else
$message = do_upload($upload_dir, $upload_url);
?>
FireMan
4.10.2008, 22:41:03
No dzięki ale jak teraz to naprawić tą przyczyne bo nie jestem w php PRO

ja sie ucze dopiero i nie wiem jak sory za kłopoty.
marcio
4.10.2008, 23:16:28
Zamien kod wyzej na cos takiego:
<?php
$file_name = $_FILES['userfile']['name'];
$file_ext = explode('.', $file_name); $file_ext = $file_ext[count($file_ext)-1
];
if ( $_FILES['userfile']['size'] > $MAX_SIZE)
$message = "Maksymalny rozmiar pliku 5MB.";
else if(!in_array($file_ext, $FILE_EXTS)) $message = "Przepraszamy, $file_name($file_type) wystapil blad."; else do_upload($upload_dir, $upload_url);
?>
To tylko przyklad powinno dzialac
michalkjp
4.10.2008, 23:29:02
Jeśli chcesz robić coś takiego, to _proponuję_ zapoznać się z tym dokumentem, bo jest w nim _wiele_ _użytecznych_ wskazówek.
http://www.scanit.be/uploads/php-file-upload.pdf
Rzeczywiście, upload jest podatny. Aby wgrać shella wystarczy manipulacja nagłówkami przez live http headers. Oto rezultaty:
ScreenPS.
Shell został oczywiście usunięty z wiadomych powodów. Pozdrawiam.
FireMan
5.10.2008, 09:39:24
Cytat(marcio @ 5.10.2008, 00:16:28 )

Zamien kod wyzej na cos takiego:
<?php
$file_name = $_FILES['userfile']['name'];
$file_ext = explode('.', $file_name); $file_ext = $file_ext[count($file_ext)-1
];
if ( $_FILES['userfile']['size'] > $MAX_SIZE)
$message = "Maksymalny rozmiar pliku 5MB.";
else if(!in_array($file_ext, $FILE_EXTS)) $message = "Przepraszamy, $file_name($file_type) wystapil blad."; else do_upload($upload_dir, $upload_url);
?>
To tylko przyklad powinno dzialac
I teraz co chce uploadować to pisze ze błąd.
Cytat(michalkjp @ 5.10.2008, 00:29:02 )

Jeśli chcesz robić coś takiego, to _proponuję_ zapoznać się z tym dokumentem, bo jest w nim _wiele_ _użytecznych_ wskazówek.
http://www.scanit.be/uploads/php-file-upload.pdfgdybym mogl to ja bym ci dal plusa bo jakis czas temu szukalem tego dokumentu ;p
soory za offtop
// ADD
FireMan, najlepiej nadawaj plikowi nową nazwę zdefiniowaną przez system, zamiast polegac na nazwie pliku z tablicy $_FILES
michalkjp
5.10.2008, 13:06:52
Cytat(pyro @ 5.10.2008, 11:48:31 )

bo jakis czas temu szukalem tego dokumentu ;p
Warto przeczytać ten dokument i zrozumieć o co w nim chodzi, bo licho (nie hackerzy, tylko pryszczate nastolatki z nadmiarem wolnego czasu) nie śpi