从零开始的白帽子学习--stage1--常见漏洞类型介绍--part3--不安全的文件上传

2023-07-29,,

Q:什么是文件上传漏洞
A:文件上传功能在web应用系统很常见,比如很多网站注册的时候需要上传头像、上传附件等等。当用户点击上传按钮后,后台会对上传的文件进行判断 比如是否是指定的类型、后缀名、大小等等,然后将其按照设计的格式进行重命名后存储在指定的目录。 如果说后台对上传的文件没有进行任何的安全判断或者判断条件不够严谨,则攻击着可能会上传一些恶意的文件,比如一句话木马,从而导致后台服务器被webshell。所以,在设计文件上传功能时,一定要对传进来的文件进行严格的安全考虑。比如:验证文件类型、后缀名、大小,验证文件的上传方式,对文件进行一定复杂的重命名,不要暴露文件上传后的路径等。
Q:文件上传时校验的姿势有哪些

    客户端JavaScript校验客户端校验一般只检查文件的后缀名,有白名单和黑名单
    服务端校验。服务端校验又有多种校验方式。如:文件头中content-type校验,文件内容头校验,后缀黑白名单检查,自定义正则表达式检查等
    WAF检查

Q:绕过校验的姿势有哪些

    对于客户端校验来说,禁止浏览器使用js
    对于服务端校验,大部分情况下通过burp抓包即可绕过。检查啥改啥就可以了
    对于WAF检查,略

靶场实验

这里以pikachu靶场为例子来演示文件上传漏洞

此时,我们可以看到这里只支持上传图片文件,不允许上传其他类型的文件,那么我们先上传一下php文件尝试一下(文件内包含一句话木马),然后根据提示来确定他是什么类型的校验方式。

根据网站的报错提示,查看相应的元素代码之后发现这是一个js的弹窗。那么我们只需要禁用js就可以绕开这个检测。在禁用js刷新页面之后,发现1.php文件就可以正常上传了

切换一下校验的种类,切换到服务端校验,选择1.php文件,然后上传。在上传时使用burp抓包

网站提示上传的格式不对。然后我们上传一个正常的,能通过网站检测的文件,并使用burp抓包,对比前后两次抓包数据的区别。这里通过对比之后发现content-type有变化。

我们再次尝试上传1.php文件,并在抓包后修改 content-type image/jpeg。然后将修改之后的数据包发送到burp的repeater中,模拟上传,看能否通过服务器验证

ok了,模拟上传成功了。那么就说明这样绕过检测的姿势是正确的。

由于本人学识有限,暂时就不实验其他的检测方式和检测方式,待日后补充

从零开始的白帽子学习--stage1--常见漏洞类型介绍--part3--不安全的文件上传的相关教程结束。

《从零开始的白帽子学习--stage1--常见漏洞类型介绍--part3--不安全的文件上传.doc》

下载本文的Word格式文档,以方便收藏与打印。