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

upload-labs关卡12(基于白名单的%00截断绕过)通关思路

文章目录

  • 前言
  • 一、靶场需要了解的前置知识
    • 1、%00截断
    • 2、0x00截断
    • 3、00截断的使用条件
      • 1、php版本小于5.3.29
      • 2、magic_quotes_gpc = Off
  • 二、靶场第十二关通关思路
    • 1、看源代码
    • 2、bp抓包%00截断
    • 3、验证文件是否上传成功
  • 总结


前言

此文章只用于学习和反思巩固文件上传漏洞知识,禁止用于做非法攻击。注意靶场是可以练习的平台,不能随意去尚未授权的网站做渗透测试!!!


一、靶场需要了解的前置知识

1、%00截断

%00截断常在url中get请求使用,在url中%00表示ascll码中的0 ,而ascii中0作为特殊字符保留,表示字符串结束,所以当url中出现%00时就会认为读取已结束。所以一般文件上传绕过%00会在路径上使用。

http://xxx.com?filename=test.php%00.txt

这样服务器读取%00的时候就会中断读取,造成只读取了test.php。

2、0x00截断

0x开头表示16进制,0在十六进制中是00, 0x00就是%00解码成的16进制。其实和%00的原理没有太大区别,只是使用的方式不一样,这个0x00是手动修改为16进制变成的,通常通过bp修改,其实%00解码就是0x00,0x00通常在post请求使用。

3、00截断的使用条件

1、php版本小于5.3.29

2、magic_quotes_gpc = Off

去php.ini修改就行

二、靶场第十二关通关思路

  • 1、看源代码
  • 2、bp抓包%00截断
  • 3、验证文件是否上传成功

1、看源代码

$is_upload = false;
$msg = null;
if(isset($_POST['submit'])){$ext_arr = array('jpg','png','gif');$file_ext = substr($_FILES['upload_file']['name'],strrpos($_FILES['upload_file']['name'],".")+1);if(in_array($file_ext,$ext_arr)){$temp_file = $_FILES['upload_file']['tmp_name'];$img_path = $_GET['save_path']."/".rand(10, 99).date("YmdHis").".".$file_ext;if(move_uploaded_file($temp_file,$img_path)){$is_upload = true;} else {$msg = '上传出错!';}} else{$msg = "只允许上传.jpg|.png|.gif类型文件!";}
}

发现这是一个白名单过滤,只能上传jpg、png、gif文件。那么白名单绕过最常见的方法就是00截断了。这里发现有一个路径拼接,也就是如果上传的文件后缀名符合白名单就会随机命名文件然后拼接到文件所在的绝对路径上。那么我们可以在文件路径进行截断,把成功上传的文件后缀名截断掉,保留我们需要的php后缀名。

2、bp抓包%00截断

这里我上传含有一句话木马的文件为23.jpg,然后%00截断让其上传23.php。因为这里的save_path是get传参,也就是说url会把%00自动解码成空字符,上传后服务器就会以为是结束符就不会读取拼接上来的jpg文件了。
在这里插入图片描述

3、验证文件是否上传成功

这里访问的时候记得把9020231122143153.jpg去掉,因为成功上传的其实是23.php
最后蚁剑连接成功。
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述


总结

这一关是基于白名单的%00截断绕过,原理就是%00其实在计算机眼里是结束符,我们通过路径截断,让其拼接的正常jpg文件变成我们修改的php文件。此文章是小白自己为了巩固文件上传漏洞而写的,大佬路过请多指教!

相关文章:

  • Modbus转Profinet网关在大型自动化仓储项目应用案例
  • HTML玩转超链接a标签
  • linux 内存回收代码注释(未实现多代lru版本)
  • java_函数式接口
  • 浪潮信息云峦服务器操作系统KeyarchOS体验与实践
  • TensorFlow实战教程(二十八)-Keras实现BiLSTM微博情感分类和LDA主题挖掘分析
  • Flutter笔记:Matrix4矩阵变换与案例
  • 【前端】vue中合并表格行
  • MySQL 8.2 Command Line Client打开时一闪而过闪退问题
  • Vue 3.0 中重置 reactive 定义的响应式对象数据,恢复为初始值
  • 智能指针(Newbie Note)
  • 基于区域划分的GaN HEMT 准物理大信号模型
  • 第六章 SELinux
  • Golang http 请求如何设置代理
  • harmonyOS鸿蒙开发工具下载安装以及使用流程
  • 【108天】Java——《Head First Java》笔记(第1-4章)
  • 【笔记】你不知道的JS读书笔记——Promise
  • CSS相对定位
  • DataBase in Android
  • docker-consul
  • git 常用命令
  • javascript面向对象之创建对象
  • JS创建对象模式及其对象原型链探究(一):Object模式
  • Material Design
  • rabbitmq延迟消息示例
  • sublime配置文件
  • vue-router 实现分析
  • 可能是历史上最全的CC0版权可以免费商用的图片网站
  • 理清楚Vue的结构
  • 漫谈开发设计中的一些“原则”及“设计哲学”
  • 爬虫进阶 -- 神级程序员:让你的爬虫就像人类的用户行为!
  • 区块链分支循环
  • 驱动程序原理
  • 实现简单的正则表达式引擎
  • 系统认识JavaScript正则表达式
  • 赢得Docker挑战最佳实践
  • 中国人寿如何基于容器搭建金融PaaS云平台
  • 你对linux中grep命令知道多少?
  • 长三角G60科创走廊智能驾驶产业联盟揭牌成立,近80家企业助力智能驾驶行业发展 ...
  • 带你开发类似Pokemon Go的AR游戏
  • 浅谈sql中的in与not in,exists与not exists的区别
  • 整理一些计算机基础知识!
  • ​虚拟化系列介绍(十)
  • #{}和${}的区别是什么 -- java面试
  • (70min)字节暑假实习二面(已挂)
  • (附源码)ssm高校运动会管理系统 毕业设计 020419
  • (数据结构)顺序表的定义
  • ***php进行支付宝开发中return_url和notify_url的区别分析
  • .gitignore文件设置了忽略但不生效
  • .NET 服务 ServiceController
  • .NET 简介:跨平台、开源、高性能的开发平台
  • .NET6 开发一个检查某些状态持续多长时间的类
  • /bin/bash^M: bad interpreter: No such file ordirectory
  • [ MSF使用实例 ] 利用永恒之蓝(MS17-010)漏洞导致windows靶机蓝屏并获取靶机权限
  • [20171101]rman to destination.txt