美文网首页
upload-labs(Pass01)

upload-labs(Pass01)

作者: 六亲不认的步伐 | 来源:发表于2020-03-17 15:32 被阅读0次

本次搭建upload-labs靶机进行File Upload测试


测试项目:Pass01[FE check]

测试介绍:此靶机主要练习 文件上传技能与代码审计技能

Pass01上传界面与源代码

直接进行1.php进行上传,直接会被拦截,其中1.php为一句话木马(未过狗)


Js拦截文件上传

方法1:禁用Javascript验证(以火狐浏览器为例)

首先进入高级设置页,浏览器中输入about:config

Mozille系列内核浏览器高级运维

进入火狐浏览器配置页

输入javascript关键字,将enabled选项设置为false,关闭javascript运行

javascript启用状态关闭

再次选择1.php进行上传发现上传成功

成功上传

尝试通过菜刀进行连接

方法2:本地构建Exp表单直接上传

自己本地构建Exp效果图

代码如下

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <h1 style="text-align: center;">Upload-labs Pass01 Poc</h1>
    <h3 style="text-align: right;">----by Sccc</h3>
    <hr>
    <form action="http://10.37.21.94:8080/Pass-01/index.php" method="post" enctype="multipart/form-data" style="text-align: center;">
        <input type="file" name="upload_file" >
        <input type="submit" name= "submit" value="上传POC">
    </form>
</body>
</html>

完成表单提交页面的代码后,直接本地执行上传(为了区分第一种方法,因此改名为Pass01.php)

本地构建成功上传

方法3:抓包更改后缀名来进行

由于本次上传仅仅是前端验证后缀名,所以可以直接将.php后缀名改为.jpg先通过前端验证

抓获数据包

在数据包中篡改回后缀名为.php,即可成功上传

成功上传至服务器端

方法4:代码审计(在能够获取到源码的情况下)(也是个人误区,希望各位一些新手不要犯此错误)

由于前端Javascript代码可以直接在控制台进行调出所以,关键是php代码部分审计,结合前端的验证函数来进行共同绕过测试。

前端代码审计

通过代码审计不难发现,前端使用白名单策略进行后缀名过滤筛选

后端代码审计

通过代码审计不难发现,后端并未对上传进行限制,只是判定文件夹是否存在

下面的是我个人产生的误区:(对Javascript渲染不熟悉所导致)

个人此时合两边代码,不难发现,前端对name属性为upload_file的值进行验证。后端接受submit参数为POST提交,所以产生多种绕过思路就是在线编辑JavaScript代码,在allow_ext进行添加php后缀名

function checkFile() {
    var file = document.getElementsByName('upload_file')[0].value;
    if (file == null || file == "") {
        alert("请选择要上传的文件!");
        return false;
    }
    //此处进行添加.php
    var allow_ext = ".jpg|.png|.gif|.php";
    var ext_name = file.substring(file.lastIndexOf("."));
    if (allow_ext.indexOf(ext_name + "|") == -1) {
        var errMsg = "该文件不允许上传,请上传" + allow_ext + "类型的文件,当前文件类型为:" + ext_name;
        alert(errMsg);
        return false;
    }
}

误区说明:因为Javascript在页面打开时,已经被渲染,相当于代码已经固化,所以即使通过F12在线进行编辑,依旧执行渲染后的代码。
为了能够实现这一点,我自己也是进行网上查找了一番资料,找到了一个比较靠谱的答案
Javascript F12无法执行原因以及如何进行覆盖执行
获得了三个答案,分别如下:
1.在sources菜单中直接修改js文件,复制粘贴到控制台运行;
2.在控制台对事件重新绑定方法,触发事件执行方法;
3.在文件的头部打断点,刷新页面,执行到断点处,再修改js内容,继续执行就会生效

通过Console进行重写方法
此方法确实时重新执行了JavaScript代码,但是依旧没能够上传成功,原因有待研究,如果有大佬看到,希望予以解答,感激不尽

通过方法3的断点调试法进行尝试,发现是可以进行绕过。


F12调试绕过

对于js代码绕过其实可以除了对白名单变量最后添加.php的方法外,还可以对allow_ext.indexOf()函数的结果值篡改为非-1,还可以对提交的表单中的name属性进行篡改非upload_file,即可绕过验证等。
鸣谢:在处理控制台重新绑定方法测试失败后,询问了公司里的一些渗透测试大佬们,虽然大佬们提供了一些上传的绕过方法,但是我主要是对该问题为什么没能实现绕过原因没有搞清楚。


存在的疑问:此方法确实时重新执行了JavaScript代码,但是依旧没能够上传成功.
后记:本人能力有限,难免出现纰漏,若有疑问可进行留言;


鸣谢:Venustech ZZSRC群友疑问解答

第二篇:upload-labs(Pass02)
第三篇:upload-labs(Pass03)
第四篇(存在遗留问题):upload-labs(Pass04)

相关文章

  • upload-labs(Pass01)

    本次搭建upload-labs靶机进行File Upload测试 测试项目:Pass01[FE check] 测试...

  • 文件上传漏洞靶场--c0ny1 / upload-labs

    c0ny1/upload-labs c0ny1/upload-labs是一个文件上传漏洞靶场,地址:https:/...

  • upload-labs

    title: upload-labsdate: 2019-04-17 09:20:52tags:- 文件上传cat...

  • upload-labs

    文件上传的目的是通过上传.php文件,从而植入木马,然后通过菜刀进行连接,最终get shell 0x01 Pas...

  • upload-labs(Pass02)

    本次搭建upload-labs靶机进行File Upload测试 测试项目:Pass02[MIME check] ...

  • 文件上传漏洞二

    一、靶场源码地址 https://github.com/6xunlaoren/upload-labs 二、环境搭建...

  • upload-labs通关

    pass-01 尝试上传一个php,发现提示不行。 前端js拦截了,先将php文件后缀改为允许的格式,比如jpg,...

  • [upload-labs] 学习

    一个帮你总结所有类型的上传漏洞的靶场 Pass-01 在js中发现校验文件后缀的函数,我们添加php类型后在控制台...

  • buuctf-upload-labs

    刷了下buuctf搭建的upload-labs,记录一下。 地址:https://buuoj.cn/ Pass 0...

  • upload-labs-21关通关笔记

    项目地址 https://github.com/c0ny1/upload-labs/ 通关记录 Pass-01-前...

网友评论

      本文标题:upload-labs(Pass01)

      本文链接:https://www.haomeiwen.com/subject/sabzehtx.html