############################################################################################################
# Exploit Title : Wordpress Plugin Tierra Billboard Manager SQL Injection Vulnerability
# Exploit Author : Linux Zone Research Team
# Date : 14-December-2015
# Vendor Homepage: https://wordpress.org
# Software Link : https://wordpress.org/plugins/tierra-billboard-manager/
# Version : 1.14
# Tested on : Linux - Chrome
# CVE : NONE
# MY HOME : http://linux-zone.org
############################################################################################################
#
# Location : /wp-content/plugins/tierra-billboard-manager/tierra-billboard-playlist.php?id=[SQL]
#
############################################################################################################
<?php
header("Content-Type: text/html");
/*
if (isset($_GET['preview']) && $_GET['preview'] == 'true' ) {
header("Content-Type: application/xml;charset=utf-8");
} else {
header("Content-Type: application/xspf+xml;charset=utf-8");
}
*/
require_once('../../../wp-config.php');
require_once('../../../wp-settings.php');
global $wpdb, $_billboard_manager_db_version, $_billboard_manager, $baseurl, $pluginurl;
$_billboard_manager = $wpdb->prefix . "ti_billboard_manager";
$playlist_id = intval($_GET['id']);
$media_id = isset($_GET['media_id']) ? intval($_GET['media_id']) : -1;
$baseurl = $_SERVER["QUERY_STRING"];
$pluginURL = WP_PLUGIN_URL;
if ($media_id <= 0) {
$sql = 'select title, image, tracks, creation_date, license from ' . $_billboard_manager . ' where id = ' . $wpdb->escape($playlist_id);
} else {
$sql = 'select id, post_title as title, "' . $media_id . '" as tracks, post_date as creation_date from ' . $wpdb->posts . ' where id = ' . $media_id;
}
$row = $wpdb->get_row($sql);
$license = $row->license ? htmlentities($row->license) : '';
$title = htmlentities(stripslashes($row->title));
$tracks = split (',' , $row->tracks);
$i = 0;
echo<<<__END_OF_HEADER__
<?xml version="1.0" encoding="UTF-8"?>
<playlist version="1" xmlns = "http://xspf.org/ns/0/">
<title>$title</title>
<creator>Tierra Billboard Manager</creator>
<annotation>Playlist generated via Tierra Billboard Manager, part of the Tierra WordPress CMS Toolkit</annotation>
<info>http://tierra-innovation.com/wordpress-cms/</info>
<image>$pluginURL/tierra-billboard-manager/skin/brand.png</image>
<license>$license</license>
<date>$row->creation_date</date>
<trackList>
__END_OF_HEADER__
;
$wpuploads = wp_upload_dir();
if ($row->tracks) {
foreach ($tracks as $track) {
$sql = 'select id, post_title as track, guid, post_date, post_excerpt, post_modified from ' . $wpdb->posts . ' where id = ' . $track;
$row = $wpdb->get_row($sql);
if ($row) {
$metadata = get_post_meta($row->id, '_wp_attachment_metadata', true);
if ( ( $row->id = intval($row->id) ) && $thumb_url = get_attachment_icon_src( $row->id ) )
$thumb_url = htmlspecialchars($thumb_url[0]);
else {
$wpuploads = wp_upload_dir();
if ($metadata['file']) {
$path_parts = pathinfo($metadata['file']);
$datepath = $wpuploads['baseurl'] . "/" .$path_parts['dirname'];
}
$thumb_url = htmlspecialchars($metadata['sizes']['thumbnail']['file']
? ($datepath . '/' . stripslashes($metadata['sizes']['thumbnail']['file']) )
: "/wp-includes/images/crystal/interactive.png");
}
print "
<track>
<location>" . ( $row->guid ? htmlspecialchars($row->guid) : ( $wpuploads['baseurl'] . '/' . $metadata['file'] ))."</location>
<creator>" .( $metadata['_ti_bbm_artist'] ? htmlspecialchars($metadata['_ti_bbm_artist']) : "" )."</creator>
<album>" . ( $metadata['_ti_bbm_album'] ? htmlspecialchars($metadata['_ti_bbm_album']) : "" ). "</album>
<image>$thumb_url</image>
<title>" . ( $row->track ? htmlspecialchars($row->track) : "No title" ) . "</title>
<annotation>Type:" .$wpdb->escape($row->post_mime_type) .";</annotation>
<info>" . $wpdb->escape($metadata['_ti_bbm_linkTo']) ."</info>
<trackNum>" . $wpdb->escape($metadata['_ti_bbm_tracknum']) ."</trackNum>
<duration>" . $wpdb->escape($metadata['_ti_bbm_duration']) ."</duration>
<meta><description>" . htmlspecialchars(stripslashes($row->post_excerpt)) . "</description></meta>
</track>
";
}
}
}
print<<<__END_OF_XML__
</trackList>
</playlist>
__END_OF_XML__
;
?>
#############################################
#
# Hassan Shakeri - Mohammad Habili
#
# Twitter : @ShakeriHassan - Fb.com/General.BlackHat
##########################################################