Lucene search
+L

Wordpress webplayer Plugins SQL Injection Vulnerability

🗓️ 10 Apr 2017 00:00:00Reported by Hassan ShakeriType 
zdt
 zdt
🔗 0day.today👁 43 Views

Wordpress webplayer Plugins SQL Injection Vulnerability hdwebplayer.com 2.8.

Code
###########################################################
# Exploit Title : Wordpress webplayer Plugins SQL Injection Vulnerability
# Vendor Homepage: hdwebplayer.com
# Version : 2.8.6
# Date : 2017 10 April
# Category : Web App
#Test on : Sqlmap , linux
# Dork :inurl:/wp-content/plugins/webplayer/config.php?id=
# Software Link : https://downloads.wordpress.org/plugin/hdw-player-video-player-video-gallery.3.4.zip
###########################################################
### Location
localhost:/Directory/wp-content/plugins/webplayer/config.php?id=
localhost:/Directory/wp-content/plugins/webplayer/playlist.php?videoid=
###########################################################
### Vulnerability Files : Config.php

<?php

/******************************************************************
/*Bootstrap file for getting the ABSPATH constant to wp-load.php
/*This is requried when a plugin requires access not via the admin screen.
******************************************************************/
require_once (dirname ( __FILE__ ) . '/isMobile.php');

add_filter('query_vars','plugin_add_trigger');
function plugin_add_trigger($vars) {
$vars[] = 'wid';
$vars[] = 'view';
$vars[] = 'vid';
$vars[] = 'pid';
$vars[] = 'lic';
return $vars;
}

add_action('template_redirect', 'plugin_trigger_check');
function plugin_trigger_check() {
if(get_query_var('wid') && get_query_var('view') == "config"){
configXml(get_query_var('wid'));
}else if(get_query_var('vid') && checkL(get_query_var('lic'))){
videoPlaylist(get_query_var('vid'));
}else if(get_query_var('pid') && checkL(get_query_var('lic'))){
playlist(get_query_var('pid'));
}
}

function configXML($id){
global $wpdb;
$id = encrypt_decrypt('decrypt', $id);
$table_name = $wpdb->prefix."hdwplayer";
$config = $wpdb->get_row( $wpdb->prepare("SELECT * FROM ".$table_name." WHERE id = %d",trim($id)));
$siteurl = get_option('siteurl');
$br = "\n";
if(!$config->id){
die('<b><h1>Restricted access</h1></b>');
}
srand ((double) microtime( )*1000000);
$dyn = rand( );
$value['token'] = $dyn;
$video_id = '';
if($_GET['vid']){
$video_id = '&amp;id='.intval($_GET['vid']);
}
$wpdb->update($table_name, $value, array('id' => $config->id));

header("content-type:text/xml;charset=utf-8");
echo '<?xml version="1.0" encoding="utf-8"?>'.$br;
echo '<config>'.$br;
echo '<skinMode>'.$config->skinmode.'</skinMode>'.$br;
echo '<autoStart>'.castAsBoolean($config->autoplay).'</autoStart>'.$br;
echo '<stretch>'.$config->stretchtype.'</stretch>'.$br;
echo '<buffer>'.$config->buffertime.'</buffer>'.$br;
echo '<volumeLevel>'.$config->volumelevel.'</volumeLevel>'.$br;
if($config->videoid){
echo '<playListXml>'.$siteurl.'/?vid='.$config->videoid.'</playListXml>'.$br;
} else {
echo '<playListXml>'.$siteurl.'/?pid='.$config->playlistid.$video_id.'</playListXml>'.$br;
}

echo skinXml($config);
echo '<playListAutoStart>'.castAsBoolean($config->playlistautoplay).'</playListAutoStart>'.$br;
echo '<playListOpen>'.castAsBoolean($config->playlistopen).'</playListOpen>'.$br;
echo '<playListRandom>'.castAsBoolean($config->playlistrandom).'</playListRandom>'.$br;
echo '<token>'.$dyn.'</token>'.$br;
echo '</config>'.$br;
exit();
}

