代码编织梦想

1 知识储备

  1. 概述:在ASCII码中,00代表的是空字符,在文件截断攻击中,就是采用空字符来误导服务器截断字符串,以达到绕过攻击的目的。
  2. 原理:服务器后台采用的是move_uploaded_file()函数将上传的文件移动到新位置,该函数属于文件系统函数,是采用C语言实现的,在C语言中,判断字符串是否结束是以空字符为标志的。因此,当上传的文件名中含有%00符号时,服务器会认为字符串到此结束,从而达到绕过的目的。
  3. 截断条件: PHP版本小于5.3.4, PHP的magic_quotes _gpc为OFF状态。
  4. move_uploaded_file()函数原型与介绍:
    1. 函数原型:move_uploaded_file(file,newloc);
    2. file参数:必需参数,规定要移动的文件。
      newloc参数:必需参数,规定文件的新位置。
    3. 工作过程:本函数检查并确保由 file 指定的文件是合法的上传文件(即通过 PHP 的 HTTP POST 上传机制所上传的)。如果文件合法,则将其移动为由 newloc 指定的文件。
    4. 注意:如果 file 不是合法的上传文件,不会出现任何操作,move_uploaded_file() 将返回 false。
    5. 注意:如果 file 是合法的上传文件,但出于某些原因无法移动,不会出现任何操作,move_uploaded_file() 将返回 false,此外还会发出一条警告。
    6. 注意:本函数仅用于通过 HTTP POST 上传的文件。
    7. 注意:如果目标文件已经存在,将会被覆盖。

2 实验简介

2.1 实验目的

掌握绕过MIME检测的方法,验证文件上传漏洞的存在。

2.2 实验环境

  1. 靶场:基于WAMP环境的upload-labs靶场,搭建过程可参考文章《从0搭建文件上传漏洞靶场upload-labs》,请务必将PHP版本设置为小于5.3.4版本。
  2. 攻击机:安装BurpSuite软件。

2.3 实验前准备

按上一节的方法,制作一个图片马info.gif。具体制作过程请参考《服务端文件内容检测与绕过实验+图片马制作方法

3 实验过程

3.1 实验一:upload-labs-11

  1. 测试过程:可以先测试前端JS绕过→MIME绕过→服务端后缀名绕过→文件内容绕过等。
  2. 打开BurpSuite,在代理模块打开其自带浏览器。
    在这里插入图片描述
  3. 浏览器访问靶机,并打开第11关。点击选择文件,选择准备好的info.gif。可以看到文件成功上传,但是由于文件后缀的关系无法运行文件里面的代码。
    在这里插入图片描述
  4. 开启BurpSuite请求拦截功能,再次刷新文件上传页面,让BurpSuite拦截到请求,将请求转发到repeater模块并点击send,可以看到响应中上传完info.gif的位置,同时在请求和响应,中我们发现存储路径可控,这是可以采用00截断的一个有利条件。
    在这里插入图片描述
  5. 在本实验中,在请求的路径参数中添加test.php%00来演示%00截断,由于C语言会将空字符认为是字符串终止符号,函数move_uploaded_file()在保存文件时会将%00后面的字符“截断”,导致服务器将文件以攻击者想要的后缀名存储在攻击者想要的位置。
    在这里插入图片描述
  6. 回到代理模块,添加test.php%00,并点击forward。
    在这里插入图片描述
  7. 回到浏览器,可以看到文件成功上传。
    在这里插入图片描述
  8. 右键所上传的文件,在新标签打开,看到文件还是以控制输入的路径访问,可以删除后面的字符串再次访问。
    在这里插入图片描述
  9. 删除阶段符号后的字段,可以看到文件的代码被成功执行。
    在这里插入图片描述

3.2 实验二:upload-labs-12

  1. 与实验一类似地,在代理模块拦截该关卡的请求,找到可以修改路径参数的位置,如下,添加希望该文件存储时的后缀,其中加号主要是为了定位,在后续步骤中将其修改为空字符,起到截断的作用。
    在这里插入图片描述
  2. 点击HEX,将请求界面转化为十六进制显示,同时可以找到刚刚修改的语句如下。
    在这里插入图片描述
  3. 我们可以查到加号的ASCII对应十六进制为2b,因此,此处我们将2b修改为00,表示空字符,修改后可以看到右侧的加号也消失了。
    在这里插入图片描述
  4. 点击forward,可以看到页面显示文件成功上传。
    在这里插入图片描述
  5. 右键该文件,同时修改截断后的字符串,可以看到文件成功执行代码。
    在这里插入图片描述

4 总结

  1. 思路:先寻找一切可以突围绕过的机会让文件上传,再寻找机会让文件能够被执行。
  2. 掌握00阶段上传文件的方法,同方法同样有可能适用于文件下载的情况。
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Fighting_hawk/article/details/123218268

upload-labs上传漏洞靶场--pass1,2,11,12,17-爱代码爱编程

upload-labs上传漏洞靶场 1、pass-1改变文件后缀名 新建一句话木马文件:<?php @eval($_POST['x']);?>,并上传。 发现.php文件上传失败,只能使用图片上传 我们修改.php文件的后缀名为.jpg上传,并使用burp抓包 将.jpg修改成.php后,关闭拦截,发送成功 这时,我们复制图片地址,打开菜刀

文件上传漏洞——upload-labs靶场安装和通关记录17关-爱代码爱编程

前言:之前在DVWA靶场上了解了upload文件上传漏洞,并进行了学习,现在来安装upload-labs来打一下靶场。 本文目录 搭建靶场开始闯关Pass-01Pass-02Pass-03黑名单验证普通方法使用burpsuite爆破黑名单Pass-04Pass-05Pass-06Pass-07Pass-08Pass-09Pass-10Pass-11P

