精华内容
下载资源
问答
  • 00截断原理

    2020-07-17 10:09:00
    0x00截断原理: 0x00是十六进制表示方法,是ascii码为0的字符,在有些函数处理时,会把这个字符当做结束符。系统在对文件名的读取时,如果遇到0x00,就会认为读取已结束。这个可以用在对文件类型名的绕过上。 但要...

    0x00截断原理:

    0x00是十六进制表示方法,是ascii码为0的字符,在有些函数处理时,会把这个字符当做结束符。系统在对文件名的读取时,如果遇到0x00,就会认为读取已结束。这个可以用在对文件类型名的绕过上。

    但要注意是文件的16进制内容里的00,而不是文件名中的00 !!!就是说系统是按16进制读取文件(或者说二进制),

    遇到ascii码为零的位置就停止,而这个ascii码为零的位置在16进制中是00,用0x开头表示16进制,也就是所说的0x00截断。

    %00是被服务器解码为0x00发挥了截断作用。

    参考链接:https://www.seotest.cn/jishu/45571.html

    展开全文
  • 00截断原理分析

    2019-10-23 23:55:37
    0x00,%00,/00之类的截断,都是一样的,只是不同的表现形式而已 %00截断 下面是用 URL 编码形式表示的 ASCII 字符 在url中%00表示ascll码中的0 ,而ascii中0作为特殊字符保留,表示字符串结束,所以当url中...

    0x00,%00,/00之类的截断,都是一样的,只是不同的表现形式而已

    %00截断

    下面是用 URL 编码形式表示的 ASCII 字符

    在url中%00表示ascll码中的0 ,而ascii中0作为特殊字符保留,表示字符串结束,所以当url中出现%00时就会认为读取已结束

    比如

    https://mp.csdn.net/upfiles/?filename=test.txt                                此时输出的是test.txt

    加上%00

    https://mp.csdn.net/upfiles/?filename=test.php%00.txt                   此时输出的是test.php

    就绕过了后缀限制,可以上传webshell啦。
     

     

    0X00截断


    0x开头表示16进制,0在十六进制中是00, 0x00就是%00解码成的16进制

     这里在php的后面添加了一个空格和字母a,其实a写不写都可以,这里加a是为了显示空格的位置。

    空格是为了占位,方便修改00。

    然后打开hex,(空格的16进制为0x20)修改16进制内容,把20改成00:

    就绕过了后缀限制,可以上传webshell啦。


     

     

     
    展开全文
  • 关于00截断原理的一些思考

    万次阅读 多人点赞 2018-06-02 11:15:50
    在做CTF web题时,遇到了几道有关00截断的题目,但是有 %00截断和0x00截断,一时很是懵逼。最后自己做了些实验,发现两者是同一个原理,这里拿出来给大家分享下。一,0x00截断0x00是十六进制表示方法,是ascii码为0...

    在做CTF web题时,遇到了几道有关00截断的题目,但是有 %00截断和0x00截断,一时很是懵逼。

    最后自己做了些实验,发现两者是同一个原理,这里拿出来给大家分享下。

    一,0x00截断

    0x00是十六进制表示方法,是ascii码为0的字符,在有些函数处理时,会把这个字符当做结束符。这个可以用在对文件类型名的绕过上。一道南邮ctf的题目:

    如果上传jpg文件:


    如果上传php文件:


    这里就要考虑绕过了,用burpsuite截取的上传过程如下:



    在尝试对文件后缀名下手无果后,开始对文件的目录 /upload/下手:


    在目录后添加1.php后发现,返回结果中 basename 变为了1.php1.jpg,

    可以大胆的猜测是文件名拼接在目录名后再进行 php后缀的验证。


    这是后就要利用0x00截断原理了,具体原理是 系统在对文件名的读取时,如果遇到0x00,就会认为读取已结束。

    但要注意是文件的16进制内容里的00,而不是文件名中的00 !!!就是说系统是按16进制读取文件(或者说二进制),

    遇到ascii码为零的位置就停止,而这个ascii码为零的位置在16进制中是00,用0x开头表示16进制,也就是所说的0x00截断。

    具体操作:


    这里在php的后面添加了一个空格和字母a,其实写什么都可以,只是一般空格的16进制为0x20,比较好记,加个a好找到空格的位置,如果写个任意字符,再去查他的16进制表示也可以。然后打开hex,修改16进制内容:



    修改完成后,原来的文本显示也发生了 变化:


    那个方框的位置就是0x00,只不过这是一个不可见字符,无法显示。

    当系统读取到方框,也就是0x00时,认为已经结束,不会再读取后面将要拼接的1.jpg,认为是php文件,完成绕过:


    这就是0x00的原理,总之就是利用ascii码为零这个特殊字符,让系统认为字符串已经结束。

    那什么又是%00截断呢?

    二,%00截断

    这是个困扰了我一个下午的问题,网上的解释也是不太明白,所以还是自己做了个小实验,先看题目,仍然是南邮ctf的题目:


    分析可知要求:get传入的nctf的值 经ereg验证 必须是数字,但是经stropos匹配又必须含有#biubiubiu,

    这里是利用ereg函数的漏洞,但应该称为0x00漏洞,而不是%00漏洞,先看操作,再解释。


    单纯传入数字没有用


    这里还有个小问题,就是浏览器会对#的编码问题,浏览器会把#编码为空,也就没有发送出#,应为#是url编码里的特殊字符,

    应写成url编码格式,查询可知为%23.


    现在问题是解决了,可%00到底干了什么呢?

    首先说说url编码,url发送到服务器后就被服务器解码,这是还没有传送到那个验证函数,也就是说验证函数里接受到的不是】

    %00这个字符,而是%00解码后的内容,那么%00解码成什么了呢?找个url解码网站试了下,得到如下结果。


    这个方框是什么,好像与0x00那个一样诶,我猜就是解码成了0x00,下面看小实验:

    我将题目的验证代码复制下来稍微修改,放到本地搭建的服务器上:


    这当然是没有效果的,前面分析过了,验证函数得到的应该是%00解码后的结果,而不是字符串%00,这里验证一下,

    给像我这样的初学者有个深刻的印象。在服务器运行效果:


    接下来按照我的思路,%00应该是被解码为0x00,那就手动修改为0x00,与前面的思路一样,这里还是找一个已知16进制字符,然后改为00,为了对比,这次使用%:



    所以只要找到文件的16进制中为25的位置改为00即可,这里用HXD软件打开:


    修改后:


    保存,用sublim看看代码情况:


    已被改为0x00,拿到服务器上运行:


    成功绕过,可见%00是被服务器解码为0x00发挥了截断作用。

    就这些内容吧,都是比较基础的,自己也是刚入门,感觉好多东西网上写的也不清楚,自己试验了下,

    有问题的地方欢迎评论。

    转载说明出处。

    展开全文
  • 从源码级别了解PHP %00截断原理

    万次阅读 2017-10-10 22:04:50
    一:漏洞简介  PHP的00截断是5.2.x版本的一个漏洞,当用户输入的url参数包含%00经过浏览器自动转码后截断后面字符。 二:漏洞示例代码   三:漏洞源码分析 四:修复代码分析

    一:漏洞简介

        PHP的00截断是5.2.x版本的一个漏洞,当用户输入的url参数包含%00经过浏览器自动转码后截断后面字符。

    二:漏洞示例代码

        例如url输入的文件名1.txt%00.jpg经过url转码后会变为1.txt\000.jpg,测试文件1.php如下
    <?php
        include "1.txt\000.jpg";
    ?>
        测试文件1.txt如下
    <?php
        echo 'fireXXX';
    ?>
        php5.2.x版本解析1.php时,会将1.txt\000.jpg解释为1.txt

    三:漏洞源码分析

        php5.2.17代码分析:
        调用php去解析1.php文件。
        主要的执行流程在Zend/zend.c的zend_execute_scripts函数中。该函数首先通过zend_compile_file获取1.php文件的内容,然后调用zend_execute解析读取到的文件内容。
        zend_compile_file函数首先调用open_file_for_scanning去读取文件,然后通过zendparse去进行语法和词法解析,而zendparse是通过lex_scan去扫描出token并进行语法分析。可以通过调试器观察到include的文件名参数经过lex_scan后的数据:
        
        因此实际上解析到的文件名是1.txt,长度为10(因为lex_scan扫描到了1.txt\000.jpg实际是10个字符)
        zend_execute通过ZEND_INCLUDE_OR_EVAL_SPEC_CONST_HANDLER函数来进行include的实际处理,即包含要包含的文件。首先通过compile_filename来读取要读取文件的内容,然后继续调用zend_execute去执行要包含文件的代码。针对include "1.txt";即读取1.txt的内容,然后执行echo 'fireXXX';代码。

    四:修复代码分析

        可以从php5.3.24代码中找到修复的方案。修复的代码位于ZEND_INCLUDE_OR_EVAL_SPEC_CONST_HANDLER函数的开始处:
            if (Z_LVAL(opline->op2.u.constant) != ZEND_EVAL && strlen(Z_STRVAL_P(inc_filename)) != Z_STRLEN_P(inc_filename)) {
    		if (Z_LVAL(opline->op2.u.constant)==ZEND_INCLUDE_ONCE || Z_LVAL(opline->op2.u.constant)==ZEND_INCLUDE) {
    			zend_message_dispatcher(ZMSG_FAILED_INCLUDE_FOPEN, Z_STRVAL_P(inc_filename) TSRMLS_CC);
    		} else {
    			zend_message_dispatcher(ZMSG_FAILED_REQUIRE_FOPEN, Z_STRVAL_P(inc_filename) TSRMLS_CC);
    		}
    	}
        代码
    strlen(Z_STRVAL_P(inc_filename)) != Z_STRLEN_P(inc_filename)
        中, Z_STRVAL_P(inc_filename)即上图中的val,即"1.txt",strlen取得长度为5,而 Z_STRLEN_P(inc_filename)即上图中的len即10。
        一旦出现%00截断,include的文件名经过url转码由"1.txt%00.jpg"变为"1.txt\000.jpg",进入php语法词法分析器解析后会将这个字符串解析成一个字符串,并使用zend_scan_escape_string进行字符串转码,如图,进入zend_scan_escape_string的内容为:

        中间的\\000还被解析为4个字符,转码中会将他当作八进制数据转成一个字符\0,因此最终1.txt\000.jpg长度是10。
        只要比较发现文件名的strlen长度和语法分析出来的长度不一样,就说明内部存在截断的字符,因此输出了打开文件失败的信息。

    展开全文
  • - 在web上传中的过程中,最常见的绕过方式—-00截断00截断的核心在于chr(0)这个字符,chr...0x00,%00,/00之类的截断,都是一样的,只是不同表示而已 %00截断 下面是用 URL 编码形式表示的 ASCII 字符 在u...
  • 文件上传绕过之00截断

    千次阅读 多人点赞 2019-05-26 21:37:35
    1. 【00截断原理】 谈到00截断我们都会想到,有什么0x00截断,%00截断,也有人对两个东西分析一大堆,那么它俩有什么区别呢,什么场合适用哪一个呢?这就要从00截断的原理说起: 其实截断的原理...
  • 截断的产生核心,就是chr(0)字符 。 这个字符即不为空(Null),也不是空字符(""),更不是空格! 当程序在输出含有chr(0)变量时,chr(0)后面的数据会被停止,换句话说,就是误把它当成结束符,后面的数据...
  • 【文件上传】00截断详解

    千次阅读 2020-02-03 16:35:10
    00截断是操作系统层的漏洞,由于操作系统是C语言或汇编语言编写的,这两种语言在定义字符串时,都是以\0(即0x00)作为字符串的结尾。操作系统在识别字符串时,当读取到\0字符时,就认为读取到了一个字符串的结束...
  • 这里使用00截断。 首先在提交时抓包 我们将图中upload/后面加上:123.php+ 将上面添加的php后面的加号的hex改为00 然后go一下就拿到flag了 原理剖析: 代码应该是这样的: <% p...
  • 文件上传漏洞%00截断

    2021-02-20 10:42:02
    诸如前端、黑白名单绕过暂且不表,下面就用%00截断试试水。首先要熟悉下函数:move_uploaded_file(file,newloc); (文件名字,新文件位置) 原理是数据包中存在 path: uploads/,那么攻击者可以通过修改path的值来...
  • CTF 00截断

    2020-12-08 21:18:30
    PHP 5.2 00截断上传的原理 php解释器是C语言编写的 C语言中学过字符串的结尾会有00作为字符串结束的标志 在url中%00表示ascll码中的0 ,而ascii中0作为特殊字符保留,表示字符串结束,所以当url中出现%00时就会认为...
  • 首先先来看一个简单的asp实例 <% username = request("username") Response.write username ...可见%00之后的内容没有保存到变量中。 <html> <head> <meta http-equiv="Content-Lan...
  • 原理:%00,0x00,/00都属于00截断,利用的是服务器的解析漏洞(ascii中0表示字符串结束),所以读取字符串到00就会停止,认为已经结束。 使用%00截断有两个条件 php版本小于5.3.4 magic_quotes_gpc为off状态 ...
  • 00截断

    2019-10-01 08:56:30
    0x00截断 and %00截断 0x00截断 用途 00截断用于文件上传时的绕过 example: 只支持.jpg/.png/.bmg 格式上传 ,这时候我们的 一句话.php 无法上传 , 这时候就可以使用00截断的方式绕过上传。 ...
  • 截断原理: 0x00是字符串的结束标识符,攻击者可以利用手动添加字符串标识符的方式来将后面的内容进行截断,而后面的内容又可以帮助我们绕过检测。 00截断的限制条件 PHP<5.3.29,且GPC关闭 ...
  • 根据提示去百度翻阅了解了一下PHP 5.2 00截断原理 2.初次上传尝试 上传了一个shell.php%00.jpg提示上传成功,并在响应包发现源码 if (!empty($_POST['submit'])) { $name = basename($_FILES['file']['name']); ...
  • 利用00截断上传webshell

    2020-08-20 20:38:17
    1) 理解00截断上传 WebShell 的原理 2) 学习00截断上传 WebShelI 的过程 [实验原理] 利用00截断就是利用程序员在写程序时对文件的上传路径过滤不严格,产生0x00上传截断漏洞。 假设文件的上传路径为 [ ...
  • 关于上传中的00截断分析

    千次阅读 2019-06-06 12:10:13
      关于上传中00截断的细节,很多朋友在渗透中都会发现一些这样的有趣现象,这个站点使用00截断上传的方法上传成功了,而换一个站点又失败了,这是什么原...
  • 今天是个好日子啊好日子啊~~然后大佬就问了00截断的条件,我直接断片。。。 00截断条件: PHP版本小于5.3.4 php.ini中的magic_quotes_... %00截断原理: www.xxx.com/abc.php%00.jpg => www.xxx.com/abc.php ...
  • %00截断攻击的探索

    千次阅读 2017-03-18 21:08:29
    首先先来看一个简单的asp实例 [plain] view plain copy ... username = request("username")  ...这段代码从URL处获得参数username的值,然后显示在页面中。...可见%00之后的内容没有保存到变量中。
  • 上传 bp抓包 php 5.2版本的00截断,应该在上传路径截断 访问 http://challenge-c93b95717911341d.sandbox.ctfhub.com:10080/upload/5.php 蚁键连接
  • CTF实验吧-上传绕过【0x00截断

    万次阅读 2017-08-01 18:14:55
    】,一般按照思路逐步尝试即可,简单的大小写,加后缀不可过,此题无js,猜测为0x00截断上传,此处仔细分析何为0x00截断上传及其原理 简单举个例子:   path="upfiles/picture/" file="20121212.jpg" ...
  • 最近phpwind的包含漏洞,小菜一直想利用本地包含来进行拿shell,竟发现在魔术引号为off的情况下,%00可以截断,从而任意构造我们所需变量不过今天我们讨论的话题不是这个而是一个很经典的上传�0截断filepath,控制...
  • 文件上传之00截断

    千次阅读 2019-10-02 00:20:55
    事实上0x00,%00,/00这三类阶截断都是属于同种原理,只是表示不同而已 下面是用 URL 编码形式表示的 ASCII 字符 在url中%00表示ascll码中的0 ,而ascii中0作为特殊字符保留,表示字符串结束,所以当url中出现%...
  • CTFHub 文件上传-00截断

    千次阅读 2020-03-05 13:26:01
    CTFHub 文件上传-00截断 00截断有限制,php版本得低于5.3,并且GPC得关闭,一般在url上。 两种,%00和0x00,后台读取是遇到%00就会停止。 举个例子,url中输入的是upload/post.php%00.jpg,那么后台读取到是upload/...
  • 关于%00截断上传漏洞 php 版本<5.3.4

    万次阅读 2018-04-12 16:13:46
    0x00回头在看proxy中相应的字节已经被更改最终显示的结果是可见$_FILES['file']['name']在得到文件名时0x00之后的内容已经不见了,如果在此基础上判断后缀名是否合法,则肯定不能通过。综上所述,0x00不是针对所有...
  • 精度截断原理

    2019-12-16 23:00:41
    精度截断是由寄存器的位数一定实现的 举个例子: int 转 short 就可能会发生截断——截断时只保留低 16 位(short 为2字节) 即把32位的数往16位的寄存器里存,所谓截断,所谓精度丢失 ...
  • 关于0x00截断GET提交与POST提交的区分 0x00截断的条件 php版本<5.3.4(在PHPstudy里可以更改php版本) magic_quotes_gpc关闭 方法: 1.先在根目录里创建一个phpinfo.php文件,并在浏览器url打开...
  • %00截断原理 原理 CTFHub 文件上传 - 00截断 查看源文件可以看到部分源码 if (!empty($_POST['submit'])) { $name = basename($_FILES['file']['name']);#$_FILES 是一个预定义的数组,用来获取通过 POST 方法上传...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 27,270
精华内容 10,908
关键字:

00截断原理