文件上传的几种绕过方式基于upload-lbs

2024-02-25 11:38

本文主要是介绍文件上传的几种绕过方式基于upload-lbs,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.打开upload-labs网站

本关要求上传图片,为验证文件上传漏洞,提前在本地编辑好php文件,

成功上传后访问此文件可以看到phpinfo界面

尝试上传1.php

弹出 报错,在上传框处右键点击 “检查”

发现框中语句,有一个cheakfile()的函数 删除这个语句在尝试上传

 

没有报错 

在url中访问上传的文件 

成功!

关卡2

同样的步骤

删除cheakfile后尝试上传发现失败 

利用bp抓包分析

        这是抓到的包

发现存在MIME类型绕过 

MIME (Multipurpose Internet Mail Extensions)是描述消息内容类型的因特网标准。MIME 消息能包含文本、图像、音频、视频以及其他应用程序专用的数据。常见的 MIME类型如下:

 

这里修改成jpg的对应格式

 

 点击send

没有报错

尝试访问 

成功!

关卡3

尝试上述的两种方法发现不可以

检查一下源代码

发现是一个黑名单过滤 后台会过滤.php结尾文件 并且在前面也对绕过方法进行了屏蔽

此时可以尝试 使用  .php5  .phtml .pht等来绕过并不完整的黑名单

上传成功 

 右键检查可以看到 上传的文件名被修改了

访问这个路径即可

关卡4

直接检查源码

可以说吧后缀名全部给禁用了

这时候上传一个 .htacess文件

这个文件的作用是匹配文件名中的关键字(比如:当文件名[info.php.png]中包含关键字[.php],并且.htaccess文件内容如下,info.php.png 中的代码会被执行)

 上传 .htaccess文件成功

我们再上传php文件 注意 .php后缀还是会被过滤。

 

上传成功 访问测试

 

注意 url中显示文件名 1.php.jpg 但结果仍按照.php文件执行 这就是上传.htaccess文件的作用

关卡5

查看源码

此处没有过滤大小写

 尝试 1.PHp 

上传成功 访问测试 发现不行

回到upload页面 F12检查

发现上传的 1.php被重新命名了

访问新的名称 

 成功!

关卡6

此处没有进行后缀名首尾去空格

上传一个 1.php 文件

同时bp抓包

 修改文件名 .php后加空格 如图

 

响应包中含有被重命名后的 1.php 访问 

成功

关卡7

查看源码

没有过滤后缀名后的 .点

和上一关一样 bp抓包 加点 查看回包 访问

成功

关卡8

查看源码

没有过滤 ::$DATA

 一些特殊的文件命名方式在 Windows下是不被允许的,利用 Burp Suite 工具抓包修改后缀名,绕过服务端的验证后上传文件,Windows会自动去掉后面添加的。

注:此方法只适应于Windows,因为 Unix/Linux系统没有这个特性。

bp抓包

 修改 1.php名 1.php::$DATA 这样windows会自动过滤php后面的不被允许的后缀,就可以执行php文件

访问测试 

 成功!

 

 

这篇关于文件上传的几种绕过方式基于upload-lbs的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/745356

相关文章

嵌入式Linux之使用设备树驱动GPIO的实现方式

《嵌入式Linux之使用设备树驱动GPIO的实现方式》:本文主要介绍嵌入式Linux之使用设备树驱动GPIO的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、设备树配置1.1 添加 pinctrl 节点1.2 添加 LED 设备节点二、编写驱动程序2.1

Android实现定时任务的几种方式汇总(附源码)

《Android实现定时任务的几种方式汇总(附源码)》在Android应用中,定时任务(ScheduledTask)的需求几乎无处不在:从定时刷新数据、定时备份、定时推送通知,到夜间静默下载、循环执行... 目录一、项目介绍1. 背景与意义二、相关基础知识与系统约束三、方案一:Handler.postDel

gradle第三方Jar包依赖统一管理方式

《gradle第三方Jar包依赖统一管理方式》:本文主要介绍gradle第三方Jar包依赖统一管理方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录背景实现1.顶层模块build.gradle添加依赖管理插件2.顶层模块build.gradle添加所有管理依赖包

Linux之systemV共享内存方式

《Linux之systemV共享内存方式》:本文主要介绍Linux之systemV共享内存方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、工作原理二、系统调用接口1、申请共享内存(一)key的获取(二)共享内存的申请2、将共享内存段连接到进程地址空间3、将

Maven中引入 springboot 相关依赖的方式(最新推荐)

《Maven中引入springboot相关依赖的方式(最新推荐)》:本文主要介绍Maven中引入springboot相关依赖的方式(最新推荐),本文给大家介绍的非常详细,对大家的学习或工作具有... 目录Maven中引入 springboot 相关依赖的方式1. 不使用版本管理(不推荐)2、使用版本管理(推

C#使用StackExchange.Redis实现分布式锁的两种方式介绍

《C#使用StackExchange.Redis实现分布式锁的两种方式介绍》分布式锁在集群的架构中发挥着重要的作用,:本文主要介绍C#使用StackExchange.Redis实现分布式锁的... 目录自定义分布式锁获取锁释放锁自动续期StackExchange.Redis分布式锁获取锁释放锁自动续期分布式

Java对象转换的实现方式汇总

《Java对象转换的实现方式汇总》:本文主要介绍Java对象转换的多种实现方式,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录Java对象转换的多种实现方式1. 手动映射(Manual Mapping)2. Builder模式3. 工具类辅助映

Spring Boot读取配置文件的五种方式小结

《SpringBoot读取配置文件的五种方式小结》SpringBoot提供了灵活多样的方式来读取配置文件,这篇文章为大家介绍了5种常见的读取方式,文中的示例代码简洁易懂,大家可以根据自己的需要进... 目录1. 配置文件位置与加载顺序2. 读取配置文件的方式汇总方式一:使用 @Value 注解读取配置方式二

JAVA保证HashMap线程安全的几种方式

《JAVA保证HashMap线程安全的几种方式》HashMap是线程不安全的,这意味着如果多个线程并发地访问和修改同一个HashMap实例,可能会导致数据不一致和其他线程安全问题,本文主要介绍了JAV... 目录1. 使用 Collections.synchronizedMap2. 使用 Concurren

C# foreach 循环中获取索引的实现方式

《C#foreach循环中获取索引的实现方式》:本文主要介绍C#foreach循环中获取索引的实现方式,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录一、手动维护索引变量二、LINQ Select + 元组解构三、扩展方法封装索引四、使用 for 循环替代