文件上传进阶(三)值得关注的3种类型漏洞

★★免责声明★★
文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与学习之用,读者将信息做其他用途,由Ta承担全部法律及连带责任,文章作者不承担任何法律及连带责任。

0、前置说明和绕过原理

0.1、环境说明

请移步《文件上传靶场实战:upload-labs第1-3关》

0.2、一句话木马

一句话木马文件命名info.php,打印服务器相关信息的,在后面实验过程中都是同一个,源码内容如下:

<?php phpinfo();?>
0.3、路径相关知识
"./":代表当前目录
"../":代表上一层目录
"/":代表根目录
0.4、00截断原理

0x00是十六进制表示方法,是ascii码为0的字符,在有些函数处理时,会把这个字符当做结束符。系统在对文件名的读取时,如果遇到0x00,就会认为读取已结束。在PHP5.3之后的版本中完全修复了00截断。并且00截断受限与magic_quotes_gpc,addslashes函数。

注意:一定要关闭GPC,否则无法成功。 靶场实验:Pass-11~12

0.5、图片Webshell

在服务端的PHP代码中,对于用户上传的文件做文件类型检查,查看文件格式是否符合上传规范。可以检查文件二进制格式的前几个字节,从而判断文件类型是否正确。所以可以在文件头加上GIF89A欺骗,以一句话木马为例

GIF89A
<?php phpinfo();?>

靶场实验:Pass-13

0.6、任意文件包含漏洞

在PHP中,使用include、require、include_once、require_once函数包含的文件都会被当作PHP代码执行,无论文件的名称是什么,只要符合文件内容符合PHP代码规范,都会被当作PHP代码执行。 靶场实验:Pass-13~16都有用到文件包含。

include(): 找不到被包含文件,报错,但会继续运行脚本;
include_once(): 与include()类似,区别:当重复调用同一文件时,程序只调用一次;
require(): 找不到被包含文件,报错并且停止运行脚本;
require_once(): 与require类似,区别:当重复调用同一文件时,程序只调用一次;include_once()和require_once()这两个函数只包含一次,适用于在脚本执行期想确保只被包含一次,以避免函数重定义,变量重新赋值等问题。当使用以上四个函数包含一个新文件时,该文件将作为PHP代码执行,PHP内核并不会在意该包含的文件是什么类型(无论是txt、图片文件还是远程URL,都会被作为PHP代码执行)。

文件包含的特征: URL参数带?page=、?file= 、?home=等,具体情况具体分析。

需要3个条件:

1、include等函数通过动态变量的方式引入需要包含的文件

2、用户能够控制该动态变量

3、被包含的文件可被访问

漏洞危害:

一旦被恶意利用会带来很大的危害,本地文件包含不仅能够包含web文件目录中的一些配置文件(比如Web应用、数据库配置文件、config文件),还可以查看到一些Web动态页面的源代码,为攻击者进一步发掘web应用漏洞提供条件,甚至一旦与路径遍历漏洞相结合,还可能直接攫取目标系统的用户名与密码等文件。并且能执行任意代码,甚至控制服务器。

防护措施:

1、 包含文件的参数过滤
① 文件名过滤:白名单或者黑名单过滤
②不使用动态变量进行包含操作,设置字典等静态处理
③文件名后缀固定

2、路径限制
①目录限制,在用户提交的变量前增加固定的路径,限制用户可调用的目录范围
②目录回退符过滤,避免回退符生效导致路径变化

3、中间件的安全配置
①PHP版本小于5.4在php.ini中设置magic_quotes_gpc=on(5.4 以后被放弃用)magic_quotes_gpc设置是否自动为GPC(get,post,cookie)传来的数据中的’"\加反斜线
②限制访问区域:php.ini中设置open_basedir来限制用户访问文件的活动范围等;apache 也有相关配置
③设置访问权限:限制当前中间件所在用户的访问权限,例如:web 服务器独立用户,并且只拥有访问目录和使用中间件的权限,从而有效避免越权访问其他文件;

4.搭建RASP阻止代码注执行

1、Pass-11

1.0、攻击思路

参数配置:magic_quotes_gpc = Off,如果修改重启一下服务,操作如图:

在这里插入图片描述

