shell bypass 403
<?php
/**
* @package RSForm! Pro
* @copyright (C) 2015 www.rsjoomla.com
* @license GPL, http://www.gnu.org/copyleft/gpl.html
*/
defined('_JEXEC') or die;
use Joomla\CMS\Plugin\CMSPlugin;
use Joomla\CMS\Uri\Uri;
use Joomla\CMS\Factory;
use Joomla\CMS\Language\Text;
class plgInstallerRSForm extends CMSPlugin
{
public function onInstallerBeforePackageDownload(&$url, &$headers)
{
$uri = Uri::getInstance($url);
$parts = explode('/', $uri->getPath());
if ($uri->getHost() == 'www.rsjoomla.com' && (in_array('com_rsform', $parts) || in_array('plg_rsform_plugins', $parts))) {
if (!file_exists(JPATH_ADMINISTRATOR.'/components/com_rsform/helpers/config.php')) {
return;
}
if (!file_exists(JPATH_ADMINISTRATOR.'/components/com_rsform/helpers/version.php')) {
return;
}
// Load our config
require_once JPATH_ADMINISTRATOR.'/components/com_rsform/helpers/config.php';
// Load our version
require_once JPATH_ADMINISTRATOR.'/components/com_rsform/helpers/version.php';
// Load language
Factory::getLanguage()->load('plg_installer_rsform');
// Get the version
$version = new RSFormProVersion;
// Get the update code
$code = RSFormProConfig::getInstance()->get('global.register.code');
// No code added
if (!strlen($code)) {
Factory::getApplication()->enqueueMessage(Text::_('PLG_INSTALLER_RSFORM_MISSING_UPDATE_CODE'), 'warning');
return;
}
// Code length is incorrect
if (strlen($code) != 20) {
Factory::getApplication()->enqueueMessage(Text::_('PLG_INSTALLER_RSFORM_INCORRECT_CODE'), 'warning');
return;
}
// Compute the update hash
$uri->setVar('hash', md5($code.$version->key));
$uri->setVar('domain', Uri::getInstance()->getHost());
$uri->setVar('code', $code);
$url = $uri->toString();
}
}
}