something about Pikachu - Unsafe Fileupload
pikachu
Unsafe Fileupload
概述
在web应用系统中文件上传功能很常见,比如上传头像,上传附件等。
当后台程序对上传的文件进行的安全判断条件不够严谨时,攻击者可能会上传一些恶意文件,导致造成损失。
在设计文件上传功能时,要对以下方面进行安全考虑。
验证文件类型,后缀名,大小
验证文件上传方式
对文件进行一定复杂程度的重命名
不要暴露文件上传后的路径
client check
是客户端javascript限制,因此将对应触发语句去除即可。
1 | <!-- 去除onchange函数 --> |
MIME type
更改文件后缀名
是服务端进行
MIME判定,因此将恶意文件重命名为bad.png上传,此时MIME为图片。 使用burpsuite截断后将文件名再更改为bad.php。更改
HTTP Content-Type直接上传
bad.php,使用burpsuite截断后将HTTP请求的Content-Type更改为image/png。
getimagesize
getimagesize()函数能够获取文件头类型。
添加伪造文件头
在恶意文件中添加对应的文件头信息,即可伪装为对应的文件。
1
2
3
4
5// 伪造image文件头
GIF98
phpinfo();附加恶意内容
上传正常图片文件,使用
burpsuite截断,在请求内容中追加恶意代码。然后利用文件包含漏洞将此文件包含,即可执行隐藏的代码。1
2
3
4
5
6
7Content-Disposition: form-data; name="uploadfile"; filename="badimg.png"
Content-Type: image/png
PNG
XXXXX....YYYYYY...ZZZ
<?php phpinfo(); ?>