文件上传漏洞基础

 


简介

 

简介

前端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"]; 
</span><span style="color: #800080;">$name</span>=<span style="color: #800080;">$upfile</span>["name"];                 <span style="color: #008000;">//</span><span style="color: #008000;">获取上传文件的文件名</span>
<span style="color: #800080;">$type</span>=<span style="color: #008080;">substr</span>(<span style="color: #800080;">$name</span>,<span style="color: #008080;">strrpos</span>(<span style="color: #800080;">$name</span>,'.')+1); <span style="color: #008000;">//</span><span style="color: #008000;">获取上传文件的后缀</span>
<span style="color: #800080;">$size</span>=<span style="color: #800080;">$upfile</span>["size"];                     <span style="color: #008000;">//</span><span style="color: #008000;">获取上传文件的大小</span>
<span style="color: #800080;">$tmp_name</span>=<span style="color: #800080;">$upfile</span>["tmp_name"]; <span style="color: #008000;">//</span><span style="color: #008000;">获取上传文件的临时存放路径

//通过正则表达式黑名单过滤php、php1、pjp3等但是我们可以上传.htaccess文件</span>
<span style="color: #0000ff;">if</span>(<span style="color: #008080;">preg_match</span>('/php.*/i',<span style="color: #800080;">$type</span><span style="color: #000000;">)){
    </span><span style="color: #0000ff;">echo</span> "&lt;script&gt;alert('不能上传php文件!');&lt;/script&gt;"<span style="color: #000000;">;
    </span><span style="color: #0000ff;">die</span><span style="color: #000000;">();
}</span><span style="color: #0000ff;">else</span><span style="color: #000000;">{

    </span><span style="color: #800080;">$error</span>=<span style="color: #800080;">$upfile</span>["error"<span style="color: #000000;">];
    </span><span style="color: #0000ff;">echo</span> "====================&lt;br&gt;"<span style="color: #000000;">;
    </span><span style="color: #0000ff;">echo</span> "上传文件名称是:".<span style="color: #800080;">$name</span>."&lt;br&gt;"<span style="color: #000000;">;
    </span><span style="color: #0000ff;">echo</span> "上传文件类型是:".<span style="color: #800080;">$type</span>."&lt;br&gt;"<span style="color: #000000;">;
    </span><span style="color: #0000ff;">echo</span> "上传文件大小是:".<span style="color: #800080;">$size</span>."&lt;br&gt;"<span style="color: #000000;">;
    </span><span style="color: #0000ff;">echo</span> "上传后系统返回的值是:".<span style="color: #800080;">$error</span>."&lt;br&gt;"<span style="color: #000000;">;
    </span><span style="color: #0000ff;">echo</span> "上传文件的临时存放路径是:".<span style="color: #800080;">$tmp_name</span>."&lt;br&gt;"<span style="color: #000000;">;

</span><span style="color: #008000;">//</span><span style="color: #008000;">吧上面的临时文件移动到up目录下面</span>
<span style="color: #008080;">move_uploaded_file</span>(<span style="color: #800080;">$tmp_name</span>,'upload/'.<span style="color: #800080;">$name</span><span style="color: #000000;">);
</span><span style="color: #800080;">$destination</span>="upload/".<span style="color: #800080;">$name</span><span style="color: #000000;">;
</span><span style="color: #0000ff;">echo</span> "====================&lt;br/&gt;"<span style="color: #000000;">;
</span><span style="color: #0000ff;">if</span>(<span style="color: #800080;">$error</span>==0<span style="color: #000000;">){
    </span><span style="color: #0000ff;">echo</span> "文件上传成功"<span style="color: #000000;">;
    </span><span style="color: #0000ff;">echo</span> "&lt;br&gt;图片预览&lt;/br&gt;"<span style="color: #000000;">;
    </span><span style="color: #0000ff;">echo</span> "&lt;img src=".<span style="color: #800080;">$destination</span>."&gt;"<span style="color: #000000;">;
}        
}

}

?>

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

漏洞修补

posted @ 2020-03-16 23:33  lalalalalalalala  阅读(124)  评论(0)    收藏  举报