• 【文件上传】upload-labs 通关


    环境准备

    靶场upload-labs-env-win-0.1
    环境windows

    靶场描述

    靶场攻略

    Pass-01

    1.上传一句话木马

    发现有类型限制

    2.上传图片木马

            抓包

    3.修改后缀

            将png修改为php.

    成功上传,

    4.查找文件地址

    5.中国蚁剑连接

    6.成功

    7.源码分析
    1. function checkFile() {
    2. var file = document.getElementsByName('upload_file')[0].value;
    3. if (file == null || file == "") {
    4. alert("请选择要上传的文件!");
    5. return false;
    6. }
    7. //定义允许上传的文件类型
    8. var allow_ext = ".jpg|.png|.gif";
    9. //提取上传文件的类型
    10. var ext_name = file.substring(file.lastIndexOf("."));
    11. //判断上传文件类型是否允许上传
    12. if (allow_ext.indexOf(ext_name + "|") == -1) {
    13. var errMsg = "该文件不允许上传,请上传" + allow_ext + "类型的文件,当前文件类型为:" + ext_name;
    14. alert(errMsg);
    15. return false;
    16. }
    17. }

     代码只过滤了文件上传的类型,但没有过滤文件的内容,这个和dvwa中级靶场有异曲同工之处。所以使用图片木马配合中国蚁剑连接

    温馨提示:记得删除上传文件,否则会影响下面关卡。

    Pass-02

    1.我们上传一句话木马

            测试(目的:让他提示上传什么类型文件)

    发现没有提示

    2.使用图片木马测试

    图片木马可以(老规矩,抓包改后缀试试)

    3.修改后缀发包,发现成功。

    4,拿到地址

    ../upload/shell.php

    5.中国蚁剑连接

    6.成功

    7.源码分析
    1. $is_upload = false;
    2. $msg = null;
    3. if (isset($_POST['submit'])) {
    4. if (file_exists(UPLOAD_PATH)) {
    5. if (($_FILES['upload_file']['type'] == 'image/jpeg') || ($_FILES['upload_file']['type'] == 'image/png') || ($_FILES['upload_file']['type'] == 'image/gif')) {
    6. $temp_file = $_FILES['upload_file']['tmp_name'];
    7. $img_path = UPLOAD_PATH . '/' . $_FILES['upload_file']['name']
    8. if (move_uploaded_file($temp_file, $img_path)) {
    9. $is_upload = true;
    10. } else {
    11. $msg = '上传出错!';
    12. }
    13. } else {
    14. $msg = '文件类型不正确,请重新上传!';
    15. }
    16. } else {
    17. $msg = UPLOAD_PATH.'文件夹不存在,请手工创建!';
    18. }
    19. }

    文件只允许 image/jpeg,image/png,pload_file,image/gif类型上传,所以使用图片木马还是可行的,图片依旧是image/png类型,进入循环。

    Pass-03

    1.测试

            上传一句话木马,测试可以上传什么类型文件

    2.尝试图片木马

    3.试试改后缀

            发现不可以了

    4.我们试试双后缀名

    修改shell.php为shell.php.png.

    5.查看地址

    发现上传内容生成新的文件了

    6.我们尝试php5

    创建php5木马

    7.上传成功

    分析代码,进行黑名单验证,但是黑名单不全,可以使用php3、php5、phtml等等绕过
    但是因为靶场是用phpstudy环境搭建的,要进去修改一下配置文件

    改一下httpd.conf文件里的#AddType application/x-httpd-php .php .phtml
    AddType application/x-httpd-php .php .phtml .php5 .php3
    记得去掉#号。

    8.蚁剑连接

    9.成功

    10.代码分析
    1. $is_upload = false;
    2. $msg = null;
    3. if (isset($_POST['submit'])) {
    4. if (file_exists(UPLOAD_PATH)) {
    5. $deny_ext = array('.asp','.aspx','.php','.jsp');
    6. $file_name = trim($_FILES['upload_file']['name']);
    7. $file_name = deldot($file_name);//删除文件名末尾的点
    8. $file_ext = strrchr($file_name, '.');
    9. $file_ext = strtolower($file_ext); //转换为小写
    10. $file_ext = str_ireplace('::$DATA', '', $file_ext);//去除字符串::$DATA
    11. $file_ext = trim($file_ext); //收尾去空
    12. if(!in_array($file_ext, $deny_ext)) {
    13. $temp_file = $_FILES['upload_file']['tmp_name'];
    14. $img_path = UPLOAD_PATH.'/'.date("YmdHis").rand(1000,9999).$file_ext;
    15. if (move_uploaded_file($temp_file,$img_path)) {
    16. $is_upload = true;
    17. } else {
    18. $msg = '上传出错!';
    19. }
    20. } else {
    21. $msg = '不允许上传.asp,.aspx,.php,.jsp后缀文件!';
    22. }
    23. } else {
    24. $msg = UPLOAD_PATH . '文件夹不存在,请手工创建!';
    25. }
    26. }

    分析代码,进行黑名单验证,但是黑名单不全,可以使用php3、php5、phtml等等绕过

    各位大佬,还在学习,下面的慢慢来。

  • 相关阅读:
    LeetCode75——Day12
    数据爬取...
    苹果电脑 删除已安装的node
    #IIC 通信协议
    【动态规划】583. 两个字符串的删除操作、72. 编辑距离
    关于 vue2.x 的 $attrs 和 $listeners
    《软件研发效能度量规范》的解读与实践(文末附有下载)
    一、Flume使用
    Vue3生命周期详解,Vue2和Vue3对比
    电子协会 C语言 1级 33 、奇偶数判断
  • 原文地址:https://blog.csdn.net/wj33333/article/details/134448372