关于00截断原理的一些思考

18 篇文章 7 订阅
16 篇文章 3 订阅

在做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发挥了截断作用。

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

有问题的地方欢迎评论。

转载说明出处。

### 回答1: ctfhub 文件上传 - 00截断是一种常见的安全漏洞,攻击者可以通过截断文件名或者文件内容来绕过文件上传的限制,从而上传恶意文件或者执行任意代码。这种漏洞需要开发人员在编写文件上传功能时注意对文件名和内容进行严格的校验和过滤,以防止攻击者利用截断漏洞进行攻击。同时,用户也应该注意不要上传可疑的文件或者访问不可信的网站,以保护自己的计算机安全。 ### 回答2: 文件上传漏洞是目前很多Web应用存在的一种常见漏洞,该漏洞的攻击者可以利用该漏洞从Web应用程序中上传恶意文件,绕过访问控制机制,并在受害者服务器上执行任意命令。 在CTFHub文件上传-00截断中,漏洞原理是:在上传文件时,上传文件的后缀名是通过从客户端请求中获取的,如果在获取后缀名的过程中,我们可以通过攻击来修改请求,就可以上传任意类型的文件,甚至是可执行文件,从而达到绕过文件类型的限制。 具体细节如下: 1. 开始上传文件,上传的文件后缀名为.php 2. 修改上传请求中的文件后缀名为.gif,并截断请求,使之只保留文件的前8个字节。 3. 上传的文件类型变为gif,并成功上传。 4. 由于文件类型被篡改,服务器未检测到有可执行文件被上传,因此上传成功。 5. 资产管理窗口中能够看到已上传的文件,并能够通过访问路径访问到上传的文件,例如,可以直接访问上传的可执行文件,从而达到绕过文件类型限制,执行任意命令的目的。 由此可见,文件上传漏洞是一种危害性较高的漏洞,因此开发人员在开发Web应用程序时,一定要认真检查,确保不会出现类似的漏洞现象。同时,在测试人员测试网站时,也应该重点检查文件上传功能,以确保网站的安全性和可靠性。 ### 回答3: ctfhub 文件上传 - 00截断是一种常见的文件上传漏洞攻击,攻击者利用该漏洞可以上传恶意文件并将其存储到服务器中,从而导致服务器被攻击。 文件上传 - 00截断漏洞主要是利用了一些文件上传的不足之处,攻击者可以通过伪造请求包来修改原始文件名,从而实现文件截断的目的,也就是只保留了原始文件名的部分内容而去掉了后面的内容。 当攻击者上传文件时,如果原始文件名过长,则服务器会自动截断文件名,一旦攻击者将文件名截断并发送一个伪造的请求包到服务器上,则服务器会根据该请求包上传一个被截断的文件,从而导致服务器受到攻击。 例如,攻击者可以将文件名设置为“hack.php\x00.jpg”,当该文件上传到服务器上时,服务器会将文件名截断为“hack.php”,从而隐藏了文件的真实后缀名,诱骗用户下载并执行该文件。 为了避免被此类文件上传漏洞攻击,开发人员应该加强字符串截断的限制,防止非法输入,并进行文件类型检测,只允许上传指定的文件类型,同时加密重要文件和数据,保护系统安全。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值