shell bypass 403
<?php
/**
* @package RSForm! Pro
* @copyright (C) 2007-2019 www.rsjoomla.com
* @license GPL, http://www.gnu.org/copyleft/gpl.html
*/
defined('_JEXEC') or die;
use Joomla\CMS\Factory;
use Joomla\CMS\Language\Text;
// ACL Check
$user = Factory::getUser();
if (!$user->authorise('core.manage', 'com_rsform'))
{
throw new Exception(Text::_('JERROR_ALERTNOAUTHOR'), 404);
}
require_once JPATH_COMPONENT . '/helpers/adapter.php';
require_once JPATH_COMPONENT . '/helpers/rsform.php';
$mainframe = Factory::getApplication();
RSFormProHelper::readConfig();
// See if this is a request for a specific controller
$controller = $mainframe->input->getWord('controller');
$controller_exists = false;
$task = $mainframe->input->getCmd('task', '');
if (!$controller && strpos($task, '.'))
{
list($controller, $controller_task) = explode('.', $task, 2);
}
if (!empty($controller) && file_exists(JPATH_COMPONENT.'/controllers/'.$controller.'.php'))
{
// Require the base controller
require_once JPATH_COMPONENT.'/controller.php';
require_once JPATH_COMPONENT.'/controllers/'.$controller.'.php';
$controller = 'RsformController'.$controller;
$RsformController = new $controller();
$controller_exists = true;
}
else
{
// Require the base controller
// Workaround needed to access the 'ajaxvalidate' and 'captcha' functions in the backend
if (in_array(strtolower($task), array('ajaxvalidate', 'captcha')))
{
require_once JPATH_SITE . '/components/com_rsform/controller.php';
}
else
{
require_once JPATH_COMPONENT.'/controller.php';
}
$RsformController = new RsformController();
}
// Trigger onInit
$mainframe->triggerEvent('onRsformBackendInit');
// Execute task
if ($controller_exists && !empty($controller_task))
{
$controller_task = preg_replace('/[^A-Z_]/i', '', $controller_task);
$RsformController->execute($controller_task);
}
else
{
$RsformController->execute($mainframe->input->getWord('task'));
}
// Redirect if set
$RsformController->redirect();