WHMCS - How to generate the upw session variable
Version 5.1.2 or newer
As of version 5.1.2 WHMCS added an extra salt bit to the UPW hash and also uses sha1 for the hash. The salt is taken from the CC encryption hash.
<?php // WHMCS configuration file require_once('path/to/whmcs/configuration.php'); // DB connection $dbh = mysql_connect($db_host,$db_username,$db_password) or die('MySQL connection failed'); mysql_select_db($db_name, $dbh) or die('Failed to select whmcs_dbname database'); // Get user info (in this case user id 1) $query = sprintf("SELECT * FROM `tblclients` WHERE userid = %d", 1); $result = mysql_query($query, $dbh); if($result === FALSE) die("Query Failed: " . mysql_error()); $userRow = mysql_fetch_assoc($result); // Start a session if one hasnt already been started if(!session_id()) session_start(); // Set Session data $_SESSION['uid'] = $userRow['id']; $_SESSION['upw'] = sha1($userRow['id'] . $userRow['password'] . $_SERVER['REMOTE_ADDR'] . substr(sha1($cc_encryption_hash),0,20)); ?>
Version 5.0.3 and older
Below is code showing how the upw session variable is generated on a WHMCS install
<?php // DB connection $dbh = mysql_connect('localhost','user','pass') or die('MySQL connection failed'); mysql_select_db('whmcs_dbname', $dbh) or die('Failed to select whmcs_dbname database'); // Get user info (in this case user id 1) $query = sprintf("SELECT * FROM `tblclients` WHERE userid = %d", 1); $result = mysql_query($query, $dbh); if($result === FALSE) die("Query Failed: " . mysql_error()); $userRow = mysql_fetch_assoc($result); // Start a session if one hasnt already been started if(!session_id()) session_start(); // Set Session data $_SESSION['uid'] = $userRow['id']; $_SESSION['upw'] = md5($userRow['id'] . $userRow['password'] . $_SERVER['REMOTE_ADDR']); ?>