upload-labs靶场通关(文件上传漏洞靶场)-爱代码爱编程

文章目录 一、靶场介绍二、靶场搭建2.1 靶机环境2.2 搭建过程2.3 相关函数move_uploaded_file(file,newloc)unlink(file)in_array(search,array)pathinfo()explode()reset(array)empty()count(array)三、关卡挑战Pass-01(前端JS绕

文件上传漏洞靶场upload-labs练习-爱代码爱编程

下载地址:https://github.com/c0ny1/upload-labs php版本:推荐5.2.17(其他版本可能会导致部分Pass无法突破) php组件(扩展):php_gd2,php_exif(部分Pass需要开启这两个组件) apache:以moudel方式连接 目录 Pass-01 绕过前端文件后缀检查解法一:解法二:Pas

upload-labs靶场 11-19关 详细教学 上传漏洞-爱代码爱编程

第11关 这关采用的防御手法是白名单过滤,只允许上传jpg、png和gif类型,并且将上传的文件给重命名为了白名单中的后缀 这里我们用00截断,要求是php版本低于或等于5.3.4 这一关上传目录是可控的,所以可以先上传一个后缀名为.jpg,然后修改上传目录为.php后缀,之后在.php后使用截断后面的拼接内容 注意这里的00字符因为在url的GET参数

upload-labs文件上传靶场实验通关教程攻略-爱代码爱编程

实验环境 系统环境:windows2003 软件:phpstudy2016 apache+php版本:php 5.2.17  apache 2.4.3 magic_quotes_gpc = Off php.ini中开启extension=php_exif.dll 其他配置均为默认 靶场链接:https://github.com/c0ny1/

文件上传漏洞靶场:upload-labs安装+1~11关-爱代码爱编程

文章目录 一、安装二、pass-01 js检查三、pass-02 只验证Content-type四、pass-03 黑名单绕过五、pass-04 htaccess绕过六、pass-05 大小写绕过七、pass-06 空格绕过八、pass-07 点绕过九、pass-08 ::$DATA绕过十、pass-09 点 空格 点绕过/解析漏洞十一、pass-

upload-labs靶场-Pass-11关-思路以及过程-爱代码爱编程

开始前的小准备 upload-labs靶场 是PHP环境运行的,所以我准备了一个PHP脚本和一张图片 图片好准备,PHP脚本如果不想写的话可以用我的这个获取当前时间的PHP脚本 <?php header("content-type:text/html;charset=utf-8"); date_default_timezone_set("PR

upload-labs靶场-Pass-12关-思路以及过程-爱代码爱编程

开始前的小准备 upload-labs靶场 是PHP环境运行的,所以我准备了一个PHP脚本和一张图片 图片好准备,PHP脚本如果不想写的话可以用我的这个获取当前时间的PHP脚本 <?php header("content-type:text/html;charset=utf-8"); date_default_timezone_set("PR

文件上传绕过总结(附upload-labs 21关通关教程)-爱代码爱编程

0x01 前端绕过(Less-1) 数据上传后为提交到服务器,而是由于网站页面的js对其进行过滤,确认是否可以上传,删除限制上传js规则即可。 0x02 后端绕过 1.黑名单绕过 1) 上传特殊可解析后缀 (Less-3) 按照往常改后缀为php发现不允许上传.asp,.aspx,.php,.jsp后缀文件!黑名单 尝试php2、php3、php

关于upload-labs实验pass-11的00截断报上传出错的解决办法-爱代码爱编程

今天在做实验upload-labs 的pass-11, 用%00做00截断,结果没有效果,burp suite 报错:提示:上传出错! 经过两处修改,问题解决,实验成功 1、修改php为 5.2.17版本, 2、修改php的php.ini文件,将 参数 magic_quotes_gpc 置 off 问题解决,是拜托了2位前辈的文章, READ

【环境搭建】4步:从0搭建文件上传漏洞靶场upload-labs-爱代码爱编程

目录 1 背景2 准备3 安装4 测试 1 背景 之所以写这篇文章,是因为upload-labs靶场对组成环境的版本要求比较高,搭配不当容易导致部分漏洞无法复现。 为了复现%00截断漏洞,需要PHP版本小于5.3.4,因此靶场环境建议PHP版本采用5.2.17。而为了配合5.2.17版本的PHP,需要Apache2.2。手动搭建满足上述

文件上传漏洞靶场--upload-labs通关过程-爱代码爱编程

文件上传漏洞靶场–upload-labs通关过程 Pass-01(前端验证) 点击提示: 提示我们该文件类型不允许上传,应该是前端对文件类型进行了验证。 对于前端验证,我们有多种方法可进行绕过:但burp抓包方便快速。 这里直接修改文件后缀名为白名单中的后缀名,然后抓包进行修改 直接将文件名改为1.php,然后进行上传 如图,表示上传

文件上传 —— 靶场upload-labs-master-爱代码爱编程

链接:https://pan.baidu.com/s/1I7nwmMdt9XB2AbcYQJ3_eA 提取码:1234 简介:个人学习记录 目录 一、前端js验证 二、mime类型绕过 三、黑名单绕过 四、.htaccess文件配置文件漏洞,无过滤 五、考查 .user.ini文件 六、大小写 七、trim()去空操作 八、winous

文件上传漏洞靶场upload-labs学习(pass11-pass15)-爱代码爱编程

Upload-Labs关卡 0x00 Pass11(str_ireplace复写绕过)0x01 Pass12(GET方式%00截断)0x02 Pass13(POST方式%00截断)0x03 Pass14(文件头截取判断)0x04 Pass15(getimagesize函数绕过) 0x00 Pass11(str_ireplace复写绕过) Pa