iT邦幫忙

2025 iThome 鐵人賽

DAY 15
0
Modern Web

AI 驅動的 Web 資安新時代系列 第 15

Day15 - AI Agent 自動生成滲透測試腳本(SQLi / XSS 範例)

  • 分享至 

  • xImage
  •  

在傳統的滲透測試流程中,資安人員往往需要 手動嘗試各種攻擊腳本,像是 SQL Injection(SQLi)、Cross-Site Scripting(XSS),並觀察伺服器的反應。

這種方式不僅 耗時耗力,還容易 遺漏測試情境

隨著 AI 技術的發展,我們可以建立一個 AI Agent,讓它自動:

  • 產生惡意 Payload
  • 向目標 API 發送攻擊請求
  • 收集伺服器回應
  • 交給 AI 分析「是否存在漏洞」
  • 甚至給出「修補建議」

這樣一來,即使是單一開發者,也能快速模擬駭客手法,提早發現潛在弱點。


工作流程

  1. 模擬一個不安全的伺服器 (server.js)
    • 提供一個 /login API,故意沒有防護機制。
    • 讓 AI Agent 可以進行 SQLi 與 XSS 測試。
  2. AI Agent (agent.js)
    • 建立一組惡意 Payload (SQLi + XSS)。
    • 自動發送請求到目標 API。
    • 收集回應並交給 Gemini 模型分析,產生「問題 → 原因 → 修正建議」。

server – 模擬不安全 API

  • express → 建立 API 伺服器
  • /api/login → 模擬不安全登入點
  • fakeQuery → 故意拼接字串,暴露 SQLi 漏洞
import express from "express";
import bodyParser from "body-parser";

const app = express();
app.use(bodyParser.json());

// 模擬不安全登入 API
app.post("/api/login", (req, res) => {
   const { username, password } = req.body;

   // 這裡故意用字串拼接 → SQLi 漏洞
   const fakeQuery = `SELECT * FROM users WHERE username = '${username}' AND password = '${password}'`;

   console.log("收到查詢:", fakeQuery);

   // 只要帳號是 admin 且密碼是 123,就算成功
   if (username === "admin" && password === "123") {
      res.send("登入成功");
   } else {
      res.send("登入失敗,SQL 查詢: " + fakeQuery);
   }
});

// 啟動伺服器
app.listen(3000, () => {
   console.log("測試伺服器啟動:http://localhost:3000");
});

AI Agent 攻擊腳本

1、惡意 Payloads

  • SQLi → 嘗試繞過密碼檢查
  • XSS → 測試是否會被反射回頁面
const payloads = [
  { username: "admin", password: "' OR 1=1 --" },      // SQL Injection
  { username: "<script>alert('XSS')</script>", password: "123" } // XSS
];

2、發送攻擊請求

  • 送出惡意 Payload 到 API
  • 收集伺服器回應 (status + response body)
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 };
}

3、Gemini 分析

  • 將攻擊回應交給 Gemini 模型
  • 產生「問題 → 原因 → 修正建議」報告
async function analyzeResults(results) {
   const prompt = `
		你是一個資安顧問,請分析以下 API 測試結果,找出安全漏洞並提供修正建議:
		
		${JSON.stringify(results, null, 2)}
		
		請輸出格式:
		- 問題
		- 原因
		- 修正建議
		   `;

   const result = await model.generateContent(prompt);
   console.log("=== AI 分析回報 ===\n");
   console.log(result.response.text());
}

4、主程式

(async () => {
   let results = [];
   for (let p of payloads) {
      const r = await attackApi(p);
      results.push(r);
   }
   await analyzeResults(results);
})();

上一篇
Day14 - Agent 偵測前端弱點:過時 JS Library 自動警示
下一篇
Day16 - 程式碼安全審查:AI Agent 在 CI/CD Pipeline 裡守門
系列文
AI 驅動的 Web 資安新時代16
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言