相关配置
在讲该姿势的具体利用方法之前,要先讲几个 php.ini 中的相关配置,这也是利用该方式进行文件包含的前提。
1.session.upload_progress.enabled = On
2.session.upload_progress.cleanup = On
3.session.upload_progress.prefix = “upload_progress_”
4.session.upload_progress.name = “PHP_SESSION_UPLOAD_PROGRESS”
现在我们来看看这几个配置的作用
除了第二个配置外,其他三个配置的作用在官方文档中都有说明。
session.upload_progress.cleanup = On 的意思就是在读取完POST的数据后,php就会删除session文件中关于上传进度的信息。
存储机制
当开启session时,服务器都会在一个临时目录下创建一个session文件来保存会话信息,文件名格式为 sess_PHPSESSID 。
在linux系统中,session文件一般保存在以下几个目录:
/var/lib/php/
/var/lib/php/sessions/
/tmp/
/tmp/sessions/
文件包含利用
了解了session.upload_progress的相关配置和session的存储机制后,我们就可以想到通过PHP_SESSION_UPLOAD_PROGRESS将恶意代码写入session文件,再通过包含session文件实现RCE。不过要实现这个目的还需要跨过几个坎
第一个坎
我们都知道,通过session_start()才能开启session,那如果没有session_start()这个姿势岂不是就没法利用了。这里我们又要了解一个新的相关配置:session.use_strict_mode