在資安領域中,紅隊 (Red Team) 主要扮演「駭客」的角色,模擬真實的攻擊行為。
透過 AI Agent,我們可以自動化這個過程:
這樣,即使是一人開發團隊,也能擁有「紅隊演練」的能力。
建立一個簡單的 Express 應用程式,並用一個陣列模擬「使用者資料表」。
import express from "express";
import bodyParser from "body-parser";
const app = express();
app.use(bodyParser.json());
// 模擬資料庫 (明碼存放,不安全)
const users = [{ username: "admin", password: "123456" }];
query
這一行模擬「不安全的 SQL 語法」:直接把輸入拼接進去。"' OR 1=1 --"
) 就能繞過驗證。// 不安全的登入 API (可能被 SQL Injection 利用)
app.post("/api/login", (req, res) => {
const { username, password } = req.body;
// 模擬 SQL 查詢 (危險做法:直接拼接字串)
const query = `SELECT * FROM users WHERE username = '${username}' AND password = '${password}'`;
console.log("執行查詢:", query);
const user = users.find(u => u.username === username && u.password === password);
if (user) {
res.send("登入成功");
} else {
res.status(401).send("登入失敗");
}
});
伺服器運行在 http://localhost:3000
,我們的紅隊 Agent 會對 /api/login
發動攻擊。
app.listen(3000, () => console.log("伺服器啟動:http://localhost:3000"));
const payloads = [
{ username: "admin", password: "' OR 1=1 --" }, // SQL Injection
{ username: "<script>alert(1)</script>", password: "123" } // XSS
];
這裡使用 fetch
模擬駭客發送 POST 請求,把惡意 Payload 當作登入資訊送到 /api/login
。
async function attackApi(payload) {
const res = await fetch(apiUrl, {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify(payload)
});
const text = await res.text();
return { payload, status: res.status, response: text };
}
async function analyze(result) {
const prompt = `
目標 API 回應:
狀態碼:${result.status}
回應內容:${result.response}
請判斷此攻擊是否成功,是否存在漏洞?
並提供修補建議。`;
const analysis = await model.generateContent(prompt);
console.log("=== AI 分析結果 ===");
console.log(analysis.response.text());
}
async function main() {
for (const payload of payloads) {
console.log("=== 測試 Payload ===", payload);
const result = await attackApi(payload);
await analyze(result);
}
}
main();