ctfshow新手杯剪刀石头布(session反序列化)
看到ini_set('session.serialize_handler', 'php');让我不由自主的想起了session反序列化漏洞的一道题。直接百度会有很多文章这里不多介绍。
那么我们如何找到代码入口将利用代码写入到session
文件?想要写入session
文件就得想办法在$_SESSION
变量中增加我们可控的输入点
补充知识
Session 上传进度(此特性自 PHP 5.4.0 后可用)
当 session.upload_progress.enabledINI 选项开启时,PHP 能够在每一个文件上传时监测上传进度。 这个信息对上传请求自身并没有什么帮助,但在文件上传时应用可以发送一个POST请求到终端(例如通过XHR)来检查这个状态
当一个上传在处理中,同时POST一个与INI中设置的
session.upload_progress.name
同名变量时,上传进度可以在$_SESSION中获得。 当PHP检测到这种POST请求时,它会在$_SESSION
中添加一组数据, 索引是 session.upload_progress.prefix与 session.upload_progress.name连接在一起的值。
翻译成人话就是,当检测Session 上传进度这一特性是开启状态,我们可以在客户端写一个文件上传的功能,文件上传的同时,POST
一个与php.ini
中设置的session.upload_progress.name
同名变量PHP_SESSION_UPLOAD_PROGRESS
,如下图,即可写入$_SESSION
,进一步序列化写入session
文件
因此我们的解法就是:
1.post一个name为"PHP_SESSION_UPLOAD_PROGRESS" 的变量,值无所谓。
2.post上传一个文件,文件名改为我们的payload即可:|O:4:\"Game\":1:{s:3:\"log\";s:22:\"/var/www/html/flag.php\";}