web安全第六天:绕过白名单监测实现文件上传

文章介绍了在文件上传过程中如何利用黑名单和白名单的漏洞进行绕过,包括利用Windows系统特性如大小写不敏感、空格、点号、::$DATA、双写后缀等方法,以及通过%00和Ox00截断技术规避白名单检测。同时提到了.htaccess文件在Apache服务器中的作用,用于绕过上传验证。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

3.1黑名单概念(随机构造一个后缀名,能上传即为黑名单)

一般情况下,代码文件里会有一个数组或者列表,该数组或者列表里会包含一些非法的字符或者字符串,当数据包中含有符合该列表的字符串时,即认定该数据包是非法的。
在这里插入图片描述

3.2如何确认黑白名单

因为黑名单是不允许我们的数据包含有符合黑名单列表的字符串,所以我们只需要随意构造一个不在它列表中的数据包即可。

3.3利用后缀大小写绕过

在Windows中,大小写是不敏感的。
例如:“index.html”和“index.htmL”访问的结果是一样的。

3.4利用空格绕过

在Windows中,文件保存的时候如果文件后缀名末尾有空格会自动去掉。例如:“phpinfo.php " Windows会自动去掉末尾的空格变成"phpinfo.php".
(在burpsuite里加空格)

3.5 利用点号()绕过

在Windows中,文件保存的时候会自动去掉文件后缀后的点号。例如:“index.html.”在保存的时候就变成了“index.html“
(在burpsuite里加点)

3.6利用(::$DATA)绕过

在Windows中如果文件名+“::$DATA”会把::$DATA之后的数据当成文件流处理,不会检测后缀名,且保持::DATA之前的文件名。例如:“phpinfo.php::DATA之前的文件名。 例如:“phpinfo.php::DATA之前的文件名。例如:phpinfo.php::DATA"Windows会自动去掉来尾的::$DATA变成"phpinfo.php”。

在这里插入图片描述

3.7利用双写后缀绕过

有些代码中,会将数据包中符合黑名单列表的字符串替换为空。比如:“index.php”变为“index”。
在这里插入图片描述

3.8利用.htaccess文件绕过(只作用于apache服务器)

.htaccess文件(或者"分布式配置文件"),全称是Hypertext Access(超文本入口)。提供了针对目录改变配置的方法,即,在一个特定的文档目录中放置一个包含一个或多个指令的文件,以作用于此目录及其所有子目录。作为用户,所能使用的命令受到限制。
比如新建一个.htaccess文件:
<FilesMatch “as.png”>
setHandler application/x-httpd-php

通过一个.htaccess文件调用php的解析器去解析一个文件名中只要包含"as.png"这个字符串的任意文件,所以无论文件名是什么样子,只要包含"as.png"这个字符串,都可以被以 php的方式来解析,一个自定的.htaccess文件就可以以各种各样的方式去绕过很多上传验证机制。

绕过白名单检测实现文件上传

1.1白名单概念(随机构造一个后缀名,不能上传即为白名单)

一般情况下,代码文件里会有一个数组或者列表,该数组或者列表里会包含一些合法的字符或者字符串,当数据包中含有不符合该列表的字符串时,即认定该数据包是非法的。
在这里插入图片描述

1.2如何确认是否是白名单

因为白名单是只允许我们的数据包含有符合白名单列表的字符串,所以我们只需要随意构造一个数据包,如果可以上传,说明是黑名单,不可以上传则是白名单。

1.3白名单的绕过方式

服务端判断文件类型是从后往前判断,而对文件解析是从前往后解析,可以利用O0截断的方式进行绕过,包括%00截断与Ox00截断。前提php小于5.3.29。

1.3.1%00截断绕过白名单检测

%00是一个url编码,url发送到服务器后就被服务器解码,这时还没有传到验证函数,也就是说验证函数里接收到的不是%00字符,而是%00解码后的内容,即解码成了Ox00
在url中%00表示ascll码中的0,而ascii中0作
为特殊字符保留,表示字符串结束,所以当url中出现%00时就会认为读取已结束。

1.3.2 OxO0截断绕过白名单检测

系统在对文件名进行读取时,如果遇到Ox00,就会认为读取已经结束。但要注意是文件的十六进制内容里的o0,而不是文件名中的00。

brupsuite中将文件修改后缀上传后抓包,在repeater中加地址后加一个空格,去hex中将空格空格字符16进制20改成00再send

SQL注入是一种常见的安全漏洞,攻击者通过在输入字段中插入恶意SQL代码,从而操控数据库执行非预期的操作。为了防止SQL注入,通常会使用白名单过滤输入,确保只有合法的输入能够被接受。然而,白名单过滤并非万能的,攻击者可能会尝试绕过白名单过滤。 以下是一些常见的SQL注入白名单绕过技术: 1. **使用Unicode字符**: 攻击者可以使用Unicode字符来绕过白名单。例如,白名单可能只允许特定的ASCII字符,但Unicode字符可能会被忽略或错误处理。 2. **多重编码**: 攻击者可以对输入进行多重编码,使得白名单过滤无法正确识别恶意代码。例如,使用URL编码、HTML实体编码等。 3. **注释符**: 攻击者可以在SQL语句中使用注释符来绕过过滤。例如,使用`/* */`或`--`来注释掉后面的过滤代码。 4. **大小写混淆**: 一些过滤规则可能只检查特定的大小写组合,攻击者可以通过改变大小写来绕过过滤。 5. **特殊字符**: 使用特殊字符如反斜杠(\)、单引号(')等,可以改变SQL语句的结构,从而绕过白名单过滤。 为了有效防止SQL注入,开发者应采取多层次的安全措施,包括但不限于: - 使用参数化查询(Prepared Statements)而不是拼接SQL字符串。 - 对输入进行严格的验证和过滤。 - 使用最小权限原则,限制数据库用户的权限。 - 定期进行安全审计和漏洞扫描。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值