目录
文件上传漏洞
what
网站往往会提供头像照片/文件附件上传功能,若不对文件类型加以防范攻击者就会上传恶意代码从而控制主机
文件上传漏洞绕过--pikachu
1.clent check
首先先说一下如何判断文件上传的检测机制是在客户端还是服务端?
如本题刚选择完文件还没点击文件上传就以及弹窗提示文件类型错误,说明就是利用前端代码来防护。
说明在我们上传文件后onchage事件被触发,它将传递用户选择的文件路径作为参数。这个函数通常用于检查文件的扩展名,以确保用户上传的文件类型符合要求。
那么我们就可以直接将该事件οnchange="checkFileExt(this.value)"删除,再次上传非图片类型文件成功(谷歌浏览器可能因为缓存机制效果不能达到预期)
2.MIME type
先说一下什么是MIME type
MIME (Multipurpose Internet Mail Extensions) 是描述消息内容类型的标准,用来表示文档、文件或字节流的性质和格式。
常见的MIME类型:
text/plain
:纯文本文件。text/html
:HTML文档。image/jpeg
:JPEG格式的图像。image/png
:PNG格式的图像。application/pdf
:PDF文档。application/json
:JSON数据。application/javascript
:JavaScript代码。application/octet-stream
:未知的应用程序文件,通常用于指示浏览器下载文件而不是直接打开它。audio/mpeg
:MP3音频文件。video/mp4
:MP4视频文件。
上传php文件不成功抓包发现他检测到我们的内容类型为未知的应用程序文件,那么我们就把Cotent-Type的类型改为image/png or image/jpeg
成功
3.getimagesize
3.1修改文件头部信息
我们先尝试修改MIME类型/修改php文件后缀名发现不可以
那么我们就先了解一下getmagesize是什么吧
-----getimagesize()
是一个PHP函数,用于获取图像文件的尺寸。这个函数可以读取图像文件并返回一个包含图像尺寸信息的数组。这对于需要在网页上显示图像或处理图像数据的应用程序非常有用。
因此不但是要检测MIME、文件后缀还有检测文件头部信息是否为图片类型
那么是非上传图片类型不可了,我们还是直接上传php文件抓包,尝试直接伪造头部,加入GIF格式的文件头部------GIF89a
成功,但是生成的文件名是乱码,路径是日期
3.2php一句话木马加入图片
用notepad++打开图片在末尾加入一句话木马,不改变图片文件类型上传成功
防御
1.限制扩展名,使用白名单而不是黑名单
2.有能力独自配一台服务器单独存放上传文件
文件下载漏洞
what
网页提供的下载图片/视频的功能,在处理文件下载请求时存在安全缺陷,导致攻击者能够下载服务器上的敏感文件。
how--pikachu
根据提示点击姓名就能下载对应球星的照片,但是这个交互过程并没有在url中显示出变化,因此我们使用burp suit对点击名字进行下载这一行为进行抓包
我们将kb.png替换为../test1.png进行放包
测试成功~当然这里不仅局限于png的图片,可以下载重要的文本文件
防御
1.白名单机制,仅允许下载服务端提供的文件下载
2.限制下载文件大小/类型
3.对于get请求下载时的../等符号进行过滤