文件上传漏洞详解

一、文件上传原理

文件上传是一个 WEB 站点的功能,但是因为开发人员的疏忽或者对文件上传检测不严
格,造成 任意文件 都能 上传 。这时候才有了漏洞产生

二、成因

文件上传是一个 WEB 站点的功能,但是因为开发人员的疏忽或者对文件上传检测不严
格,造成 任意文件 都能 上传 。这时候才有了漏洞产生

三、危害

1. 可以拿 webshell ,获取服务器最高权限
2. 上传钓鱼或者木马
3. 上传一些动态脚本 --

四、利用条件 

1. 文件能够被上传到服务器里面
2. 文件能够被后端服务器来解析 ( 执行 ) 。例如 : 咱们生成了一个 EXE 的文件,但是服务器是
    Linux 系统,那么服务器能够解析 EXE
3. 保证上传的文件能够被自己访问到

五、文件上传的流程

● 准备一个代码恶意程序的文件
● 服务器接收这个文件
● 网站都会做文件合法性检查,例如:上传头像功能,但是我们上传了一个jsp 的程序,上传
   的文件会做文件后缀名检测
● 移动这个文件到服务器指定的存放路径, 大多数网站在接受了文件以后,都会将文件存储到
   指定的目录下面

六、如何利用漏洞

● 判断我们上传的文件是不是到了网站服务器里面
● 网站会检测 文件是否符合网站的需求
● 前端检测( 浏览器通过 JS 脚本来进行文件检测 )
● 后端检测( 程序来检验文件 )
● 判断文件是否能够被解析

1. 最简单的一句话木马

<?php eval($_POST['6']);?>      <?php eval($_REQUEST['6']);?> 不能使用GET  

2. 业务场景

注册/修改个人信息页面 ---- 上传头像
填写资料 --- 上传一些自己的文件

3. 测试漏洞方式 

黑盒测试----在站点进行疯狂的文件上传测试看看哪一种可以用
白盒(灰盒) --- 能够看到网站源码,边修改源码边动态执行

七、网站如何防护

● 客户端检测( 前端检测 ) ,依赖于 JS
● 服务端检测
       ●  黑名单:不允许某些类型的文件上传
       ●  白名单:只允许某些类型文件上传
网站通常使用的方式是后缀名检测文件类型

八、常见的文件类型

图片 :jpg png img gif
音频 :war mp3
视频 :mp4
文档 : docx xlsx pptx txt pdf .php .py .c .exe
注意 :win 系统对文件名大小写不敏感,但是不能使用空格等特殊字符

九、上传文件绕过类型

前端验证

修改验证的扩展名

 

后端验证  

后端程序使用 $_FILES() 函数 [type] 获取文件类型,来验证文件是否符合要求

 

绕过方式

通过抓包的方式抓取请求包,将文件类型进行更改为图片类型

 

 

黑名单

修改文件后缀名绕过

通过黑名单限制指定后缀名的文件不能上传  

● 使用.htaccess文件绕过 
文件的作用:在文件中添加一个后缀名,那么站点当中的指定后缀名的文件会作为 PHP 程序来执行 文件中的内容 :AddType application/x-httpd-php .png (可以修改)
从源码状态分析,黑名单加强了, $deny_ext = array('.asp','.aspx','.php','.jsp'); 多了
防御思路:添加更多的文件后缀名来做放绕过
绕过思路 : 使用 .htaccess 文件来绕过
先上传一个 .htaccess 文件 可以执行 jpg 格式的文件
再上传一个 .jpg php 木马文件
.user.ini文件绕过
将指定的文件作为 php 程序来执行
作用与 .htaccess 文件功能类似,区别是 .htaccess 文件是 apache 的特有文件, .user.ini
nginx 的特有文件。
文件利用条件 1 、开启 cgi 或者 fast-cgi 2 、上传路径下面存在一个 index.php 的文件,可
以包含解析 .user.ini 文件

使用.user.ini php配置文件 

php.ini
需要将注释删除
user_ini.filename = ".user.ini"
● 大小写绕过 

 空格绕过

 ● 后缀名空格点绕过

 

● 文件流绕过

● 双写点空格

 

● 后缀名双写

 00截断绕过

00-- 截断 ,
概念来自于电报,例如报文 --- 摩斯密码没发送一封电报,在电报的最后会加上 00 (
报结束 )
PHP5.3 版本之后有一个函数 ---move_upload_file( 文件 , 路径 ) ,这是一个移动文件的函
数,这个函数可以接收 00 截断,但是需要打开 gpc 魔术引号
程序中必须有 move_upload_file 来移动文件才能触发 00 截断功能

 防御思路

定义白名单,获取文件后缀名判断是否符合白名单条件,并且生成一个随机的文件名
● 图片马  
使用一张图片,将图片中的内容改为 webshell 代码或者一句话木马,上传到服务器当
中,必要条件 -> 服务器能够将图片作为 PHP 来执行。

准备一张图片,准备一个一句话木马的代码

注意:尽量更改图片中的.的位置,因.改完后基本不会影响图片的质量 

 

 ●  二次渲染
某些图片上传功能,会将图片做二次处理,处理完成后,图片外观不变但是图片内容
变了

通过源码可以分析出,上传一个图片格式的文件,程序会做二次渲染,然后将二次渲染后的图
片显示在浏览器或者文件里面。

 

二次渲染作用 

针对上传图片马的情况,给图片马做了二次渲染后,造成原本图片中的木马程序损
坏。
绕过思路
上传一个图片,二次渲染后,将图片下载回来。在下载后的图片上改木马。渲染过的
图片基本上不会做二次渲染

条件竞争

两个条件判断之间 程序执行的时间差,实现上传木马的过程

文件上传的步骤 

● 先检测 后上传
● 先上传 后检测

条件竞争的流程 

● 准备一个php 文件
<?php
        file_put_contents('333.php','< ̿ eval($_REQUEST[6]);?>'); ˾ 将字符串中的内
容,生成到一个文件当中,如果文件不存在则直接生成新的文件
?>

● 上传文件并抓包,将抓到的数据包发送给跑包模块 

 

● 抓取一个访问上传的php文件的数据包,然后构造跑包 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值