[web安全原理分析]-文件上传漏洞基础

简介

简介

 

简介

简介

前端JS过滤绕过

文件名过滤绕过

1

Content-type过滤绕过

1

文件头过滤绕过

1

112222

.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.">";
    }        
    }

}

?>
View Code

上传.htaccess文件内容为

SetHandler application/x-httpd-php //将目录下所有文件当成PHP来解释

或者

<FilesMatch "jpg">
SetHandler application/x-httpd-php
</FilesMatch>
//将该目录下匹配的jpg当成php执行

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

 访问执行

.user.ini文件上传

1

文件截断上传

1

竞争条件上传

1

漏洞修补

猜你喜欢

转载自www.cnblogs.com/xhds/p/12381395.html