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
后放包上传
0 条评论