首先介绍一下getshell这个东西:
websell:就是一种以web形式来操作的后门。
getshell:的意思是可以通过某种漏洞达到留下后门的操作。静态shell:指的是网页的属性是静态页面还是动态页面。
回到本题
这是一个文件上传的题目。提示是只能上传图片,这时候就需要拿出我们的bp了
先试试水,上传一个图片马,使用burp抓包,修改content-type为image/jpeg
上传失败,可能是对文件进行了过滤:一共三个过滤
- 请求头部的 Content-Type
- 文件后缀
- 请求数据的Content-Type
这里是黑名单过滤来判断文件后缀,依次尝试php4,phtml,phtm,phps,php5(包括以下字母改变大小写)
最终发现php5可以绕过
原来这个题是对文件类型进行了二次判断
multipart/form-data:
需要在表单中进行文件上传时,就需要使用该格式,意思是他通过表单对文件格式再进行一次判断,并会在后端进行判断,而且他好像只支持小写字符,所以我们通过对请求头中的Content-Type进行大小写绕过,将multipart/form-data随便大写一个字母就可以了。
接下来,请求数据的Content-Type字段改为 image/jpeg
但是一开始没注意到,上面还有一个请求头Content-Type字段,大小写绕过: mULtipart/form-data;
如果是walf严格匹配,通过修改Content-type后字母的大小写可以绕过检测,使得需要上传的文件可以到达服务器端,而服务器的容错率较高,一般我们上传的文件可以解析。然后就需要确定我们如何上传文件,在分别将后缀名修改为php2, php3, php4, php5, phps, pht, phtm, phtml(php的别名),发现只有php5没有被过滤,成功上传,得到flag
就是说,我们改变了前面的大小写,破坏了文件上传的要求后,进行文件后缀名的修改,达到flag