当前位置: 首页 > news >正文

网安入门12-文件上传(黑白名单,00截断)

黑名单绕过

Pass-03
有的时候后端限制了一些黑名单,比如过滤后缀名.php

我们就可以用黑名单里没有的后缀名进行绕过,例如:

  1. 大小写:.phP .pHp .AsP
  2. php1 .php2 .php3 .php9 .phtml(成功率较高)
  3. 特殊文件名绕过

比如发送的htp包里把文件名改成test.asp.或test.asp_(下划线为空格),这种命名方式在windows系统里是不被允许的,所以需要在burp之类里进行修改,然后绕过验证后,会被windows.系统自动去掉后面的点和空格,但要注意Unix/Linux系统没有这个特性。

于是我们先上传一个shell.jpg,然后抓包把后缀名改为.php1

发现浏览器按照原文展示,并没有按照php解析这个木马,那我们就尝试别的后缀
我尝试了php1-9,都不行,好在最后尝试了一下phtml,成功了,最后蚁剑一连就行啦

白名单绕过-GET型00截断

当我们遇到白名单了,只允许上传.jpg|.png|.gif

这里先介绍0x00是一个Hex编码,他表示一个空字符(可以理解为一个不可见的字符串)
在这里插入图片描述 %00与0x00类似,在URL编码下表示为空字符,URL中%00解码成16进制就是0x00

Pass-11

分析上传包,与之前的关卡不同,请求头第一行多了一个save_path的东西,把我们已知的先填上,先把Content-Disposition的filename改成"1.jpg"
在这里插入图片描述

我们猜测这个save_path的作用是指定上传之后的文件具体保存的路径,使的Response里面的src在…/upload目录下,那么我们就对这个目录动手了

尝试改一下,发现上传出错,因为目录里没有这个文件,而且我们没有权限新建这个文件
继续证明我的思路,我用上帝视角在upload文件夹里面新建了一个文件夹叫做123

再次抓包,往这个123文件夹里传图片

按照预期出现了这个上传的图片

这就证明了我们的拼接路径理论
新的上传思路就出来了:我们只需要在save_path里面随便起一个名字.php再用%00解码后的空字符截断后面的拼接上来的其他数据即可

后面这个正方型就是代表了一个不可见字符,后续步骤就一样了在文件夹中可以看到文件名就为zyh.php

白名单绕过-POST型00截断

Pass-12
我们抓包一看,save_path的地方跑到了post数据的区域

抓包分析小技巧:只要是在请求包第一个回车之后的参数全部都是post数据,在请求头第一行的是get数据

在这里插入图片描述
我们故技重施,发现失败了
原因在于GET传参和POST传参不同,post数据的特点是我们把包发过去之后,服务器会进行URL二次编码,编码后的参数到了后端再解码执行,相当于传到服务器的是%25%30%30,到了后端还是%00

我们有了新的思路,先给他解码传上去,再让他经过编码解码,到后端还是空字符,选中00%右键转换编码

通杀方法

最后再介绍一个通杀的解法,只要对方服务器不对我们上传的文件进行重命名,那我们可以在filename参数里面直接拼接一个1.php%00.jpg,再对%00进行解码,服务器前后端的校验都可以绕过

相关文章:

  • AArch64 Exception Model学习
  • kaggle如何将自己的结果存储到本地
  • Electron快速上手
  • FS【1】:SSP
  • TypeScript基础知识:类型断言
  • nginx 负载均衡
  • SWM341系列之SWM34SRET6介绍
  • 2023年全国职业院校技能大赛(高职组)“云计算应用”赛项赛卷⑤
  • springboot项目创建及采用本地tomcat打包发布
  • 点击按钮唤起微信
  • 【牛客网】BC68 X形图案
  • Linux截图方法推荐
  • 126.(leaflet篇)leaflet松散型arcgis缓存切片加载
  • 水和冰一起进微波炉会怎样?不会还有人不知道吧
  • macOS 老版本系统恢复中出现“MacBook Pro无法与恢复服务器取得联系”
  • JS 中的深拷贝与浅拷贝
  • 【391天】每日项目总结系列128(2018.03.03)
  • 【前端学习】-粗谈选择器
  • angular2 简述
  • JS进阶 - JS 、JS-Web-API与DOM、BOM
  • Laravel深入学习6 - 应用体系结构:解耦事件处理器
  • React组件设计模式(一)
  • 阿里云应用高可用服务公测发布
  • 记一次用 NodeJs 实现模拟登录的思路
  • 七牛云假注销小指南
  • 如何优雅地使用 Sublime Text
  • 三分钟教你同步 Visual Studio Code 设置
  • 新版博客前端前瞻
  • 移动互联网+智能运营体系搭建=你家有金矿啊!
  • 阿里云服务器购买完整流程
  • 国内开源镜像站点
  • #宝哥教你#查看jquery绑定的事件函数
  • (1/2)敏捷实践指南 Agile Practice Guide ([美] Project Management institute 著)
  • (C语言版)链表(三)——实现双向链表创建、删除、插入、释放内存等简单操作...
  • (Matalb时序预测)PSO-BP粒子群算法优化BP神经网络的多维时序回归预测
  • (笔记)Kotlin——Android封装ViewBinding之二 优化
  • (二)pulsar安装在独立的docker中,python测试
  • (分享)一个图片添加水印的小demo的页面,可自定义样式
  • (更新)A股上市公司华证ESG评级得分稳健性校验ESG得分年均值中位数(2009-2023年.12)
  • (一)kafka实战——kafka源码编译启动
  • (一)基于IDEA的JAVA基础1
  • (转)ORM
  • (转)使用VMware vSphere标准交换机设置网络连接
  • .NET CORE 2.0发布后没有 VIEWS视图页面文件
  • .net core使用RPC方式进行高效的HTTP服务访问
  • .NET delegate 委托 、 Event 事件,接口回调
  • .net开源工作流引擎ccflow表单数据返回值Pop分组模式和表格模式对比
  • .Net转前端开发-启航篇,如何定制博客园主题
  • /deep/和 >>>以及 ::v-deep 三者的区别
  • /dev/VolGroup00/LogVol00:unexpected inconsistency;run fsck manually
  • ??eclipse的安装配置问题!??
  • ?php echo $logosrc[0];?,如何在一行中显示logo和标题?
  • @Builder用法
  • @Not - Empty-Null-Blank
  • [2013AAA]On a fractional nonlinear hyperbolic equation arising from relative theory