文件上传绕过

文章详细介绍了文件上传漏洞的各种绕过方法,如%00、0x00、空格和点操作,大小写混写,双写,DATA利用,以及结合.htaccess和文件包含漏洞实例。还提及了针对不同服务器环境的解析漏洞利用技巧。

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

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

提示:以下是本篇文章正文内容,下面案例可供参考

文件上传的绕过

一、文件上传的绕过

1:使用%00来绕过(这个经常是绕过白名单的检测)
2:使用0x00来绕过 (这个用在文件命名方面的截断)
3:用空格和点来进行绕过
4:大小写混合来绕过后缀名检测
5:双写绕过
6:利用DATA来绕过
7:文件扩展名绕过
8:当后台对与文件名ph相关的都过滤了时侯
9:当对文件内容检测禁止出现<?的时候
10:文件上传和文件包含漏洞实例

1.使用步骤

(1):首先%00是在地址上进行截断 如果在post使用%00的话要对它进行url编码
因为%00在url中会解码
实质不是%00来进行截断, 其实是%00经过url编码过后的来进行截断, 在bp工具中对%00进行编码过后类似于口的形状
在这里插入图片描述读取到%00的时候就停止了 apache是从右边往左边读取的
这个方法经常用来绕过白名单的

(2):使用0x00来绕过
上传文件假如说是1.php但是经过后台处理就变成了1.php1.jpg这个时候就要用0x00来截断了

(3):使用空格和点来绕过后缀名
在文件后缀名加上空格和点过后,系统会自己把空格和点给过滤掉
但是在对方的后台是对php进行识别
我们加上点和空格过后对方识别到的就是php点和空格
从而进行了绕过
在这里插入图片描述

(4):大小写来进行绕过
当对方后台对php进行过滤可以用PhP混写来进行绕过

(5): 双写来进行绕过
当后台对php进行过滤,但是后台只对一次php进行过滤
这个时候我们可以phphpp构造这样的后缀名来进行绕过

(6):利用DATA 来进行绕过
当后台没有过滤掉字符串DATA,并且是windows版本的话加上这个DATA
系统会把数据当作文件流处理,就不会检查它的后缀名
在这里插入图片描述像这样

(7):对文件扩展名绕过
当对php可以解析php后缀还可以解析php4和php5或者phtml
asp可以解析asa,cer,cdx
aspx可以解析ashx和asmx或者ascx
jsp可以解析jspx或者jspf

(8):当后台对与文件名ph相关的都过滤了时侯
我们不能用扩展名就相当于不能够命名文件=不能执行我们写的php代码
存在.htaccess漏洞
在我们原有的基础上加上#define width 16和#define height 7这2个
在apache中会当做注释从而实现绕过 并且还不会破坏文件
例子:#define width 16
#define height 7
<FilesMatch 333.png>
SetHandler application/x-httpd-php

后面做法和.htaccess漏洞做法一样,在上传带有一句话木马的333.png的图片
连接工具就行了

(9):当对文件内容检测禁止出现<?的时候

还可以使用其他的一句话木马 换个思路看看行不行
在这里插入图片描述
(10):文件上传和文件包含漏洞实例

在这里插入图片描述先随便上传一个带有一句话木马的图片看到反应如下
如果用bp工具抓包看看数据包
看到这个关键的地方想到可能会有文件包含,然后利用php伪协议去读取一下文件
先读取index.php在这里插入图片描述在进行bas64解码得到

