文件上传几种类型

1、客户端校验

  1. 抓包改后缀(当代码全为js写的并没有向服务器发包时抓不到数据包)
  2. 关掉js (谷歌:设置=>高级 隐私和安全性=>网站设置) 或者直接将他源码下载到本地删掉js,改action。也可以f12改…

2、服务端校验(content-type)

改字段是根据你上传文件名所显现出来的
在这里插入图片描述

在这里插入图片描述
绕过方法:

  1. 抓包改content-type 字段
  2. 改文件名后上传抓包后再改回文件名
  3. 上传 正常文件改文件内容
  4. 最终目的是:…该字段正确就ok

图片马

验证文件头getimagesize、exif_imagetype 函数会判断是否为一张图片),即使修改了content-type也不行
因为必须为图片,此时可以找一个图片将一句话写入

copy a.jpg/b+a.txt b.jpg

多了解下姿势:
在这里插入图片描述

或者用工具(记事本/010等)将 马 插入到图片中

图片马 要不 和文件包含(将包含的文件当成脚本运行)一起用 ;或者搭配上 下面 的 .haccess 等任意解析漏洞

3、服务端校验—黑名单(名单中有的不能过)

常见几种绕过姿势:

  1. 大小写绕过,例如Php、PhP
  2. 常见的后缀 php3456 pht phtml …
  3. 配合Apache 的 .htaccess文件 或者 nginx的 .user.ini 文件上传解析 (配置文件,伪静态转换)
.htaccess
SetHandler application/x-httpd-php

其他中间件可以用 .user.ini 
注意:修改了.user.ini后,不需要重启服务器中间件,只需要等待user_ini.cache_ttl所设置的时间(默认为300秒),即可被重新加载
auto_prepend_file=test.jpg
或者
auto_append_file=test.jpg
配图片马(test.jpg)可以直接连
  1. 00截断 例如上传1.php.txt ,抓包修改对应16进制的 filename 为00 那么最后出来是1.php(可以修改空格的16进制,空格的16进制20) ps : PHP版本<5.3(不包括5.3);
  2. 超长文件名截断上传(windows 258byte | linux 4096byte)
  3. 若在没有在最后首位去空,则可以改包时在包末尾加上空格,同理 没有末尾去点 就在末尾加点 (因为是先检验再上传+系统特性)
  4. :: D A T A 在 w i n d o w 的 时 候 如 果 文 件 名 + " : : DATA 在window的时候如果文件名+":: DATAwindow+"::DATA"会把 :: D A T A 之 后 的 数 据 当 成 文 件 流 处 理 , 不 会 检 测 后 缀 名 , 且 保 持 : : DATA之后的数据当成文件流处理,不会检测后缀名,且保持:: DATA,::DATA之前的文件名,他的目的就是不检查后缀名 例如:例如:“1.php:: D A T A " W i n d o w s 会 自 动 去 掉 末 尾 的 : : DATA"Windows会自动去掉末尾的:: DATA"Windows::DATA变成"phpinfo.php”

4、服务端校验—白名单(名单中有的可过)

00截断
可以在绕过waf后写入到文件时截断后面白名单中的后缀 如jpg、png等从而显出我们真正的名字1.php

00截断 在地址中用 %00 也可以改hex ,在filename 中用0x00

php 版本<5.3.4

中间件解析漏洞:
ps:下面参考 https://blog.csdn.net/weixin_44940180/article/details/107944176
Apache:

低版本(如:2.X)Apache 是从右到左开始判断解析,如果为不可识别解析,就再往左判断, 比如 yijuhua.php.owf.raar “.owf”和”.raar” 这两种后缀是apache不可识别解析,apache就会把sec.php.owf.rar解析成 .php 文件

换行解析漏洞 (2.4.0~2.4.29) 当有黑名单检验是,在filename 处给 1.php 后缀在hex改为 0a

修复:

  1. apache配置文件,禁止.php.这样的文件执行,配置文件里面加入
  2. 用伪静态能解决这个问题,重写类似.php.*这类文件,打开apache的httpd.conf找到
  3. 限制只允许 特定后缀才能上传

IIS

  1. 上传 xx.php/asp;.jpg 会自动将分号后面的去掉,从而会认为只有xx.php/asp

  2. 例如/abc.asp/1.jpg ,在以asp/php等路径下的文件(1.jpg)会以asp/php解析

  3. 使用Asp的网站,默认承认.aspx/.asa/.cer/.cdx,即这些与asp解析规则一样

  4. 在一个文件路径(/xx.jpg)后面加上/xx.php会将 / xx.jpg/1.php解析为 php 文件 (fast-cgi开启)

    ps:上面前三个 发生在5.x-6.0的版本之间 ,最后一个 发生在iis7.0-7.5的版本之间

nginx

  1. 畸形解析漏洞 同上4 ,在fast-cgi开启下,上传含有木马的.jpg文件,然后访问xx.jpg/xx.php 得shell
  2. 在文件名后添加一个%00字节,可以截断某些函数对文件名的判断
    因为在许多语言的函数中,比如C、PHP等语言的常用字符串处理函数中,0x00被认为是终止符,例如:xx.php[\0].jpg ,[\0]为16进制的 00字符

以上两种均在 Nginx <8.03 下

文件名逻辑漏洞 (0.8.41~1.4.3 || 1.5.0-1.5.7)
成功上传1.jpg后,访问我们上传的地址在 url处最后加上 … .php 将…分别在hex下改为20 00

二次渲染逻辑漏洞-条件竞争

应用情景:

文件上传后,再检测是否合法,不合法就删除(意味着文件存在于服务器上过,只是存在时间很短,所以理论上可以趁着服务器
还没“反应”过来时,是可以访问到的!

两种情况:

有上传路径下:

编写“竞争”的文件 1.php
在这里插入图片描述

接下来用bp的爆破模块不断上传访问我们上传成功的文件路径(可以再模块中随便找一个无用数来跑!)
直到 访问 出现 200
在这里插入图片描述

没有上传路径的话之能用脚本上传了…

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值