function videoPlaylist($id){
global $wpdb;
$siteurl = get_option('siteurl');
$br = "\n";
$config = $wpdb->get_results($wpdb->prepare("SELECT * FROM ".$wpdb->prefix."hdwplayer_videos WHERE id = %d",intval($id)));
$item = $config[0];

header("content-type:text/xml;charset=utf-8");
echo '<?xml version="1.0" encoding="utf-8"?>'.$br;
echo '<playlist>'.$br;
echo '<media>'.$br;
echo '<id>'.$item->id.'</id>'.$br;
echo '<type>'.$item->type.'</type>'.$br;
echo '<video>'.$item->video.'</video>'.$br;
if($item->hdvideo) {
echo '<hd>'.$item->hdvideo.'</hd>'.$br;
}
echo '<streamer>'.$item->streamer.'</streamer>'.$br;
if($item->dvr) {
echo '<dvr>'.$item->dvr.'</dvr>'.$br;
}
echo '<thumb>'.$item->thumb.'</thumb>'.$br;
if($item->token) {
echo '<token>'.$item->token.'</token>'.$br;
}
echo '<preview>'.$item->preview.'</preview>'.$br;
echo '<title>'.$item->title.'</title>'.$br;
echo '</media>'.$br.$br;
echo '</playlist>'.$br;
exit();
}

function playlist($id){
global $wpdb;
$val = 0;
$siteurl = get_option('siteurl');
$br = "\n";
$vid = ($_GET['id'] != '') ? $_GET['id'] : '';

$query = "SELECT * FROM ".$wpdb->prefix."hdwplayer_videos WHERE";

if($vid == ''){
$query .= " playlistid = %d";
$val = intval($id);
}else{
$query .= " id = %d";
$val = intval($vid);
}

$query .= ' ORDER BY ordering';

$config = json_decode(json_encode($wpdb->get_results($wpdb->prepare($query,$val))),true);

if($vid != ''){
$query = "SELECT * FROM ".$wpdb->prefix."hdwplayer_videos WHERE";
$query .= " id != %d";
$query .= " AND playlistid = %d";
$query .= " ORDER BY ordering";
$config = array_merge($config,json_decode(json_encode($wpdb->get_results($wpdb->prepare($query,intval($vid),intval($id)))),true));
}

if(!$config[0]['id']){
die('<b><h1>Restricted access</h1></b>');
}
header("content-type:text/xml;charset=utf-8");
echo '<?xml version="1.0" encoding="utf-8"?>'.$br;
echo '<playlist>'.$br;
foreach ($config as $item){
$br;
echo '<media>'.$br;
echo '<id>'.$item['id'].'</id>'.$br;
echo '<type>'.$item['type'].'</type>'.$br;
echo '<video>'.$item['video'].'</video>'.$br;
if($item['hdvideo']) {
echo '<hd>'.$item['hdvideo'].'</hd>'.$br;
}
echo '<streamer>'.$item['streamer'].'</streamer>'.$br;
if($item['dvr']) {
echo '<dvr>'.$item['dvr'].'</dvr>'.$br;
}
echo '<thumb>'.$item['thumb'].'</thumb>'.$br;
if($item['token']) {
echo '<token>'.$item['token'].'</token>'.$br;
}
echo '<preview>'.$item['preview'].'</preview>'.$br;
echo '<title>'.$item['title'].'</title>'.$br;
echo '</media>'.$br.$br;
}
echo '</playlist>'.$br;
exit();
}

function skinXml($config){
$br = "\n";
$node = '<controlBar>'.castAsBoolean($config->controlbar).'</controlBar>'.$br;
$node .= '<playPauseDock>'.castAsBoolean($config->playpause).'</playPauseDock>'.$br;
$node .= '<progressBar>'.castAsBoolean($config->progressbar).'</progressBar>'.$br;
$node .= '<timerDock>'.castAsBoolean($config->timer).'</timerDock>'.$br;
$node .= '<shareDock>'.castAsBoolean($config->share).'</shareDock>'.$br;
$node .= '<volumeDock>'.castAsBoolean($config->volume).'</volumeDock>'.$br;
$node .= '<fullScreenDock>'.castAsBoolean($config->fullscreen).'</fullScreenDock>'.$br;
$node .= '<playDock>'.castAsBoolean($config->playdock).'</playDock>'.$br;
$node .= '<playList>'.castAsBoolean($config->playlist).'</playList>'.$br;
return $node;
}

function castAsBoolean($val){
if($val == 1) {
return 'true';
} else {
return 'false';
}
}

function encrypt_decrypt($action, $string) {
$output = false;

if( $action == 'encrypt' ) {
$output = (double)$string*525325.24;
$output = base64_encode($output);
}
else if( $action == 'decrypt' ){
$output = base64_decode(substr($string,0,-3));
$output = (double)$output/525325.24;
}
return $output;
}

function checkL($lic){
global $wpdb;
$token = $wpdb->get_results("SELECT * FROM ".$wpdb->prefix."hdwplayer");
$license = array();
foreach($token as $tok){
$license[] = trim($tok->token);
}
if(in_array(trim($lic),$license)){
return true;
}
return false;
}

