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\";}

 

posted @ 2022-10-07 14:47  hithub  阅读(368)  评论(0编辑  收藏  举报