❝
大家好!我是一个热衷于分享IT技术的up主。在这个公众号里,我将为大家带来最新、最实用的技术干货,从编程语言到前沿科技,从软件开发到网络安全。希望通过我的分享,能够帮助更多的小伙伴提升技术水平,共同成长!欢迎关注,一起探索科技的魅力吧!
简介
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])
:函数返回字符串的一部分。
magic_quotes_gpc
: 着重偏向数据库方面,是为了防止sql注入,但magic_quotes_gpc
开启还会对$_REQUEST
,$_GET
,$_POST
,$_COOKI
E 输入的内容进行过滤
这一关使用白名单进行验证,最终文件会以拼接的方式存放。在 PHP 版本小于 5.3.4 且magic_quotes_gpc
关闭的情况下,可以使用%00
进行截断。
-
把PHP的版本调整为 5.2.17
,如下图所示
-
通过 php.ini
文件关闭magic_quotes_gpc
,如下图所示:
攻击步骤
-
创建恶意文件:我们首先需要创建一个包含恶意代码的文件。例如,一个简单的 PHP``WebShell
:
<?php phpinfo(); ?>
-
上传文件:
上传shell.php
用BP抓包修改参数,把upload/
后面加上shell.php%00
,并把filename=”shell.php”
改为shell.png
如下图所示:
-
验证上传成功:
成功上传后,服务器可能会将文件保存为 shell.php
,如下图所示:
访问上传文件的路径,例如 http://localhost/upload/shell.php
,如果成功执行了PHP代码,说明攻击成功。
结语
第12关的%00截断攻击展示了文件上传漏洞的一个经典案例。通过学习和理解这种攻击技术,安全研究人员和开发者可以更好地防范类似的漏洞,提升Web应用的安全性。在实际开发中,始终保持警惕,并采用多层次的安全措施,确保系统的安全与稳定。
推荐阅读
原文始发于微信公众号(攻城狮成长日记):Upload-Lab第12关:如何巧妙利用%00截断法绕过上传验证
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论