文件上传漏洞进阶教程/白名单绕过/图片马制作/图片马执行

2023-11-03

一、白名单绕过

相对于前面的黑名单绕过,白名单更加难以绕过,使用白名单验证相对比较安全,但如果存在可控参数目录,也存在被绕过的风险

目录可控%00截断绕过上传

upload-lab pass11 源码分析

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

deny_arr变成ext_arr,白名单,下面判断后缀名是否在白名单中,代码相较于黑名单也简单不少

但是这里使用了$_GET['save_path']获取客户端的值,这个值可以被客户端修改,从而遗留安全隐患

截断文件名

%00截断需要gpc关闭 php版本要小于5.3.4版本

我这里版本是5.4.45先选择一个低版本

 关闭gpc

 

这种攻击手法其实与sql注入中的注释差不多,%00的意思是忽略后面的内容进行上传,如果我们上传test.png再给服务器传递的save_path改为/upload/test.php%00那么最终上传到服务器的内容为test.php,操作一下,看起来就直观了

尝试上传

看到这里save_path其实就是本地的upload文件夹的路径,在后端中与检测后的文件名拼接,将文件上传,我们通过截断,忽略检测后的内容,直接上传到我们写入的文件中

因为已知是get型,所以直接写%00就ok,get型需要进行编码

 清空前面上传的内容

放包

上传成功

POST型截断

pass-12

只是将GET改成POST了

尝试上传

一样的套路,上传test.php抓包

直接在抓包里进行解码再放包就ok了

二、文件头检测绕过

有的文件上传,上传时会检测文件头,不同的文件,文件头也不一样,常见的文件上传图片头检测 它检测图片两个字节长度,如果不是图片格式,会禁止上传文件

常见的文件头

PNG:89504E47

JPEG:FFD8FF

GIF:47494638

....

对隐写术有些了解的同学应该对这个很熟悉啦

pass-13

代码分析

nction getReailFileType($filename){
    $file = fopen($filename, "rb");
    $bin = fread($file, 2); //只读2字节
    fclose($file);
    $strInfo = @unpack("C2chars", $bin);    
    $typeCode = intval($strInfo['chars1'].$strInfo['chars2']);    
    $fileType = '';    
    switch($typeCode){      
        case 255216:            
            $fileType = 'jpg';
            break;
        case 13780:            
            $fileType = 'png';
            break;        
        case 7173:            
            $fileType = 'gif';
            break;
        default:            
            $fileType = 'unknown';
        }    
        return $fileType;
}

这时提取文件头的函数

对文件进行解包

 

转成整型,然后白名单判断

下面就是获取上传文件,调用这个函数,返回如果不是unknown就上传,代码就不展示了

图片一句话木马

为了绕过上述的检测,我们可以制作图片马,即将图片信息与木马组合到一起上传

制作

准备一张正常的图片,与恶意脚本php,放到一个目录下

 

 目录下运行CMD,执行

copy 1.png/b+test.php test.png

 

生成了一个新的png,我们直接给它上传到服务器

 

右键图片打开链接(获取图片地址),复制url

upload/3520221023175627.png

 这里需要利用文件包含漏洞,才能执行我们的图片马

我看大佬们这一关直接有个提示,有个链接,就是存在文件包含漏洞网页,但我这个靶场可能抽风了,我找了半天也没找到,所以我就自己写了一个,如果你们也没有可以直接再upload-labs文件夹下新建一个include.php

<?php
header("Content-Type:text/html;charset=utf-8");
$file=$_GET['file'];
if(isset($file))
{
	include $file;
}
else{
	show_source(__FILE__);
}
?>

复制保存就ok了

下面进入文件包含漏洞页面

将图片地址给传进去

 看到一堆乱码,这就是前面图片的内容,往下翻,就可以看到phpinfo()的结果啦

上传成功!

三、图片检测函数绕过

pass-14

 getimagesize是获取图片的大小,如果头文件不是图片会报错,直接可以利用图片马

上传

一样的上传我们做好的图片马,通过包含漏洞,进行执行

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

