upload漏洞遇到的问题

本文深入探讨文件上传漏洞的原理及利用方法,包括不同中间件下的漏洞特点与绕过技巧,并提供实战案例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述
一些资源放在了github

文件上传漏洞,即在用户可控上传文件处,没有进行严格的过滤,导致用户上传了某些非法扩展名的文件,例如php,asp文件。结果导致网站被getshell。

练习最好的是upload-labs

upload-labs遇到的问题

第3关尝试上传phtml,php3,php4,php5,pht等文件后显示没有文件。
靶机使用iis中间件7.0版本
第4关非常严格的黑名单,本地环境iis7.0,但是不满足畸形漏洞利用条件。apache可以.htaccess绕过
第11,12关%00截断需要满足

1.php版本<5.3.4
2.magic_quotes_gpc为off

第14关jpg不行

测试代码

$filename='webshell.png';
$file = fopen($filename, "rb");
$bin = fread($file, 2); //只读2字节
fclose($file);

$strInfo = @unpack("C*chars", $bin);    
print_r($strInfo);// Array ( [chars1] => 137 [chars2] => 80 )

$typeCode = intval($strInfo['chars1'].$strInfo['chars2']); 
print_r($typeCode);// 13780

list($width, $height, $type, $attr) = getimagesize($filename);
print_r($height);// 1752197486
print_r($type);// 3
print_r($attr);// width="1752113264" height="1752197486"
    
$ext = image_type_to_extension($info[2]);
print_r($ext);// .png
   
$types = '.jpeg|.png|.gif';
$a=stripos($types,$ext);
print_r($a);// 6
 
$exif=exif_imagetype($filename);
print_r($exif);// 3

中间件漏洞利用

有时白名单限制的时候只能上传图片格式的文件,这时利用中间件解析漏洞可以实现php解析器解析我们上传的图片文件,从而进行getshell。

iis6文件/目录解析漏洞原理
https://www.cnblogs.com/l1pe1/p/9210094.html
从左侧找,先找. => 找;截断 =>找/截断
/aaa.asp;xxxx.jpg
aaa.asp/xxx.jpg

iis7/nginx畸形漏洞原理
https://xxx.com/a.jpg/.php
.php结尾于是nginx把如下环境变量法给fpm

 }
    ...
    'SCRIPT_FILENAME': '/var/www/html/a.jpg/.php',
    'SCRIPT_NAME': '/a.jpg/.php',
    'REQUEST_URI': '/a.jpg/.php',
    'DOCUMENT_ROOT': '/var/www/html',
    ...
}

正常来说,SCRIPT_FILENAME的值是一个不存在的文件/var/www/html/a.jpg/.php,是PHP设置中的一个选项fix_pathinfo导致了这个漏洞。PHP为了支持Path Info模式而创造了fix_pathinfo,在这个选项被打开的情况下,fpm会判断SCRIPT_FILENAME是否存在,如果不存在则去掉最后一个/及以后的所有内容,再次判断文件是否存在,往次循环,直到文件存在。
正确的解决方法有两种,一是在Nginx端使用fastcgi_split_path_info将path info信息去除后,用tryfiles判断文件是否存在;二是借助PHP-FPM的security.limit_extensions配置项,避免其他后缀文件被解析。

(引用https://www.leavesongs.com/PENETRATION/fastcgi-and-php-fpm.html)

apache解析漏洞
1.从右向左找能识别的扩展名
a.php.txt.uytr当成php解析
2. .htaccess文件,设置上传文件作为php解析

<FilesMatch "myfile">
	SetHandler application/x-httpd-php
</FilesMatch>
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值