WEB漏洞-文件上传之后端黑白名单绕过

文件上传常见验证
后缀名(直接)
- 黑名单,白名单,明确不允许上传的格式后缀
asp,php,jsp,aspx,cgi,war,如果php,php5,phtml没有定义到后名单里,可以用这格式绕过限制,依旧可以达到效果
类型(间接)
- 明确可以上传的格式后缀
jpg,png,zip,rar,gif要白名单验证要更安全
文件头等
- MIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型。是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式
- Content-Type称之为MIME信息

- 使用正常照片上传,抓包

- 上传0.jsp文件,抓包

- 伪造正常上传的content-type

- 文件头:内容头信息


upload-labs演示案例
Pass-1(前端验证后缀)
采用了前端验证,只验证了文件后缀,图片木马上传后,使用burp修改后缀来绕过前端验证,也可以通过删除js验证的代码来绕过
- 点击上传后,把gif后缀修改为php

- 找到地址并打开


Pass-2(验证MIME信息)
给出的提示是根据报文中的MIME信息进行验证,可以使用burp修改MIME信息来绕过



Pass-3(特殊解析后缀)
不允许上传指定的后缀文件,可以通过搜索黑名单的漏洞进行绕过,比如
php脚本可以尝试php5,phtml

成功上传,由于我是nginx的配置,题目原意是绕过apache的配置所以nginx无法执行这个脚本

Pass-4(.htaccess)
仅存在于Apache中,
.htaccess文件(或者"分布式配置文件"),全称是Hypertext Access(超文本入口)。提供了针对目录改变配置的方法,即在一个特定的文档目录中放置一个包含一个或多个指令的文件, 以作用于此目录及其所有子目录。作为用户,所能使用的命令受到限制.概述来说,htaccess文件是Apache服务器中的一个配置文件,它负责相关目录下的网页配置。通过htaccess文件,可以帮我们实现:网页301重定向、自定义404错误页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能。通过htaccess来实现上传文件后缀自定义
定义
.htaccess文件并上传


上传一个特定文件名的文件
blog.jpg,由于我是nginx的配置,题目原意是绕过apache的配置所以nginx无法执行这个脚本

Pass-5(.user.ini)
提示中,告诉我们有一个
readme.php文件

可以上传
.user.ini文件,来设定规则让php.ini获取到,上传的图片木马,然后在执行readme.php文件时包含该木马
;.user.ini
;所有的php文件都自动包含1.gif文件。.user.ini相当于一个用户自定义的php.ini。
auto_prepend_file=1.gif

分别上传
.user.ini和1.gif


执行
readme.php,就会包含1.gif的代码

Pass-6(大小写绕过)
查看源码以后,发现没有对文件大小写进行过滤,将php文件后缀反复修改大小写进行尝试上传,直到成功

由于测试环境搭建在liunx平台,严格区分大小写,所以无法访问,在windows下可以尝试

Pass-7(空格绕过)
查看源码以后,发现没有对空格进行过滤,通过burp抓包后修改文件名加入空格,linux+nginx环境问题最后上传的文件名中包含了空格,无法解析

Pass-8(点号绕过)
查看源码以后,发现没有对
.进行过滤,通过burp抓包后修改文件名加入.,linux+nginx环境问题最后上传的文件名中包含了.,无法解析

Pass-9(特殊字符::$DATA绕过)
查看源码以后,发现没有对
::$DATA进行过滤,通过burp抓包后修改文件名加入::$DATA,linux+nginx环境问题最后上传的文件名中包含了::$DATA,无法解析

Pass-10(文件名绕过)
查看源码后,发现其路径拼接的是
$file_name而不是$file_ext,而$file_name只处理了文件名末尾的点,只需要指定文件名phpinfo.php. .绕过就可以,linux+nginx环境问题最后上传的文件名中包含了.,无法解析

Pass-11(双写绕过)
根据提示会去除指定的后缀,查看源码后,只会去除1次,所以只要重叠写2次就能绕过该验证

上传成功后尝试访问


Pass-12(0x00截断)
查看源码和提示,上传路径可控,并且是最终文件的存放位置是以拼接的方式,可以使用
%00截断,但需要php版本<5.3.4,并且magic_quotes_gpc关闭。原理是:php的一些函数的底层是C语言,而move_uploaded_file就是其中之一,遇到0x00会截断,0x表示16进制,URL中%00解码成16进制就是0x00

修改一句话的后缀名为
.jpg后上传,抓包后修改URL,成功上传

Pass-13(0x00截断)
修改后缀名为
.jpg后上传,抓包后,修改路径处,增加1.php,然后选择Hex后,找到增加的1.php位置,将p后的0d修改为00后放包上传


Alipay
Wechat
0 条评论