web-文件上传和upload-labs靶场通关

目录

前端过滤

uploads-lab-1:

后端验证

upload-labs-2:mime验证

upload-labs-3:黑名单绕过

upload-labs-4:黑名单绕过-.htaccess(这里得用旧版的phpstudy,新版的不行)

upload-labs-5:后缀名绕过

upload-labs-6:大小写绕过

upload-labs-7:后缀名加空格绕过

upload-labs-8:后缀名加点绕过

upload-labs-9:文件流或者空格点

upload-labs-10:双写绕过或者点空格点绕过

upload-labs-11:双写绕过

upload-labs-12:截断符%00绕过

upload-labs-13:文件包含、文件头检验

upload-labs-14

upload-labs-15:exif_imagetype()判断图像的类型

连接

知识点:

一句话木马


-----------------------
  webshell利用工具:
-----------------------
蚁剑:
    https://github.com/AntSwordProject/AntSword-Loader
    https://github.com/AntSwordProject/antSword
冰蝎:
    https://github.com/rebeyond/Behinder
哥斯拉:
    https://github.com/BeichenDream/Godzilla

文件上传靶场:
    https://github.com/c0ny1/upload-labs

 

前端过滤

绕过前端验证

①关闭js

②通过bp抓包修改文件的后缀名

uploads-lab-1:

可以看到页面有一个弹窗,弹窗就联想到是前端的js代码的alert,判断他是js进行验证。

 关闭js之后,文件上传成功

打开之后就可以看到我们的phpinfo()

后端验证

知识点:

1.通过php对文件进行验证

2.Content-Type(MediaType),即是Internet Media Type,互联网媒体类型,也叫做MIME类型。

3.上传.htaccess文件,可以帮我们实现:网页重定向,定义404错误,改变文件扩展名,运行/阻止特定用户访问某目录或者文件,配置默认文档。运行一个的时候,他会先去检测一下有没有.htaccess这个文件。如果有的话,就会先去访问这个.htacess文件,然后查看.htacess标签中是否存在我们要访问的文件。比如说在.htacess文件的标签中有04.jpg文件,他就会把文件的mime类型先转化为指定类型,然后再去执行。

4.文件流是指在计算机中读取或者写入文件的过程,data是默认方式

.htaccess内容为:
    <FilesMatch "04.jpg">
    SetHandler application/x-httpd-php
    </FilesMatch>

application/x-httpd-php:php的mime类型

防御:

        ①二次渲染。对图片进行加工处理,比如对你上传的图片在进行一次截图

        ②重命名。对上传的文件图片重命名,方法之你访问你上传的图片

绕过:

①抓包修改文件的mime类型

②使用 php3,php4,php5,phtml,phps 等拓展名绕过,他们都是可以被当成普通的php函数进行识别的。

③修改文件的后缀名。在windows系统中,要是后缀名后面加上了一个点或者空格的话,就是会默认帮你删除掉的,这事windows中特有的。在文件上传的时候,可以在后面加上 点和空格 来实行绕过

④Windows文件流特性绕过,文件名后缀名改成09.php::$DATA。  php::$DATA

⑤大小写绕过

⑥双写绕过(后缀名直接被删除掉 )

⑦截断符%00的运用。上传路径名%00截断绕过。上传的文件名写成1.jpg, save_path改成../upload/1.php%00,最后保存下来的文件就是1.php。

upload-labs-2:mime验证

这里和第一关不一样的提示,不是弹窗,有可能是后端验证

将Content-Type的内容改为:image/png,文件上床成功

 upload-labs-3:黑名单绕过

upload-labs-4:黑名单绕过-.htaccess(这里得用旧版的phpstudy,新版的不行)

编辑并且上床.htaccess文件

<FilesMatch "1.jpg">SetHandler application/x-httpd-php
</FilesMatch>

然后再上传1.jpg文件就可以了。可以看到后后缀名为jpg的文件解析成立php

upload-labs-5:后缀名绕过

在文件后缀名后面加上  点空格点,就可以了。

upload-labs-6:大小写绕过

upload-labs-7:后缀名加空格绕过

upload-labs-8:后缀名加点绕过

upload-labs-9:文件流或者空格点

①文件流绕过(就是后缀名绕过)

phpinfo.php::$data

②用点空格点绕过

upload-labs-10:双写绕过或者点空格点绕过

①双写绕过

②点空格点绕过

upload-labs-11:双写绕过

直接上传普通的php文件发现可以上传,点开图片链接,发现php被删除掉了。看到被删除,第一反应双写绕过

upload-labs-12:截断符%00绕过

直接在upload的path中写上php后缀的文件名加上截断符,上传的路径会拼接成/upload/1.php%00/1.jpg。但是此时由于截断符的存在,他会把后面的数据都截断掉,所以就会只剩下1.php。识别文件名的时候就是识别出文件名为1.php,然后包的请求体的内容自然也就会写在了1.php中。

 

