我们先了解一下文件上传
文件上传漏洞是指 Web 服务器允许用户将文件上传至其文件系统,但这些文件可能并没有经过充分的验证,如文件名称、类型、内容或大小等。未能正确执行这些限制就意味着即使最基本的图像上传功能也可能用于上传任意具有潜在危险的文件,里面甚至包括远程代码执行的服务器端脚本文件。
在某些情况下,上传文件的行为本身就足以造成损害,其他攻击对该文件后续 HTTP 的请求,通常是为了触发服务器执行该文件。
说到上传我们不会很陌生,我们在微信,QQ上上传过自己喜欢的头像,这也是文件上传。
与此同时文件上传漏洞会造成很大危害
如果站点服务器用于保存上传文件的目录具有执行权限,恶意文件被执行后黑客可获取服务器命令执行能力,导致站点沦陷
如果攻击者通过其他漏洞进行提权操作,拿到系统管理员权限,那么直接导致服务器沦陷
同服务器下的其他网站无一幸免,均会被攻击者控制(旁站攻击)
文件上传漏洞的利用条件:
(1)能够成功上传木马。
(2)上传的木马能够被web容器解析执行,所以上传路径要在web容器覆盖范围内。
(3)用户能够访问上传的木马,所以得知道上传的木马准确路径。
将一句话木马上传至服务器,并能成功访问。(页面空白访问成功)
防范:
(1)文件上传的目录设置为不可执行
只要web容器无法解析该目录下的文件,即使攻击者上传了脚本文件,服务器本身也不会受到影响。
(2)判断文件类型
通过MIME类型、后缀名检查等方式,判断文件类型。建议使用白名单。
(3)使用随机数改写文件名和文件路径
用户想要执行上传的脚本,就需要先访问到此文件。所以最好保证服务端在接收到文件后对其进行重命名,并不对外暴漏路径。
webshell:也称为网页后门,运行在web应用之上的远程控制程序 。 webshell分为大马、小马等。功能简易的webshell称为小马,拥有较完整功能的webshell,称为大马。
一句话木马:
<?php @eval($_POST[a]); ?>
easyupload1.0
提示为先上传jpg形式的,我们就先上传图片形式的
发现我们上传成功,顺便抓包看看
在文件里写入我们的php一句话木马,并更改filename后缀为php,这里我们改成1.php
但是我们用蚁剑连接过以后,发现答案是错的,看看提示之后答案好像在phpinfo里面
我们先加上<?php phpinfo();?>,repeater,sead之后我们就会发现上传成功
然后我们再去访问/upload/1.php就可以看到phpinfo了,然后搜索ctf就可以了
我们要知道为什么刚刚上传的jpg形式和php形式的可以成功,就是关于http包的Content-Type字段中的值,根据这个值来判断上传的文件是否是合法的,这就是mime的检测原理。
mime绕过是后端绕过的一种。
MIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型。是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。也就是平时和我们在手机上操作的差不多。
所以当content-type的类型是image/jpeg的时候我们上传的才会成功。
常见的MIME类型:
1.text/plain(纯文本)
2.text/html(HTML文档)
3.text/javascript(js代码)
4.application/xhtml+xml(XHTML文档)
5.image/gif(GIF图像)
6.image/jpeg(JPEG图像)
7.image/png(PNG图像)
8.video/mpeg(MPEG动画)
9.application/octet-stream(二进制数据)
10.application/pdf(PDF文档)