Raye's Journey

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>

然后在上传一个文件,本地抓包,这里遇到了一点小问题,就是没办法抓到本地的包,可以通过直接对局域网的网络连接进行设置即可.

flag1
此时就可以看到了

接下来继续利用
flag2

tql。。。
有趣的php反序列化总结
szfszf
jarvisoj-web-writeup


>  cd ..