<?php if (isset($_POST['submit'])) { $temp_file = $_FILES['upload_file']['tmp_name']; $file_name = $_FILES['upload_file']['name']; $ext = pathinfo($file_name,PATHINFO_EXTENSION); if(preg_match("/ph/i", strtolower($ext))){ die("这可不能上传啊!"); } $content = file_get_contents($temp_file); if(preg_match("/php/i", $content)){ die("诶,被我发现了吧"); } //... } ?>

因为在前段提示还有?read.php所以我们在用php伪协议读取文件
在这里插入图片描述在进行解码得到

<?php $a=$_GET["filename"]; if(preg_match('/flag/i',$a)){ exit("nononono"); } include($a); ?>

发现还过滤falg这个关键字
所以说我们要利用文件包含来执行我们的代码
在前面说过不能命名文件名就不能够执行我们的代码
在这里插入图片描述用函数system来找到flag
因为在这里插入图片描述falg是存在的环境变量所以可以用system来找flag
然后
这里返回了路径然后在用文件包含来让它执行我们的代码

用伪协议来读取刚刚上传的文件

在这里插入图片描述falg就在这里
所以说文件上传漏洞还可以搭配其他的漏洞来使用比如说解析漏洞
简单提一下
先看一下是apache还是iis还是nginx
然后在对应版本去搜索 对应着版本来看是否符合 还要看中间件等等
比如说当是nginx解析漏洞的时候
你上传了一句话木马的图片马,返回给你一个路径
你在url中去请求那个路径在后面加/随便写.php
后面你加的东西就是来触发那个解析漏洞的


总结

这是最近学习结果,后面会有所补充,如果有错误请告诉小弟或者有什么见解可以和我分享,一起探讨一起进步。

Web安全测试中,文件上传漏洞是一种常见的安全隐患,攻击者可以通过绕过文件上传限制将恶意代码植入服务器。upload-labs靶场提供了一个练习此类渗透技术的环境,其中包含了多种不同类型的文件上传漏洞场景。 ### 文件上传绕过方法 #### 客户端验证绕过 一些网站仅依赖于前端JavaScript来检查上传文件的类型,这通常可以通过禁用或修改浏览器中的脚本来实现绕过。例如,在第一关中,可以使用三种方法完成渗透:修改MIME类型、使用Burp Suite拦截并更改请求内容或者直接构造POST请求上传非允许类型的文件[^1]。 #### 服务端验证绕过 对于后端验证,开发者可能会采用黑名单机制阻止特定扩展名(如`.php`)的文件上传。然而,这种做法容易被利用,比如通过上传具有其他可执行扩展名(如`.phtml`, `.php5`, `.pht`等)的文件来规避检测。此外,还可以尝试利用`.htaccess`文件或者其他配置文件来改变服务器行为,以允许执行原本被禁止的脚本语言。 #### 特殊文件格式绕过 某些情况下,服务器可能只接受图片文件。这时可以创建一个包含PHP代码的图片马(image horse),即所谓的“图片马”。由于`getimagesize()`函数会读取目标文件的文件头来判断是否为图片文件,因此仍然可以使用Pass-14的方法进行绕过。同样地,如果遇到使用了`exif_imagetype()`函数的情况,则需要确保上传的文件确实是一个合法的图像文件头,同时嵌入恶意代码[^4]。 #### 配置错误与解析漏洞 有时候服务器配置不当也可能导致安全问题。例如,在第五关中发现了一个`.ini`文件被用来作为上传白名单控制,通过构造特殊的文件名和路径,能够使得服务器误将非预期类型的文件当作合法文件处理。另外,若服务器存在解析漏洞,比如Apache服务器错误地将`.php.jpg`这样的文件名解析为`.php`文件,则同样可以借此上传webshell[^3]。 #### 绕过后缀黑名单 当面对严格的后缀黑名单时,可以考虑寻找是否存在双重扩展名处理缺陷,或是尝试上传带有空格、点号结尾的文件名,因为这些特殊字符有时会被过滤器忽略掉。还有就是利用Windows系统对长文件名的支持特性,构造出看似正常但实际上含有隐藏恶意扩展名的文件名。 ```python # 示例:生成一个简单的图片马 from PIL import Image import os def create_image_with_shellcode(output_filename): # 创建一个新的空白图像 img = Image.new('RGB', (1, 1), color = (73, 109, 137)) # 将PHP shellcode写入到图像数据中 php_code = "<?php system($_GET['cmd']); ?>" data = bytearray(php_code, 'utf-8') + b'\x00' * (len(data) % 4) # 填充至4字节边界 # 修改图像数据部分 pixels = list(img.getdata()) new_pixels = [] for pixel in pixels: r, g, b = pixel if len(data) > 0: r ^= data.pop(0) new_pixels.append((r, g, b)) img.putdata(new_pixels) img.save(output_filename) create_image_with_shellcode("malicious.jpg") ``` 以上代码演示了如何生成一个携带简单PHP命令执行功能的JPEG图片文件,它可以在支持PHP并且没有正确校验上传文件内容的服务器上运行。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值