GET-%00截断,看源码保存路径是GET方式获取,使用BP拦截把info.php再加截断%00拼接上,提交内容的文件名后缀修改为.jpg欺骗过去。上传成功,获取图片路径后把info.php后的内容手动删除掉,解析成功。
在这里插入图片描述

1.1、BurpSuite拦截

在这里插入图片描述

1.2、木马解析成功

回到文件上传页面,右击新标签页面打开,把?及后面的部分删除,木马解析成功。
在这里插入图片描述
在这里插入图片描述

2、Pass-12

2.0、攻击思路

和第11关类似,只是提交方法为POST方式,使用BP拦截把info.php再加截断%00拼接上,然后用URL编码的方式把%00编码后再放包提交,原提交内容的文件名后缀修改为.jpg欺骗过去。上传成功,获取图片路径后把info.php后的内容手动删除掉,解析成功。
在这里插入图片描述

2.1、BurpSuite拦截

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

2.2、木马解析成功

回到文件上传页面,右击新标签页面打开,把?及后面的部分删除,木马解析成功。
在这里插入图片描述
在这里插入图片描述

3、Pass-13

3.0、攻击思路

编辑info.php内容,在上面加上GIF89A,并把文件后缀名修改为.jpg,文件内容如下:

GIF89A
<?php phpinfo();?>

上传成功,利用文件包含的漏洞来攻击。

3.1、文件上传

选择制作的图片木马2.jpg上传成功,访问include.php看到源码是通过GET访问参数:file方式包含里面。因此右击访问图片获取到图片的路径来拼接上。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.2、木马解析成功

注意访问路径是/include.php?file=,再拼接上【图片右击打开的路径】。
在这里插入图片描述

4、Pass-14

处理方式同Pass-13,验证过是一样的。就不再重复截图了。

5、Pass-15

5.0、攻击思路

看源码提示,php配置需要开启php_exif模块,到小皮/Extensions/php/目录下找到对应版本的php.ini,打开并搜索关键字:php_exif.dll把前面的分号删除就是打开了。然后重启Apache服务
在这里插入图片描述

其他操作就跟Pass-13一样了,验证成功。

6、Pass-16

6.0、攻击思路

从源码和提示得知是图片二次渲染,先从网上下载一个可以正常上传的gif格式的图片cat.gif。为什么选择gif,jpg格式有尝试过失败,也从网上其他人测试过建议使用gif格式成功率高。使用以下命令制作图片马

# 制作图片马命令
copy cat.gif/b + info.php/a 3.gif# info.php内容
<?php phpinfo();?>
6.1、文件上传后下载并制作木马

上传3.gif成功后,右击新标签页下载到本地,使用工具EmEditor打开发现原来在最后的一句话木马不见了,被拼接上其他内容,跟原文件cat.gif比对,找到相同编码内容部分,找一处替换成一句话木马的编码内容,注意:长度要相同,替换完后注意确认图片是否正常显示。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

6.2、再次文件上传

用第6.1、步骤文件上传后下载并制作木马的图片再重新上传。

6.3、木马解析成功

回到文件上传页面,右击新标签页面打开,注意访问路径是/include.php?file=,再拼接上【图片右击打开的路径】。
在这里插入图片描述
在这里插入图片描述

7、资料获取

请关注我的公众号:大象只为你,回复:EmEditor,获取EmEditor工具和靶场Pass-16使用的cat.gif图片原件。git图片也可以自行百度下载。

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

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

相关文章

高效视频剪辑:视频合并让视频焕然一新,添加背景音乐更动听

随着社交媒体和数字内容的普及&#xff0c;视频剪辑已成为一项常用的技能。除了基本的剪辑技巧外&#xff0c;添加合适的背景音乐也是提升视频质量的方法。下面来看云炫AI智剪的高效视频剪辑技巧——如何批量合并视频&#xff0c;添加动听的背景音乐。 视频合并后的效果展示&a…

【Leetcode】277.搜寻名人

一、题目 1、题目描述 假设你是一个专业的狗仔,参加了一个 n 人派对,其中每个人被从 0 到 n - 1 标号。在这个派对人群当中可能存在一位 “名人”。所谓 “名人” 的定义是:其他所有 n - 1 个人都认识他/她,而他/她并不认识其他任何人。 现在你想要确认这个 “名人” 是…

