文件上传漏洞前5题详解

一篇一篇写下来

并不是完全掌握了 以后遇到多看

pass-01

文件检测流程

通常一个文件以HTTP协议进行上传时,将以POST请求发送至web服务器,web服务器接收到请求后并同意后,用户与web 服务器将建立连接,并传输data:
而一般一个文件上传过程中的检测内容如下部分:
客户端 javascript 检测 (通常为检测文件扩展名)
服务端 MIME 类型检测 (检测 Content-Type 内容)
服务端目录路径检测 (检测跟 path 参数相关的内容)
服务端文件扩展名检测 (检测跟文件 extension 相关的内容)
服务端文件内容检测 (检测内容是否合法或含有恶意代码


首先这个我传入一个一句话木马 他没有刷新页面 所以他没有往服务端进行检测,说明这个文件在上传时候,就在客户端进行了javascrip的检测


方法一:关闭JavaScript

pass-02


上传了以php为后缀的一句话木马文件 提示:文件类型不正确 页面进行了刷新 且第一题我是抓不到包的 这道题我抓到了包 搜文章后端如何对文件进行类型上的验证 发现是服务端MIME 类型检测 (检测 Content-Type 内容)

MIME(Multipurpose Internet Mail Extensions,邮件扩展类型)是一种标准的、用来表示文档、文件、字节流等数据的格式和性质的一种流媒体类型

Copy

Content-Type:在请求的响应头中往往有一个Content-Type的属性 Content-Type的第一个属性往往都是mimetype的类型,通过;来分割

Copy

MIME类型大全

[e8vc1](http://t.csdnimg.cn/e8vc1)
image/png    PNG图像
image/jpeg	JPEG 图像
image/jpg	JPG 图像
image/gif	GIF 图像

Copy

看wp意思就是要去改mime类型 image/png
意思就是这个没有去看后缀 但是后端可以对你文件名后缀进行检测吗 包可以的呀 小老弟

pass-03


上传了 一句话木马php后缀文件 提示如上 黑名单


本来尝试了很多方法在请求头中改content-type 在请求包中改后缀都大咩
去搜了一下有啥绕过方法有啥子呢

双写绕过可以 其实很多绕过方法都是相通的
总结

黑名单绕过常用方法

1.大小写绕过
想上传tutu.php的木马文件的时候,有时候讲文件名改为 tutu.PhP  tutu.PHP可能会绕过一些黑名单限制 
2.空格绕过
在系统层面上,当我保存一个a.txt,前或后加一个空格,在保存的时候在系统层面上是没有的空格的
但是php传输的过程中,是可以去识别到这个空格的
例如:在黑名单过滤中只有.php 而没有".php "的后缀的时候,可以上传时候用brup抓包,在上传的文件名前后加个空格
3. 点号绕过
例如:当你重命名文件名时,如果在文件后缀名加上一个点,此时保存后系统会在自动过滤末尾的点号 这种过滤是对后缀的整体进行过滤
4.双写绕过
双写绕过的方式仅仅只适合服务端检测到黑名单后缀的时候,将文件名中对应后缀删除的情况
例如:我们上传一个a.php 服务端检测到黑名单后缀,把.php的后缀给删除了,这个文件名是a. 这个文件倒是能成功上传 到那时不会被解析成php文件了
5. ::$data绕过
也就是当我们访问a.php::$data时,也就是相当于访问a.php本身
当我们访问ab:a.php::$data时,也就是访问ab文件夹下的a.php文件本身
* 注意:这种方法确实能绕过限制,但是当我们开新标签访问我们上传的文件时会报错,需要把此时url中的::$data删掉才能正常访问 
6.单次过滤绕过
看下图的过滤的 意思就是删除末尾最后的一个点 转换为小写,去除::$DATA 删除首尾的空格 那么我是不是再加一个点就能绕过捏

Copy

这个绕过用双写绕过就绕过了 纳闷的是最后一个单次过滤绕过 为什么没有绕过成功
到了第四关看了第四关的源码和wp发现 php3 php5 php7 都能去访问php 但这要看httpd-conf有没有这样写

pass-04

.htaccess:配置文件 类似服务器的配置文件,但是不是主要的配置文件,他通常在网站的根目录或特定目录当中,并只影响该目录及其子目录,每个目录都可以有自己的.htaccess文件

.htaccess是一种配置文件,用来去控制web服务器的行为
在文件上传攻击中,我们上传一个一句话木马文件,然后通过上传.htaccess文件来控制服务器将这个文件当作php代码解析

为什么上传.htaccess文件来控制服务器解析哪些后缀名的文件,从达到文件上传

httpd.conf 文件的作用范围更为全面,它是Apache主配置文件,影响整个服务器

.htaccesss文件可以通过文本编辑器直接进行修改或者创造,且修改后立马生效,无需重启Apache服务器

httpd.conf 文件通常需要管理员级别的权限来进行修改,修改后需要重启Apache服务器才能生效

httpd-conf 和 .htaccess 这些都是针对Apache服务器来说的

AddType application/x-httpd-php .jpg .txt 
可以被理解为一种配置指令
它尝试将 .jpg 和 .txt 文件类型的MIME类型设置为 application/x-httpd-php

Copy

它是如何去加载的呢?
它是先去加载httpd-conf/php.ini 然后去看有没有 .htaccess/.user.ini,有的话就去覆盖这个httpd-conf/php.ini

这道题步骤就是上传.htaccess文件 (aa.htaccess不能这样 但是我这样写 死在这里了)上传一句话木马就拿下flag

pass-05

.user.ini 和 php.ini 关系有点类似.htaccess和.httpd-conf的关系
.user.ini 特定于用户或特定目录的配置文件 通常在根目录下
.user.ini用于覆盖或者追加全局配置文件(例如:php.ini)中的配置选项
作用范围:存放在该文件的目录及其子目录中
会立即生效

php.ini
存储了对整个php环境生效的配置选项 位于php安装目录中
作用范围:所有运行在该php环境中的php请求
需要重启php或者web服务器

.user.ini文件上传漏洞的前提:
.user.ini可以生效
该上传目录有php文件

以上这是方法2需要的前置知识

方法一:利用源码


分析一下这一坨源码
首先在文件夹存在的情况下 $deny_ext是数组黑名单 $file_name获取到文件名例如( $file_name=1.php. .)删除文件名末尾的点( $file_name=1.php. )然后 strrchr从file_name中获取到最后一个.赋给了 $file_ext(. ) 然后转换大小写 去除字符串(:: $DATA)(这两步是为了防止大小写和:: $DATA绕过)然后把file_name的首和尾删除空格
进入下一个判断 判断file_ext中有没有黑名单

    ['name']:客户端文件的原始名称。
    ['type']:文件的MIME类型,如果浏览器提供了这个信息的话。
    ['size']:文件的大小,以字节为单位。
    ['tmp_name']:文件被上传后在服务器上存储的临时文件名。
    ['error']:与文件上传相关的错误代码。

因此,$temp_file = $_FILES['upload_file']['tmp_name']; 这行代码的作用是将上传文件在服务器上的临时文件名赋值给变量$temp_file

Copy

然后上传路径和file_name进行连接

就这样拿下权限 能想到这个的人真牛逼 看似简单

还有方法凸 下一篇更精彩

  • 9
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值