文件上传漏洞进阶教程/白名单绕过/图片马制作/图片马执行 的相关文章

  • IT圈大实话!卷运维不如卷网络安全

    前言 在刚刚过去的金九银十 我进行了多场网络安全的技术面试 我发现最近很多从事运维的选择了辞职 转行到了网络安全这个发展路线 说实话 运维工程师这个岗位在IT行业里面确实是处于最底层的 不管什么环节出现问题 基本都是运维背锅 薪资水平也比不
  • 通过一个寒假能学会黑客技术吗?看完你就知道了

    一个寒假能成为黑客吗 资深白帽子来告诉你 如果你想的是学完去美国五角大楼内网随意溜达几圈 想顺走一点机密文件的话 劝你还是趁早放弃 但是成为一名初级黑客还是绰绰有余的 你只需要掌握好渗透测试 Web安全 数据库 搞懂web安全防护 SQL注
  • 【网络安全】web漏洞-xml外部实体注入(XXE)

    web漏洞 xml外部实体注入 XXE 目录 web漏洞 xml外部实体注入 XXE 概念 危害 检测方法 利用方法 漏洞利用 xxe lab 有回显情况 无回显情况 pikachu靶场
  • 适用于任何公司的网络安全架构

    1 第一等级 基础级 优势 可防范基本有针对性的攻击 使攻击者难以在网络上推进 将生产环境与企业环境进行基本隔离 劣势 默认的企业网络应被视为潜在受损 普通员工的工作站以及管理员的工作站可能受到潜在威胁 因为它们在生产网络中具有基本和管理员
  • CTF之逆向入门

    逆向工程 Reverse Engineering 又称反向工程 是一种技术过程 即对一项目标产品进行逆向分析及研究 从而演绎并得出该产品的处理流程 组织结构 功能性能规格等设计要素 以制作出功能相近 但又不完全一样的产品 逆向工程源于商业及
  • 软件开发和网络安全哪个更好找工作?

    为什么今年应届毕业生找工作这么难 有时间去看看张雪峰今年为什么这么火就明白了 这么多年人才供给和需求错配的问题 在经济下行的今年 集中爆发 供给端 大学生越来越多 需求端 低端工作大家不愿去 高端岗位又太少 很多基础行业 比如机械 土木 所
  • 掌握内网渗透之道,成为实战高手,看《内网渗透实战攻略》就够了

    文末送书 文末送书 今天推荐一本网络安全领域优质书籍 内网渗透实战攻略 文章目录 前言 如何阅读本书 目录 文末送书 前言 当今 网络系统面临着越来越严峻的安全挑战 在众多的安全挑战中 一种有组织 有特定目标 长时间持续的新型网络攻击日益猖
  • 【网络安全】Web缓存欺骗攻击原理及攻防实战

    Web缓存欺骗是一种新的攻击方式 危害范围可扩大至各种技术及框架 本文仅分享Web缓存攻击知识 不承担任何由于传播 利用本文所发布内容而造成的任何后果及法律责任 文章目录 前言 攻击前提及原理 实例一 ChatGPT帐户接管漏洞 实例二 P
  • 【CTF必看】从零开始的CTF学习路线(超详细),让你从小白进阶成大神!

    最近很多朋友在后台私信我 问应该怎么入门CTF 个人认为入门CTF之前大家应该先了解到底 什么是CTF 而你 学CTF的目的又到底是什么 其次便是最好具备相应的编程能力 若是完全不具备这些能力极有可能直接被劝退 毕竟比赛的时候动不动写个脚本
  • 信号浪涌保护器的原理和行业应用方案

    信号浪涌保护器 Surge Protective Device 简称SPD 是一种用于限制信号线路中瞬态过电压和分泄浪涌电流的防雷装置 主要用于保护各类信号线路及设备的防雷安全 信号浪涌保护器的原理是利用气体放电管 压敏电阻 齐纳二极管等非
  • 5个步骤,教你瞬间明白线程和线程安全

    记得今年3月份刚来杭州面试的时候 有一家公司的技术总监问了我这样一个问题 你来说说有哪些线程安全的类 我心里一想 这我早都背好了 稀里哗啦说了一大堆 他又接着问 那你再来说说什么是线程安全 然后我就GG了 说真的 我们整天说线程安全 但是对
  • 前端必备的 web 安全知识手记

    前言 安全这种东西就是不发生则已 一发生则惊人 作为前端 平时对这方面的知识没啥研究 最近了解了下 特此沉淀 文章内容包括以下几个典型的 web 安全知识点 XSS CSRF 点击劫持 SQL 注入和上传问题等 下文以小王代指攻击者 话不多
  • WEB前端常见受攻击方式及解决办法总结

    一个网址建立后 如果不注意安全问题 就很容易被人攻击 下面讨论一下集中漏洞情况和放置攻击的方法 一 SQL注入 所谓的SQL注入 就是通过把SQL命令插入到web表单提交或输入域名或页面请求的查询字符串 最终达到欺骗服务器执行恶意的SQL命
  • 用户数据中的幸存者偏差

    幸存者偏差 Survivorship bias 是一种常见的逻辑谬误 意思是没有考虑到筛选的过程 忽略了被筛选掉的关键信息 只看到经过筛选后而产生的结果 先讲个故事 二战时 无奈德国空防强大 盟军战机损毁严重 于是军方便找来科学家统计飞机受
  • Android开发中常见安全问题和解决方案

    前言 开发APP时经常有问到 APP的安全怎么保障 应用程序被PJ了怎么办 手机被人捡去了怎么办 特别在号称 安全第一 风控牛逼 的银行系统内 移动产品安全性仍被持有怀疑态度 那我们来总结下APP安全的方向和具体知识 1 应用程序安全 2
  • 小白入门黑客之渗透测试(超详细)基本流程(内附工具)

    经常会收到小伙伴们这样的私信 为什么我总是挖不到漏洞呢 渗透到底是什么样的流程呢 所以全网最详细的渗透测试流程来了 渗透测试其实就是通过一些手段来找到网站 APP 网络服务 软件 服务器等网络设备和应用的漏洞 告诉管理员有哪些漏洞 怎么填补
  • 网络安全基础知识面试题库

    1 基于路由器的攻击手段 1 1 源IP地址欺骗式攻击 入侵者从外部传输一个伪装成来自内部主机的数据包 数据包的IP是 内网的合法IP 对策 丢弃所有来自路由器外端口 却使用内部源地址的数据包 1 2 源路由攻击 入侵者让数据包循着一个不可
  • 【方法】如何把Excel“只读方式”变成可直接编辑?

    Excel在 只读方式 下 编辑后是无法直接保存原文件的 那如何可以直接编辑原文件呢 下面来一起看看看吧 如果Excel设置的是无密码的 只读方式 那在打开Excel后 会出现对话框 提示 是否以只读方式打开 如果想直接编辑文件 选择 否
  • 【安全】Java幂等性校验解决重复点击(6种实现方式)

    目录 一 简介 1 1 什么是幂等 1 2 为什么需要幂等性 1 3 接口超时 应该如何处理 1 4 幂等性对系统的影响 二 Restful API 接口的幂等性 三 实现方式 3 1 数据库层面 主键 唯一索引冲突 3 2 数据库层面 乐
  • 【安全-SSH】SSH安全设置

    今天发现自己的公有云服务器被攻击了 在这里插入图片描述 https img blog csdnimg cn direct cafdca04646f4b8b838400ec79ac282f png 然后查看了登录日志 如上图 ls sh va