function hdwplayer_gallery_ajax(){
if(!isset($_POST['action']))
{
return;
}
$action = $_POST['action'];
if('flashvars' == $action)
{
global $wpdb;
$player = $wpdb->get_row ( $wpdb->prepare("SELECT * FROM " . $wpdb->prefix . "hdwplayer WHERE id = %d",intval($_POST ['id'])));
$siteurl = get_option ( 'siteurl' );
$results = $wpdb->get_row ( $wpdb->prepare("SELECT * FROM " . $wpdb->prefix . "hdwplayer_videos WHERE id = %d",intval($_POST ['vid'])));
$detect = new Mobile_Detect();
if ($detect->isMobile()) {
switch ($results->type) {
case 'youtube' :
$url_string = parse_url ( $results->video, PHP_URL_QUERY );
parse_str ( $url_string, $args );
$html5 = '<iframe title="YouTube video player" width="100%" height="100%" src="http://www.youtube.com/embed/' . $args ['v'] . '" frameborder="0" allowfullscreen></iframe>';
break;
case 'dailymotion' :
$html5 = '<iframe frameborder="0" width="100%" height="100%" src="' . $results->video . '"></iframe>';
break;
case 'rtmp' :
$url_string = str_replace ( 'rtmp', 'http', $results->streamer ) . '/' . $results->video . '/playlist.m3u8';
$html5 = '<video poster="' . $results->preview . '" onclick="this.play();" width="100%" height="100%" controls>';
$html5 .= '<source src="' . $url_string . '" />';
$html5 .= '</video>';
break;
default :
$html5 = '<video poster="' . $results->preview . '" onclick="this.play();" width="100%" height="100%" controls>';
$html5 .= '<source src="' . $results->video . '" />';
$html5 .= '</video>';
}
}else{
$flashvars = 'baseW=' . $siteurl . '&id=' . encrypt_decrypt ( 'encrypt', $player->id ).'&vid='.intval($_POST ['vid']);
$src = $siteurl . '/wp-content/plugins/' . basename ( dirname ( __FILE__ ) ) . '/player.swf';
$html5 .= '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="' . $player->width . '" height="' . $player->height . '">';
$html5 .= '<param name="movie" value="' . $src . '" />';
$html5 .= '<param name="allowfullscreen" value="true" />';
$html5 .= '<param name="allowscriptaccess" value="always" />';
$html5 .= '<param name="flashvars" value="' . $flashvars . '" />';
$html5 .= '<object type="application/x-shockwave-flash" data="' . $src . '" width="' . $player->width . '" height="' . $player->height . '">';
$html5 .= '<param name="movie" value="' . $src . '" />';
$html5 .= '<param name="allowfullscreen" value="true" />';
$html5 .= '<param name="allowscriptaccess" value="always" />';
$html5 .= '<param name="flashvars" value="' . $flashvars . '" />';
$html5 .= '</object>';
$html5 .= '</object>';
}

$response = array(
'html5' =>$html5
);
die(json_encode($response));
}

if('email' == $action && checkL($_POST["lic"]))
{
$to = $_POST["to"];
$from = $_POST["from"];
$url = $_POST["url"];
$subject = "You have received a video!";

$headers = "From: "."<" . $_POST["from"] .">\r\n";
$headers .= "Reply-To: " . $_POST["from"] . "\r\n";
$headers .= "Return-path: " . $_POST["from"];

$message = $_POST["message"] . "\n\n";
$message .= "Video URL: " . $url;

if(mail($to, $subject, $message, $headers)) {
echo "sent";
exit;
} else {
echo "error";
exit;
}
}
}

?>
################################################
# Discovered By : Hassan Shakeri
# Twitter : @ShakeriHassan - Fb.com/General.BlackHat - [email protected]
###########################################################

#  0day.today [2018-01-04]  #

Data

Build on a solid foundation with Vulners data

We provide the essential building blocks for cybersecurity solutions with comprehensive, structured, and constantly updated vulnerability and exploits data

Api

Power your application with Vulners API

The Vulners REST API offers reliable, high-performance access to vulnerability intelligence, with 99.9% SLA uptime and CDN-backed data delivery for seamless global access

App

Assess and manage vulnerabilities with Vulners tools

Built on top of Vulners' database and SDK, end-user solutions give security professionals and developers lightweight and powerful tools for vulnerability remediation

10 Apr 2017 00:00Current
7.1High risk
Vulners AI Score7.1
43