00截断
d1ng / 2021-12-16 / web安全 / 阅读量 3808

00截断

在文件上传漏洞的学习中,经常会用到00截断,所以探究一下00截断的具体原理

原理

Null

Null是ASCII码的第一个字符,一个不可见字符,其ASCII码值是0x00

作为字符串的结束标识符,能将后面内容进行截断

image-20211125171804048

而操作系统是根据 c/汇编 编写的,所以这种截断是操作系统层的漏洞

%00

  • 在url编码中,一个特殊字符常为%加两位字符的形式

例如:a 的url编码为%61

  • 而%的后两位实际上是ASCII码16进制

只要是%xx的形式,webserver都会把他当做ASCII码16进制处理,然后解码成对应字符

字符null(空字符)在ASCII码中为0x00

image-20211125165024934

所以url编码%00,会被识别为ASCII码十六进制00,然后翻译成NULL

00截断的使用

条件

  1. magic_quotes_gpc = off

如果魔术引号开启,NULL 字符会被自动加上一个反斜线进行转义,失去了截断的作用

  1. php版本 < 5.3.29

后续版本已修复

截断位置

image-20211125182739389

  • 00截断的使用不能在文件名上

若创建文件a.php%00f.jpg

虽然%00实现了截断,文件名已经变成了php后缀,不能绕过白名单

  • 只能用在路径上

服务器对文件名检测,发现满足条件后,与路径拼接

这时在路径上的%00实现截断,完成了绕过

实践步骤

  1. 上传一个jpg文件的一句话木马

image-20211125212108618

  1. 抓包,观察文件保存路径

    • 若在url中,则在upload/后添加1.php%00 ,截断后文件名会变成1.php

image-20211125212330091

    • 若在post请求中,不会自动将%00转化为null

    方法一:手动进行url解码image-20211125213127308

    方法二:hex中改为00

    image-20211125213257007

    1. 文件上传成功,并改为php后缀,用蚁剑进行连接

    image-20211125214010201

    1 + 1 =
    快来做第一个评论的人吧~