概述
上传流程
前端绕过
前端的js做了限制
我们找到上传点不急着上传文件,先看看控制台是不是前台用js做了限制只能上传jpg,png等
看到有个onchange参数 我们看看页面源码
果然只是通过前端的js验证
这个时候我们在控制台里面把onchange参数设置为空 上传个php文件试试
上传php文件
上传成功
后台绕过
content-type做了限制
绕过MIME验证
我们找到上传点,上传一个jpg的文件抓包 看content-type是什么
此时我们看到content-type是image/png
这个时候回显是文件上传成功
但是我们如果上传一个php文件呢
回显是text/php 此时回显的上传文件不符合要求
这个时候我们上传php文件,把content-type修改为 image/png
此时回显上传成功
绕过getimagesize验证
这个验证是16进制验证了上传文件的头信息和文件的大小
我们使用xxd来看一下正常图片的头部信息
这个时候上传图片格式回显上传成功,但是上传php文件就会回显上传不符合要求
次数我们就要使用图片木马了
这个就不用说了 图片木马肯定可以上传成功了
此时虽然上传成功了,但是这个图片木马却不能执行,这个时候就显得这个漏洞很鸡肋
但是我们找到了这个站还存在文件包含的漏洞,来一波漏洞组合拳吧
文件上传(图片马)+文件包含(本地包含)
上面提到了图片马已经上传成功,路径也回显出来了
但是这个路径是不全的我们要加上上传目录的路径,构造一个新的路径
此时我们找到存在文件包含的位置
然后把这个路径修改为图片马的路径,同时我们不确定是不是图片马的路径是不是文件包含的子目录,所以我们要使用../来跳出这个目录直到跳到图片马在服务器的绝对路径
../这个可以试着去跳,一个不行就用两个
此时我们可以看到加了两个../之后就找到了图片马的绝对路径,因为我们图片马里面加是代码<php phpinfo();?>而不是shell所以就直接执行了这段代码
防御