一,原理。
文件上传漏洞服务端代码未对客户端上传的文件进行严格的验证,导致漏洞。非法用户可以利用上传的恶意文件控制整个网站,这个恶意文件被称为 WebShell ,也可以称为一种网页后门。
二,绕过类型
(1).前端js绕过
我们上传1.php文件时,前端阻止上传弹窗,说明存在前端验证文件。
绕过:
- 修改前端js代码,利用f12可修改
-
把1.php改为1.jpg,再利用bp抓包,修改回1.php也可上传
(2)黑白名单绕过,
-
如果可以上传phtml php3 php4 php5 Php php (空格) php.,pphphp等后缀。
-
如果上传成功,测试是否能够解析不能就判断此方法不行
(3)针对文件类型绕过
1.对文件的类型:content-type进行了判断绕过——image/jpeg
2.判断文件头:上传1.php抓包在文件内容增加GIF89a
3.判断文件内容:上传图片马1.jpg,再修改回1.php
(4)路径截断绕过与普通截断绕过
路径截断绕过
1、Get:在上传路径处../upload/1.php%00
2、Post:对../upload/1.php后进行16进制hex修改为00
3、还有一种非路径截断,上传图片马(视情况加GIF89a)
抓包修改为:1.php;jpg或者1.php%00.jpg或者1.php/00.jpg
(5)其他。
还有很多类型,但是目前就知道这些,其他有待补充。
二,示例
以考核的题目为例。分别涉及文件类型,判断文件头,文件内容以及双写绕过,同时设计了白名单,只允许图片格式上传。
此题为文件上传题,按基本方法应该先上传一个一句话木马
返还信息说只可以上传jpg格式,我们改格式以后又返还信息说,其中包含php语言,不可以通过通过百度得知这是mime类型的绕过,借鉴ctfhub技能树中的绕过,要对两个内容进行修改,即:connect-type(image/jpeg)和filename(双写绕过),但是该网页本身就是php的,即使上传其他语言可以成功上传,网页也解析不了,因此如何修改php小马就成了问题,此处涉及特殊编码或字符变换
修改完成后,上传成功,但是访问路径时发现路径被修改过,此处解决方案也有几种,可以使用御剑或爬虫等进行查找,也可以用猜和试,此处实验过后,知道被隐藏的其实是文件名,成功访问后可以用蚁剑或hackbar找答案
在打开后还是不能正常访问,因为之前没有把文件格式改过来,木马文件不能正常执行,但前文说过,PHP格式是不允许的,于是又要使用双写绕过,让php语言正常被解析
修改后即可得到flag