upload-labs-13:文件包含、文件头检验

①就是把截断符改成hex编码进行绕过,再1.php后面加上hex00

注意:

使用POST传地址,POST不会对里面的数据自动解码,需要使用hex(十六进制编码)加上00截断。因此在本关不可以使用%00,需要使用00。

②上传图片马

图片马的生成

copy normal.jpg /b + shell.php /a webshell.jpg

文件包含访问路径

http://127.0.0.1:82/include.php/?file=upload/2020230726052227.jpg

 ③修改文件头

http://127.0.0.1:82/include.php/?file=upload/5720230726053046.gif

 

upload-labs-14

        本关使用了getimagesize()函数,尝试读取上传文件(图片)的大小,如果该函数能够成功读取上传文件的大小,就说明该文件是一个图片;如果不能成功读取,那么就说明该文件不是一张图片,是一个恶意文件。

有bug正常的图片也不行

upload-labs-15:exif_imagetype()判断图像的类型

①图片马

 ②gif文件头

 

连接

知识点:

①eval() 函数把字符串按照 PHP 代码来计算。该字符串必须是合法的 PHP 代码,且必须以分号

②·system() 输出并返回最后一行shell结果。可以将字符串执行成cmd的命令

③@:抑制报错,如果报错不会回显到前端

关于shell和webshell

shell实际上指的是一个接受由键盘输入的命令并将其传递给操作系统来执行的程序
Webshell:Webshell是黑客经常使用的一种恶意脚本,其目的是获得对服务器的执行操作权限,比如执行系统命令、窃取用户数据、删除web页面、修改主页等,其危害不言而喻。黑客通常利用常见的漏洞,如SQL注入、远程文件包含(RFI)、FTP,甚至使用跨站点脚本攻击(XSS)等方式作为社会工程攻击的一部分,最终达到控制网站服务器的目的。

一句话木马

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

①用get post request都可以,看后端用哪种方式来接收。有一些网站get是不行的

②post里面用来接收前端传递过来的参数,eval把传递过来的参数变成cmd命令执行

 

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

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

相关文章

Android Ble蓝牙App(一)扫描

Ble蓝牙App&#xff08;一&#xff09;扫描 前言正文一、基本配置二、扫描准备三、扫描页面① 增加UI布局② 点击监听③ 扫描处理④ 广播处理 四、权限处理五、扫描结果① 列表适配器② 扫描结果处理③ 接收结果 六、源码 前言 关于低功耗的蓝牙介绍我已经做过很多了&#xff0…

FlinkSql维表join之Temporal table join

什么是维表join&#xff1f; 对于每条流式数据&#xff0c;可以关联一个外部维表数据源&#xff0c;为FlinkSql实时计算提供数据关联查询。 说明&#xff1a; 维表是一张不断变化的表&#xff0c;在维表JOIN时&#xff0c;需指明该条记录关联维表快照的时刻。维表JOIN仅支持对…

native webrtc支持切换音频采集设备和获取裸流

https://www.yuque.com/caokunchao/rtendq/oq8w3qgs3g59whru 前言 版本webrtc m96 1、修改webrtc m96代码&#xff0c;向外提供一个adm指针的接口出来 2、外部来获取指针进行设备的选择 3、外部获取音频裸流&#xff0c;麦克风或者扬声器的数据 修改webrtc代码 1、修改H:\w…

form-data 提交文件请求远程调用

