文件上传漏洞2-常规厂商检测限制绕过原理讲解
一.厂商检验限制方式:
我们先将DVWA的级别调为中级别。
进入文件上传功能点,点击查看源代码:
|
相较于低级别的文件上传它多了一下代码进行校验机制:
$uploaded_name = $_FILES[ 'uploaded' ][ 'name' ]; /*获取文件名字
$uploaded_type = $_FILES[ 'uploaded' ][ 'type' ]; /*获取文件类型
$uploaded_size = $_FILES[ 'uploaded' ][ 'size' ]; /*获取文件大小
// Is it an image? /*判断获取的文件类型是否属于image/jpeg文件
if( ( $uploaded_type == "image/jpeg" || $uploaded_type == "image/png" ) &&
( $uploaded_size < 100000 ) ) {
如果我们依然传上去一个php文件它就会检测到并不属于image/jpeg文件。
这就是常规所增加的校验机制。
二.绕过原理分析:
厂商获取文件类型,并且直接对获取的文件类型进行校验,那我们需要研究他是从哪里获取
的文件类型,我们利用bp抓包进行研究。
我们依旧上传fjw.php查看数据包。
可以看到上传失败,说明校验机制起了作用。
在数据包中我们发现是Content-Type传递的文件类型。
那我们或许也可以通过修改数据包Content-Type为image/jpeg发送给目标服务器让其检验通过
或许可以进行绕过机制。下面进行尝试:
第一步.依旧上传文件:
第二布.抓取数据包并修改类型。
我们自主将Content-Type:改为image/jpeg进行放行。
可以看到我们上传成功,成功的绕过了检测机制。
逆向思维拓展:
我们既然可以改变Content-Type类型,去绕过检验如果厂商直接检验文件后缀类型怎么办:
第一步:我们可以先修改fjw.php为fjw.jpg
然后我们依旧上传抓包:
我们查看数据包
可以看到他自动的将Content-Type识别为image/jpeg,那么我们的jpg文件上传上去可以用吗?
答案是当然不可以的。
第二布:我们将filename="fjw.jpg"改为:fjw.php,放包。
可以看到成功的上传文件。
以上就是中级别常规的文件上传绕过机制。