shell bypass 403
<?php
/**
* @package admintools
* @copyright Copyright (c)2023 Nicholas K. Dionysopoulos / Akeeba Ltd
* @license GNU General Public License version 3, or later
*/
/**
* @package Akeeba\Component\AdminTools\Administrator\Model
* @subpackage
*
* @copyright A copyright
* @license A "Slug" license name e.g. GPL2
*/
namespace Akeeba\Component\AdminTools\Administrator\Model;
defined('_JEXEC') or die;
trait ApacheVersionTrait
{
/**
* Guesses and returns the Apache version family.
*
* @return string 1.1, 1.3, 2.0, 2.2, 2.5 or 0.0 (if no match)
*/
private function apacheVersion()
{
// Do we already have a specific version stored?
if (!empty($this->serverVersion ?? null))
{
return $this->serverVersion;
}
// Get the server string
$serverString = $_SERVER['SERVER_SOFTWARE'];
// Not defined? Assume Apache 2.0.
if (empty($serverString))
{
return '2.0';
}
// LiteSpeed? Fake it.
if (strtoupper(substr($serverString, 0, 9)) == 'LITESPEED')
{
return '2.0';
}
// Not Apache? Return 0.0
if (strtoupper(substr($serverString, 0, 6)) !== 'APACHE')
{
return '0.0';
}
// No slash after Apache? Assume 2.5
if (strlen($serverString) < 7)
{
return '2.5';
}
if (substr($serverString, 6, 1) != '/')
{
return '2.5';
}
// Strip part past the version string
$serverString = substr($serverString, 7);
$v = substr($serverString, 0, 3);
switch ($v)
{
case '1.3':
case '2.0':
case '2.2':
case '2.4':
case '2.5':
return $v;
break;
default:
if (version_compare($v, '1.3', 'lt'))
{
return '1.1';
}
else
{
return '2.2';
}
break;
}
}
}