SpringCloud之Nacos

一、微服务介绍 1. 什么是微服务 2014年,Martin Fowler(马丁福勒 ) 提出了微服务的概念,定义了微服务是由以单一应用程序构成的小服务,自己拥有自己的进程与轻量化处理,服务依业务功能设计,以全自动的方式部署,与其他服务使用 HTTP API 通信。同时服务会使用最小的规模…

MedSegDiff-V2: Diffusion based Medical Image Segmentation with Transformer

MedSegDiff-V2:基于变压器的扩散医学图像分割 摘要 扩散概率模型(Diffusion Probabilistic Model, DPM)最近在计算机视觉领域获得了广泛的应用&#xff0c;这要归功于它的图像生成应用&#xff0c;如Imagen、Latent Diffusion Models和Stable Diffusion&#xff0c;这些应用已…

MySQL(视图,存储函数,存储过程)

作业1&#xff1a; 作业实现&#xff1a; 首先创建学生表&#xff0c;课程表&#xff0c;以及学生选课表。 CREATE TABLE Student (Sno INT PRIMARY KEY,Sname VARCHAR(20) NOT NULL,Ssex CHAR(1) CHECK (Ssex IN (男, 女)),Sage INT,SDept VARCHAR(20) DEFAULT 计算机 );CRE…

QT-QML2048小游戏

QT-QML2048小游戏 一、演示效果二、关键程序三、下载链接 一、演示效果 二、关键程序 import QtQuick 2.2 import QtQuick.Controls 1.1 import QtQuick.Controls.Styles 1.1 import QtQuick.Dialogs 1.1 import QtQuick.Window 2.1 import "2048.js" as MyScriptAp…

基于深度学习的时间序列算法总结

1.概述 深度学习方法是一种利用神经网络模型进行高级模式识别和自动特征提取的机器学习方法&#xff0c;近年来在时序预测领域取得了很好的成果。常用的深度学习模型包括循环神经网络&#xff08;RNN&#xff09;、长短时记忆网络&#xff08;LSTM&#xff09;、门控循环单元&a…

PHP Fatal error: Unparenthesized `a ? b : c ? d : e` is not supported.

这个错误是关于三元运算符的错误 这个错误在php8.0以下的版本好像是没问题呢 PHP Fatal error: Unparenthesized a ? b : c ? d : e is not supported. Use either (a ? b : c) ? d : e or a ? b : (c ? d : e) in /cangku/app/common.php on line 57 这个问题是 程…

一款 StarRocks 客户端工具,支持可视化建表、数据编辑

什么是 StarRocks&#xff1f; StarRocks 是新一代极速全场景 MPP (Massively Parallel Processing) 数据库。StarRocks 的愿景是能够让用户的数据分析变得更加简单和敏捷。用户无需经过复杂的预处理&#xff0c;就可以用 StarRocks 来支持多种数据分析场景的极速分析。 为了…

Android 布局菜鸟 android中的布局类型和特点?

一、LinearLayout(线性布局) 1、 特点: 主要以水平或垂直方式来排列界面中的控件。并将控件排列到一条直线上。在线性布局中,如果水平排列,垂直方向上只能放一个控件,如果垂直排列,水平方向上也只能放一个控件。 2、适⽤场景: Android开发中最常见的 ⼀种布局⽅式,排列…

【占用网络】FlashOcc:快速、易部署的占用预测模型

前言 FlashOcc是一个它只需2D卷积就能实现“占用预测模型”&#xff0c;具有快速、节约内存、易部署的特点。 它首先采用2D卷积提取图形信息&#xff0c;生成BEV特征。然后通过通道到高度变换&#xff0c;将BEV特征提升到3D空间特征。 对于常规的占用预测模型&#xff0c;将…

算法刷题——拿出最少数目的魔法豆(力扣)

文章目录 题目描述我的解法思路结果分析 官方题解分析 查漏补缺更新日期参考来源 题目描述 传送门 拿出最少数目的魔法豆&#xff1a;给定一个正整数 数组beans &#xff0c;其中每个整数表示一个袋子里装的魔法豆的数目。请你从每个袋子中拿出 一些豆子&#xff08;也可以 拿…