文件请求方法 /*** 上传图文消息内的图片 获取url* 富文本内的图片** param file*/public static String uploadMediaGetUrl(File file) throws IOException {if (!file.exists()) {return null;}String responseData null;try {String url "http://localhost:8503/fil…

Linux NUMA架构(非统一内存访问)

NUMA架构 NUMA Architecture| Non Uniform Memory Access Policy/Model | Numa Node Configuration (CPU Affinity) NUMA架构产生的原因 cpu的高速处理功能和内存存储直接的速度会严重影响cpu的性能。传统的计算机单核架构,cpu通过内存总线(内存访问控制器)直接连接到一…

# Unity 如何获取Texture 的内存大小

Unity 如何获取Texture 的内存大小 在Unity中&#xff0c;要获取Texture的内存文件大小&#xff0c;可以使用UnityEditor.TextureUtil类中的一些函数。这些函数提供了获取存储内存大小和运行时内存大小的方法。由于UnityEditor.TextureUtil是一个内部类&#xff0c;我们需要使…

一些面试(笔试)题

1、请解释如下 cron6&#xff1a; * * * * * test -f /etc/dAppCluster/gethits.py && /etc/dAppCluster/gethitspy > /dev/null 2>&1 20 4 * * * test -d /data1/www/logs && /usr/bin/find /data1/www/logs -name *-error_log"-atime 7 -type…

分段@Transactional 坑及失效问题

Transactional 背景&#xff1a;在某些情况下&#xff0c;我们需要分段transaction&#xff0c;在最外面没有transaction&#xff0c;里面分成几个transaction&#xff0c;保证分段是成功的。 问题代码&#xff1a; Service public Order getOrder1(String id) {Optional<Or…

【笔记】流沙河讲庄子:心斋与坐忘

《庄子》这部书有三十三篇&#xff0c;这三十三篇&#xff0c;从魏晋南北朝起&#xff0c;经过唐代以后&#xff0c;历来研究者都把它分为三个部分&#xff1a;《内篇》《外篇》《杂篇》。所谓《内篇》&#xff0c;是指体现庄周的哲学思想和文化思想的核心部分&#xff1b;所谓…

MySQL~事务

二、事务 1、基本介绍 概念&#xff1a;如果一个包含多个步骤的业务操作&#xff0c;被事务管理&#xff0c;那么这些操作要么同时成功&#xff0c;要么同时失败。 2、操作&#xff1a; 开启事务&#xff1a; start transaction; 回滚&#xff1a;rollback; 提交&#xff…

全网最全讲的最详细的多线程原理

在我们开始讲多线程之前&#xff0c;我们先来了解一下什么是进程&#xff0c;什么是线程。进程和线程是操作系统中两个容易混淆的概念。 进程 在Windows操作系统中打开任务管理器&#xff0c;可以查看进程和线程的详细信息。也可以使用专业的进程查看小软件——Process Explo…

WebSocket

WebSocket详解 WebSocket是一种在单个 TCP 连接上进行全双工通信的协议&#xff0c;它允许客户端和服务器之间进行实时数据交换。与传统的HTTP请求相比&#xff0c;WebSocket具有更低的延迟和更高的并发性&#xff0c;适用于实时通信场景&#xff0c;如即时聊天、实时游戏、实…

javascript实现几何粒子星空连线背景效果

javascript实现几何粒子星空连线背景效果 <html><head><meta charset"UTF-8"><title>几何星空连线背景</title><script src"./ParticleBackground.js"></script> </head><body><canvas id"…

vue2入门学习路线指引

1.插值表达式 2.指令v-bind 3.指令v-for 4.指令v-text和v-html 5.指令v-if和v-show 6.指令v-if, v-else-if和v-else 7.指令v-on和methods 8.指令v-on事件对象,事件修饰符和按键修饰符 9.指令v-model双向绑定和v-model修饰符 10.动态修改标签的class样式 11.动态修改标签的style…

MySql 知识大汇总

数据库索引 数据库索引是一种数据结构&#xff0c;用于提高数据库查询的速度和效率。索引可以看作是表中一列或多列的值的快速查找方式&#xff0c;类似于书籍的目录。通过创建索引&#xff0c;可以减少数据库的扫描量&#xff0c;加快数据的检索速度。 常见的索引类型 常见…

Linux进程调度

初探Linux进程调度 已知&#xff1a;父进程创建子进程后&#xff0c;父子进程同时运行。 问题&#xff1a;如果计算机只有一个处理器&#xff0c;父子进程以什么方式同时执行&#xff1f; 基本概念 运行&#xff1a;一个可执行程序从文件&#xff0c;变成进程的过程。 执行…

MySQL碎片清理

为什么产生&#xff1f; 经过大量增删改的表&#xff0c;都可能存在碎片 MySQL数据结构是B树&#xff0c; 删除某一记录&#xff0c;只会标记为删除&#xff0c;后续插入一条该区间的记录&#xff0c;就会复用这个位置。 删除整个数据页的记录&#xff0c;则整个页标记为“可…

微软对Visual Studio 17.7 Preview 4进行版本更新,新插件管理器亮相

近期微软发布了Visual Studio 17.7 Preview 4版本&#xff0c;而在这个版本当中&#xff0c;全新设计的扩展插件管理器将亮相&#xff0c;并且可以让用户可更简单地安装和管理扩展插件。 据了解&#xff0c;目前用户可以从 Visual Studio Marketplace 下载各式各样的 VS 扩展插…

常用的CSS渐变样式

边框渐变 方案1&#xff1a; 边框渐变( 支持圆角) width: 726px;height: 144px;border-radius: 24px;border: 5px solid transparent;background-clip: padding-box, border-box; background-origin: padding-box, border-box; background-image: linear-gradient(to right, #f…

linux/drivers/leds/leds-gpio.c学习

linux/drivers/leds/leds-gpio.c学习 linux/drivers/leds/leds-gpio.c 是 Linux 内核中的一个驱动程序文件&#xff0c;用于控制 GPIO 引脚上的 LED 灯。下面是对该文件的更详细解读&#xff1a; 1. 头文件引入&#xff1a;该文件引入了一些必要的头文件&#xff0c;包括 <…