文件上传漏洞

文章探讨了如何通过各种手段绕过防火墙上传后门代码到服务器,包括前端验证的漏洞、后端验证的绕过方法如mime和文件头信息篡改,以及利用.htaccess重写配置、文件后缀名绕过等技巧。同时,提到了文件包含漏洞、一句话后门和文件解析漏洞的概念,并指出防御策略如后端验证、白名单、MIME检测等。

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

原理

将后门代码以各种绕过防火墙的手段去上传到对方服务器上,然后通过访问上传的后门的路径来进行后门代码执行

验证

前端验证:将过滤代码进行删除,然后能进行.php为后缀的文件上传,只经过前端,没有后端的验证
  • 过程

上传带有后门的图片,然后找到图片的路径,对路径进行代码环境的执行,例如在图片url后+1.php执行php环境,(如果找不到路径可以通过搜索cms查看是否有文件上传漏洞)

后端绕过

  • mime(content-type)验证

通过验证content-type的类型来验证上传的格式,例如jpg,jsp等,这个只需要将content-type修改就可以
  • 文件头信息

例如文件打开会有头信息,png会有png三个字母
  • 黑名单绕过

# 特殊解析后缀
当代码中将jsp php 等后缀加入黑名单时,可使用php3进行绕过(apache可以解析php3 phtml 
思路:上传其他脚本的格式来达到上传
​
# .htaccess
.htaccess是apache的配置文件,可以通过上传.htaccess,重写配置文件,将上传的图片以脚本方式解析
​
<FilesMatch "\.jpg">
  SetHandler application/x-httpd-php
</FilesMatch>
​
以上为.htaccess的配置文件命令,意思是文件中带.jpg的都以php代码执行
​
# 大小写绕过
​
# 点绕过
在文件后缀末尾加入一个点,加入点绕过之后,上传到服务器,服务器会自动将点去掉
​
# 空格绕过
在后缀名后面加一个空格进行上传,绕过之后上传的文件会自动将空格去掉,例如在windows中创建一个后缀名带空格的文件,会自动去掉空格
​
# ::$DATA
在文件后缀末尾加上::$DATA,在windows和php情况下,可以保留后缀名
​
# 配合解析漏洞
# 双后缀名绕过
  • 白名单绕过

# mime绕过
# %00截断
​
%00是空字符的意思,上传之后会自动取消,get会自动编码,post不会自动编码
# 0x00截断
# 0x0a截断
  • 二次渲染

将文件上传到服务器,服务器会按照自身的标准对上传的文件进行重命名
可以利用时间争夺,在服务器重命名时一直访问,可能能抓到还没重命名的时候

软件绕过(例如:安全狗,宝塔)

  • 数据溢出

利用垃圾数据溢出,在可以更改数据的地方将软件匹配过滤的数据包进行垃圾数据的加量,然后让后门代码进行上传
能修改的地方
content-disposition:一般可更改 
name:表单参数值,不能更改
filename:文件名,可以更改
content-type:文件mime,视情况更改

例如bp抓包后,在上传的文件名字前面加上许多垃圾数据,再加上;软件会匹配到;前面的数据进行对比能否上传,但是数据过大会导致软件匹配错误,从而进行数据的上传

  • 符号变异

上传图片文件一般是filename="1.php",假设改成filename="1.php,软件可能会匹配不到“”而进行的一个绕过

  • 数据截断

x.php00%.jpg

  • 重复数据

例如在传输数据时,filename="1.jpg";可以多写几个最后再加上filename="1.php";造成重复数据的上传,看是否会被拦截
  • fuzz测试

利用fuzz上传字典进行测试,上传成功之后可以查看后缀名规律来进行上传

文件包含漏洞

  • 一句话后门

<?php @eval($_POST[a]);?>
这是一句话后门,通过post木马程序来实现木马的植入,eval()函数把字符串按照PHP代码来计算,可以用hackbar进行post进行对a的代码上传
  • 文件包含存在根据

在通过PHP的相应函数(比如include())引入文件时,由于传入的文件名没有经过合理的校验,从而操作了预想之外的文件,就可能导致意外的文件泄露甚至恶意的代码注入

文件解析漏洞

  • 原理

解析出现混乱,可以让图片格式转换为脚本格式
  • 适合中间件

apache iis ngnix

漏洞防御

# 采用后端服务器验证
# 后缀检测:白名单
# MIME检测
# 内容检测:文件头 完整性规则
# 函数过滤
# 安全产品

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值