文件上传绕过技巧大汇总-v1
记录文件上传漏洞的常见绕过/利用技巧。
v1:一部分,后续继续补。
Single
前端限制绕过
- 前端嘛,要么删,要么禁JS。
二次渲染绕过
- 
情形:网站允许上传 php等文件,但是会检查文件内容,对检测出来的恶意内容进行渲染,从而使得文件无害化。
- 
问题:当某个木马图片文件被上传时经过渲染后,将 渲染后的文件再上传时就不会查出恶意文件。
- 
绕过方法:先将一个木马文件 上传后渲染,再将经过渲染后的文件下载下来,把木马内容添加到经过渲染的图片文件,此时再上传去渲染就不会查出木马内容。
- 
实现:使用 16进制编辑器找到两次文件的异同,在相同的地方(即被判定无害)加入恶意代码(一句话木马等),再次上传就可以成功了。
条件竞争
写过关于条件竞争的文章提到过:https://www.cnblogs.com/ddd-flag/articles/18552188
多文件上传
可以上传多文件但是只检查第一份文件
- 
显然,只需要第一份上传合法文件,第二份上传马即可。 
- 
注:将第二个文件表单的 action设置为绝对路径http://xxx.com/<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)
- 
原理: MIME类型可以手动修改欺骗。
- 
方式:抓包,修改 Content-Type为指定类型(一般是图片)。
- 
常见的 MIME类型:https://developer.mozilla.org/zh-CN/docs/Web/HTTP/MIME_types/Common_types
  
文件幻数检测绕过
- 
幻数(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

 
                
             浙公网安备 33010602011771号
浙公网安备 33010602011771号