iT邦幫忙

2025 iThome 鐵人賽

DAY 8
0
Security

資安菜鳥的30天挑戰系列 第 8

[DAY8]偷偷在書裡面塞張紙!

  • 分享至 

  • xImage
  •  

SQL Injection

📌 想像一個網站登入畫面,你輸入帳號密碼

正常情況下,網站會把你的輸入丟到資料庫檢查是否正確

如果網站沒做好防護,駭客可以在輸入框中「偷偷加上程式碼」

讓資料庫誤以為他就是管理員,甚至把整個資料庫都吐出來。

原理

  • 應用程式將使用者輸入進 SQL 查詢字串
  • 攻擊者插入惡意語法。
SELECT * FROM users WHERE username = '輸入值' AND password = '輸入值';

如果輸入' OR '1'='1,整個條件永遠為真

攻擊者即可繞過驗證

攻擊方

📌 小偷:觀察 → 嘗試 → 偷取 → 掩蓋痕跡

目標

  • 取得敏感資料(帳號、密碼、個資)
  • 身份驗證繞過,取得系統控制權
  • 破壞或修改資料,影響服務可用性

流程

  • 偵察(Recon):找出可能受 SQL Injection 影響的頁面或 API(登入、搜尋、表單)
  • 輸入測試(Fuzzing / Probe):嘗試 ' OR '1'='1 或其他 payload,檢查錯誤訊息或異常回應
  • 取得資料 / 提權:利用成功的 SQL Injection,抽取敏感欄位,或插入惡意指令提升權限
  • 掩蓋痕跡:刪除日誌或修改錯誤訊息以隱藏行為。

工具

  • SQLMap、Burp Suite、手動 payload 測試
  • 利用錯誤訊息或堆疊回傳來判斷資料庫版本與欄位
  • 利用 UNION、SELECT、INSERT、UPDATE 等 SQL 語法竊取資料

指標

  • 不尋常的 SQL 錯誤訊息被回傳
  • 多次相似查詢或特殊符號輸入('--UNION SELECT
  • 異常資料庫流量或大量查詢

防禦方

📌 房主:鎖門 → 安裝警報 → 限制權限 → 定期巡邏

程式層

  • 使用參數化查詢(Prepared Statements / ORM)
  • 輸入驗證與型別檢查
  • 不直接顯示資料庫錯誤訊息

資料庫層

  • 最小權限帳號(僅能 SELECT / INSERT 必要欄位)
  • 監控異常 SQL 查詢與大流量操作

網路/架構層

  • WAF 阻擋已知 SQL Injection patterns
  • 定期滲透測試與安全掃描

偵測

  • 日誌分析:檢查關鍵字的輸入
  • SIEM / IDS:設定異常資料庫流量告警
  • 事件發生時:隔離受影響服務、比對並修補

結論

攻擊者透過在輸入欄位注入惡意 SQL 語句

  • 竊取敏感資料
  • 繞過身份驗證
  • 修改、刪除資料庫

防守角度來看,防禦核心在於程式層的安全設計

  • 採用參數化查詢
  • 嚴格輸入驗證
  • 最小化資料庫帳號權限
  • 搭配 WAF 與監控系統

📌 任何可輸入的接口都是潛在攻擊點


上一篇
[DAY7]案例上教會我們的事?
系列文
資安菜鳥的30天挑戰8
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言