%00截断的条件是要满足以下几点:
php 版本小于 5.3.4;
php的magic_quotes_gpc为OFF状态(magic_quotes_gpc在phpstudy主界面–其他选项菜单–PHP扩展及设置–参数开关设置里,然后改为off状态后记得重启一下phpstudy服务)。
查看源码和提示,上传路径可控,并且是最终文件的存放位置是以拼接的方式,可以使用%00截断,但需要php版本<5.3.4,并且magic_quotes_gpc关闭。原理是:php的一些函数的底层是C语言,而move_uploaded_file就是其中之一,遇到0x00会截断,0x表示16进制,URL中%00解码成16进制就是0x00。
首先上传一个jpg文件(里面写了一句话木马,只不过后缀名为jpg),然后burp抓包:
发送到repeater模块,在/upload/后面加上12.php%00,然后点击Go,发现成功上传12.php文件:
然后再用菜刀进行连接,输入对应的网址和密码:
成功访问到: