文件上传漏洞

1.1文件上传漏洞概述

文件上传漏洞是指用户上传了一个可执行的脚本文件,并通过此脚本文件获得了执行服务器端命令的能力。这种攻击方式是最为直接和有效的,有时候几乎没有什么技术门槛(以上内容摘自白帽子讲web安全)

1.2过滤(格式限制)

通常我们所上传的文件格式是被限制的,而要上传一个PHP文件,可以利用验证扩展名的方式存在的问题进行绕过,另外是结合PHP和系统的特性,导致了可以截断文件名来绕过黑名单限制。

1.3截断方法

(1)最常见的截断方法,“%00”截断,如"1.php%00.jpg",这里验证扩展名是拿到的扩展名是jpg,写入的时候被%00截断,最终写入文件1.php。
(2)文件头,content-type绕过,因为有些程序用了不可靠的函数去判断是不是图片文件,比如getmagesize()函数,只要文件头hsi"GIF89a",它就会正常返回一个图片数组。
(3)没有trim()函数,可以用空格绕过,当有trim()函数时,可以在文件名后面利用16进制修改原预留的空格20位81~99中的一个。

1.4上题

题目链接
随便上传一个PHP文件,抓包截图:
文件上传漏洞_第1张图片
显示仅支持上传jpg,gif,png后缀的文件,所以试着将1.php修改成1.jpg,截图如下:
文件上传漏洞_第2张图片
又显示要求上传后缀名为PHP的文件才行,在将1.jpg改成1.php.jpg,截图如下:
文件上传漏洞_第3张图片
没啥效果,只是filename变为了1.php,再改一下1.jpg.php,截图如下:
文件上传漏洞_第4张图片
与1.php显示效果基本一样,所以应该后缀名为jpg才能成功验证,再将filename改为1.jpg,/uploads/后面加上1.php,看截图:
文件上传漏洞_第5张图片
此时的文件名变为了1.php1,扩展名为jpg,这是试一试00截断,为了方便定位,可以在1.php之后加一个空格,空格对应的hex码值为20,找到20,将其改为00,go一下,看截图:

文件上传漏洞_第6张图片
文件上传漏洞_第7张图片
get flag

你可能感兴趣的:(web安全)