简介
Upload-Lab
是一个广受欢迎的文件上传漏洞学习平台,旨在帮助安全研究人员和开发者理解和防范文件上传攻击。第12关涉及一种经典的攻击手法——Null Byte Injection
(%00截断)。这种攻击技术利用了许多编程语言和文件系统在处理字符串时的特性,能够绕过服务器端的安全检查,从而上传恶意文件。
漏洞分析
在许多编程语言中,%00(Null Byte)
被视为字符串的终止符。例如,在C语言中,字符串以Null Byte
结尾,这意味着字符串处理函数会在遇到%00
时停止读取字符。许多Web
应用在处理文件上传时,使用类似的方式来判断文件扩展名或其他属性。
通过在文件名中注入%00
,可以欺骗服务器的文件类型检测机制,使其认为文件具有安全的扩展名,而实际上文件的真实扩展名可以是恶意的。
php
的一些函数的底层是C语言,而move_uploaded_file
就是其中之一,遇到0x00
会截断,0x
表示16进制,URL
中%00解码成16
进制就是0x00
。
知识补充:
strrpos(string,find[,start])
: 函数查找字符串在另一字符串中最后一次出现的位置(区分大小写)。substr(string,start[,length])