一、环境准备:
php版本:推荐 php5.2.17(官方推荐版本)。小于php5.3.4也可以,但是要在 php.ini 配置文件中手动将 magic_quotes_gpc 的状态改为 Off。
magic_quotes_gpc的作用是对 get请求、post请求、cookie...传入的数据进行转义处理,它只存在于 php5.3.4 及以下版本,比如 %00 会被转义为 0,然而当 magic_quotes_gpc 状态为 On 时,url编码不会被解析,而00绕过需要url编码被解析,所以要修改 magic_quotes_gpc 的状态。
因为高版本的php对00漏洞进行了修复。
二、00绕过原理
1、首先进行代码审计,发现 $image_path 用 GET方法进行传参,并且内容为 save_path->保存路径,这就使我们想到可以使用 00绕过。
2、我们只需要修改 test.php 后缀为白名单中的后缀,如 test.jpg,再修改 save_path的值为 test.php,利用00绕过,最终的 $image_path为: https://upload-labs/upload/test.php%00/562020583482.jpg,将jpg文件保存在test.php文件目录下,这个操作实际上使不允许的,所以通过 %00 对后面的内容做了无效化处理,致使最终上传的文件是test.php。
三、通关操作
1、首先上传含有php代码的 test.jpg 来绕过白名单,再在 Burpsuite 中进行拦截,修改save_path。
2、发包,上传成功,新标签页中打开,并删除 url 中的 .jpg和数字后缀,只保留.php后缀,代码成功执行。
我的php版本有些问题,所以不在此展示。