漏洞的介绍
如果开发者对上传的内容过滤不严密,就可能会存在文件上传漏洞。如果上传的文件能够解析,或者可以配合文件上传漏洞,就可以获取服务器的权限,从而造成不好的影响。
一.Low
首先,先查看源码。
这个源码的基本意思是,将接收到的文件,上传到“hackable/uploads/”中,并且将路径返回,并没有什么限制条件,可以任意上传。
上传完成后,会出现一下信息:
显示上传成功
抓包如图所示:
二.Medium
还是按照低级的操作,来上传muma.php文件,发现如下图所示:
也就是说,切换到中级以后,此时无法上传php格式的文件,只能上传png或jpeg的文件格式。
我们此时在看源代码:
![]() |
注:这里声明了三个变量,分别限制了类型必须是image/jpeg或image/png,大小必须小于1000B。
发现,在Medium等级下的上传,限制了文件的类型和大小。
我们可以先看一下抓的包:
这个图出现了乱码,说明是上传不成功的。
我们再看源代码,发现不可以上传php类型文件,并且大小也不符合 。
如下图所示:
存在乱码的原因是:文档的大小超过了最大值。
我们在这个页面,点击鼠标右键,
选择这个选项,可以打开这个页面:
在左侧位置进行修改,完成之后点击send,在右侧看是否上传成功。
在箭头位置发现文件上传成功
三.High
在上传muma.php测试文件,发现如图所示。
出现了乱码,上传也不成功。
我们看到给的提示也是php类型文件不能上传,只能上传jpeg或png的文件类型。
我们在采用更改类型和大小的方式进行测试。
发现还是不能上传。
经过我们尝试,低级和中级的方法都无法成功上传文件。
我们看一下高级的源代码:
分析:
首先利用strrpos() 函数来查找“.”在变量$uploaded_name 中出现的位置,然后将得到的数值加1,最后利用substr()函数从变量$uploaded_name的指定位置截取部分字符串。所以这条语句的作用就是从我们所上传的文件名中截取出扩展名部分。接下来就用if语句来判断这个扩展名是否是大写或小写的jpg/jpeg,如果不是的话则不允许上传。
如果要挖出上传的漏洞,那么就可以在网页代码中搜索$_FILES这个用于接收上传文件的变量,或是搜索move_uploaded_file这个用于执行上传操作的函数,然后再分析是否采取了过滤措施。
我们可以尝试修改文件的后缀,看看是否可以上传成功。
发现仅仅修改文件的后缀,没有成功。
我们也可以在文件内部修改格式,在文件头部加入jpg格式的GIF89,把这个php文件做成了png图片格式。
然后修改后再进行:
发现:
发现带有php文件的png图片上传成功。
附:bp的使用步骤
①在浏览器上开启代理:
②在上传文件前,开启抓包。
③抓到包时,点击鼠标右键,选择:
④在左侧进行修改后,点击send,在右侧查看是否上传成功。