随机推荐

  • 《因果学习周刊》第13期:ICLR 23因果推断高分论文

    No 13 智源社区 因果学习组 因 果 学 习 研究 观点 资源 活动 周刊订阅 告诉大家一个好消息 因果学习周刊 已经开启 订阅功能 以后我们会向您自动推送最新版的 因果学习周刊 订阅方法 方式1 扫描下面二维码 进入 因果学习周刊 主
  • Unity—英雄无敌(前方高能)

    英雄无敌 VR Project 前方高能 敌人模块 武器模块 HTC VIVE 玩家模块 可以学习考参一下本文章的思想 思路甚至是细节呦 需求分析是重点 目录 敌人模块 敌人沿指定路线运动 受击后减血死亡 运动播放跑步动画 攻击播放攻击动画
  • 【hadoop】windows上hadoop环境的搭建步骤

    文章目录 前言 基础环境 下载hadoop安装包 下载hadoop在windows中的依赖 配置环境变量 Hadoop hdfs搭建 创建hadfs数据目录 修改JAVA依赖 修改配置文件 初始化hdfs namenode 启动hdfs 前
  • ubuntu用户添加adduser, useradd并给予sudo权限

    ubuntu和windows一样 可以任意创建或者删除新的用户 windows下比较简单 ubuntu下需要使用命令 不过操作起来不是很繁琐 所以我尽量写的详细一些 如何创建ubuntu新用户 首先打开终端 输入 sudo adduser
  • 【笔记】黑马程序员 MySQL数据库入门到精通 —— 基础篇_实践

    文章目录 SQL语法 SQL语法 DDL 操作数据库 表的定义 1 操作数据库 2 操作表 实践 设计一张员工信息表 SQL语法 DML 增删改 表中的数据 SQL语法 DQL 查询表中的数据 1 基本查询 不带任何条件 2 条件查询 WH
  • Umi + Dva (model数据使用教程demo)

    React 不多说 3大框架之一 Dva 是由阿里架构师 sorrycc 带领 team 完成的一套前端框架 在作者的 github 里是这么描述它的 dva 是 react 和 redux 的最佳实践 现在已经有了自己的官网 https
  • PostgreSQL备份与还原指定数据库数据和导出指定的数据表

    PostgreSQL备份与还原指定数据库数据 PostgreSQL备份与还原指定数据库数据 备份 pg dump 还原 psql Postgresql导出指定的数据表 PostgreSQL备份与还原指定数据库数据 备份 pg dump pg
  • vue获取当前时间并时时刷新

    vue获取当前时间并时时刷新 页面显示 div span nowDate span span class houertime hourDate span div 图片上传失败 我是分开年月日和时分秒 给时分秒加样式 2022 11 24 1
  • [windows优化]win10折腾过程

    2018 11 27更新 没固态硬盘 拯救者还不值3000 非常卡 双十一 终于忍不住买了块固态硬盘 刚好最近技术发展 固态硬盘降价了 入手三星750 M 2 250G 如果机子不能识别固态硬盘 请进入BIOS 设置启动模式为UEFI 进入
  • CPU眼里的: MMU

    一 MMU与空间独立性 内存管理单元 memory management unit P1P2为两个进程 它们之间存在空间独立性 p1与p2的a虽然同一虚拟内存 但经过MMU会映射在物理内存的不同地址 真正的物理内存空间就是天空 每个进程就是
  • adas记录仪app_4K旗舰丨盯盯拍MINI5智能行车记录仪荣耀新生!

    2020年5月19日 盯盯拍MINI5 4K旗舰行车记录仪正式发布 本次新品不仅在影像上实现再一次突破 在传输 存储及远程互联等功能上 也有更多创新升级 同时 盯盯拍MINI5作为畅连通话及AR导航视觉终端 也在最新的荣耀智慧生活新品发布会
  • 相机姿态估计

    目录 一 相机姿态估计原理 二 相机姿态估计实现 一 相机姿态估计原理 首先介绍一下什么是世界坐标系和相机坐标系 世界坐标系是自己定义的一个坐标系 这里我定义世界坐标系是X轴垂直屏幕指向人 Y轴水平向右 Z轴竖直向上 相机坐标系有统一的规定
  • 用matlab绘制幂函数

    用matlab绘制幂函数 下周轮到我做论文汇报了 刚好前两天看了网格水印的文章 就决定汇报前两天看到的那篇论文了 在准备ppt的过程中 绘制了一些幂函数 感觉matlab真的是很强大啊 可以绘制各种曲线 下面就简要介绍一下如何用matlab
  • Python错误笔记:NameError: name 'M' is not defined

    1 在使用name input 时报 NameError name M is not defined的错误 解决方式 使用raw input 代替input 资料 https blog csdn net dq dm article deta
  • iOS protobuf3.1.0使用

    Protobuf简介 Protocol Buffer是google 的一种数据交换的格式 已经在Github开源 目前最新版本是3 1 0 它独立于语言 独立于平台 google 提供了多种语言的实现 Java C C Go 和 Pytho
  • java ResultSet获得总行数

    在Java中 获得ResultSet的总行数的方法有以下几种 第一种 利用ResultSet的getRow方法来获得ResultSet的总行数 Statement stmt con createStatement ResultSet TYP
  • 扩散模型实战(一):基本原理介绍

    扩散模型 Diffusion Model 是 类 分先进的基于物理热 学中的扩散思想的深度学习 成模型 主要包括前向扩散和反向扩散两个过程 成模型除了扩散模型之外 还有出现较早的VAE Variational Auto Encoder 变分
  • pandas入门:导出数据的四种方式

    pandas导出数据到文件的四种方式 import pandas as pd import pymysql df pd DataFrame A 3 4 8 9 B 1 2 2 4 4 5 7 3 C aa bb cc dd def expo
  • MATLAB经典代码实现---LASSO和Elastic net

    作为正则化约束或者变量稀疏筛选相关领域的经典分析方法 最小绝对收缩和选择方法 Least Absolute Shrinkage and Selection Operator LASSO 和弹性网络 Elastic net 已被广泛应用到各行
  • 文件上传漏洞进阶教程/白名单绕过/图片马制作/图片马执行

    一 白名单绕过 相对于前面的黑名单绕过 白名单更加难以绕过 使用白名单验证相对比较安全 但如果存在可控参数目录 也存在被绕过的风险 目录可控 00截断绕过上传 upload lab pass11 源码分析 is upload false m