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

这篇具有很好参考价值的文章主要介绍了web安全第六天:绕过白名单监测实现文件上传。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

一般情况下,代码文件里会有一个数组或者列表,该数组或者列表里会包含一些非法的字符或者字符串,当数据包中含有符合该列表的字符串时,即认定该数据包是非法的。
文件上传黑白名单绕过,php,服务器,开发语言

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之后的数据当成文件流处理,不会检测后缀名,且保持:: D A T A 之前的文件名。例如 : “ p h p i n f o . p h p : : DATA之前的文件名。 例如:“phpinfo.php:: DATA之前的文件名。例如:phpinfo.php::DATA"Windows会自动去掉来尾的::$DATA变成"phpinfo.php”。

文件上传黑白名单绕过,php,服务器,开发语言

3.7利用双写后缀绕过

有些代码中,会将数据包中符合黑名单列表的字符串替换为空。比如:“index.php”变为“index”。
文件上传黑白名单绕过,php,服务器,开发语言

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白名单概念(随机构造一个后缀名,不能上传即为白名单)

一般情况下,代码文件里会有一个数组或者列表,该数组或者列表里会包含一些合法的字符或者字符串,当数据包中含有不符合该列表的字符串时,即认定该数据包是非法的。
文件上传黑白名单绕过,php,服务器,开发语言

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文章来源地址https://www.toymoban.com/news/detail-670843.html

到了这里,关于web安全第六天:绕过白名单监测实现文件上传的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 文件上传漏洞进阶教程/白名单绕过/图片马制作/图片马执行

    相对于前面的黑名单绕过,白名单更加难以绕过,使用白名单验证相对比较安全,但如果存在可控参数目录,也存在被绕过的风险 目录可控%00截断绕过上传 upload-lab pass11 源码分析 deny_arr变成ext_arr,白名单,下面判断后缀名是否在白名单中,代码相较于黑名单也简单不少 但是

    2024年01月22日
    浏览(38)
  • Web 攻防之业务安全:验证码绕过测试.(修改数据包中 res_code 的值 实现绕过.)

    业务安全是指保护业务系统免受安全威胁的措施或手段。 广义 的业务安全应包括业务运行的 软硬件平台 (操作系统、数据库,中间件等)、 业务系统自身 (软件或设备)、 业务所提供的服务安全 ; 狭义 的业务安全指 业务系统自有的软件与服务的安全 。 验证码绕过测试

    2023年04月14日
    浏览(57)
  • 第六天 OSPF基础

    一.基本概念 OSPF :开放式最短路径优先协议 无类别链路状态IGP动态路由协议 1.距离矢量协议:运行距离矢量路由协议的路由器周期性的泛洪自己的路由表。通过路由的交互,每台路由器都从相邻的路由器学习到路由,并且加载进自己的路由表中;对于网络中的所有路由器而

    2024年01月25日
    浏览(79)
  • QT 第六天 人脸识别系统

    .pro .h .cpp 一、在C++和C中static的用法? 首先,在C++中static修饰静态成员, 静态成员包括静态成员变量和静态成员函数。 静态成员变量: 1在修饰静态成员变量时,在定义成员变量前加static,权限一般为public, 2只是在类内声明,必须在类外定义,类外定义时可以

    2024年02月09日
    浏览(38)
  • MySQL学习笔记第六天

    1.1 什么是函数 函数在计算机语言的使用中贯穿始终,函数的作用是什么呢?它可以把我们经常使用的代码封装起来,需要的时候直接调用即可。这样既 提高了代码效率 ,又 提高了可维护性 。在SQL 中我们也可以使用函数对检索出来的数据进行函数操作。使用这些函数,可以

    2024年02月03日
    浏览(50)
  • 上传验证绕过——服务端白名单绕过

    服务端白名单绕过 MIME类型检测绕过 Upload-labs(Pass-02)第二关通过服务端对数据包的MIME进行检查 通过burp修改Content-Type类型 将content-type修改为image/png 上传成功 %00截断绕过 %00截断是操作系统层的漏洞,由于操作系统是C语言或汇编语言编写的,这两种语言在定义字符串 时,都

    2024年02月11日
    浏览(33)
  • 重生之我要学C++第六天

    这篇文章的主要内容是const以及权限问题、static、友元函数和友元类,希望对大家有所帮助,点赞收藏评论支持一下吧! 更多优质内容跳转: 专栏:重生之C++启程(文章平均质量分93) 目录   const以及权限问题 1.const修饰内置类型 (1).const修饰普通变量 (2).const修饰指针变量

    2024年02月14日
    浏览(37)
  • 【第六天】字符串的定义(上)

    @第六天(字符串) 字符串,顾名思义,就是用字符拼接成的文本值。字符串在储存上类似数组,,不仅字符串的长度可取,每一位的元素也可以取。在c#语言中,可以通过string类创建字符串。 在c#语言中,字符串必须包含在一堆双引号之内(“”),例如: 如果创建一个空的字

    2024年02月13日
    浏览(45)
  • Day6 打卡第六天

    给定两个字符串  s  和  t  ,编写一个函数来判断  t  是否是  s  的字母异位词。 注意: 若  s  和  t   中每个字符出现的次数都相同,则称  s  和  t   互为字母异位词。 示例 1: 数组其实就是一个简单哈希表,而且这道题目中字符串只有小写字符,那么就可以定义一

    2024年02月09日
    浏览(52)
  • 七天学会C语言-第六天(指针)

    指针变量与普通变量是C语言中的两种不同类型的变量,它们有一些重要的区别和联系。 普通变量 是一种存储数据的容器,可以直接存储和访问数据的值。: 在例子中,变量num是一个普通整数变量,它直接存储了值10。 指针变量 是一种特殊类型的变量,它存储的是内存地址

    2024年02月08日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包