SQL injection

 

https://ithelp.ithome.com.tw/m/articles/10240102


常見的 SQL injection 類型

  • 查詢隱藏的數據
    • 修改 SQL 語法來查詢資料庫的其他資料。
  • 影響應用程式邏輯
    • 修改 SQL 語法來影響應用程式的邏輯。
  • UNION 攻擊
    • 修改 SQL 語法來查詢其他資料庫表的資料。
  • 檢查資料庫
    • 修改 SQL 語法來查詢資料庫版本與架構。
  • 盲SQL注入
    • 修改 SQL與法但結果不會直接回傳在頁面。

假設一個購物商場透過 URL 對伺服器請求,查詢類別為 Gifts

https://feifei.tw/products?category=Gifts

參數 category 的內容會傳到後端並進行 SQL語法的查詢

SELECT * FROM products WHERE category = 'Gifts' AND released = 1

此 SQL 語法的內容為

  1. 選擇所有欄位名稱
  2. 從資料表 products
  3. category 欄位為 Gifts
  4. 且 released 發布狀態為 1 (已發布)

SQL 註解為 --

我們可以嘗試將 AND released = 1 透過 -- 註解

https://feifei.tw/products?category=Gifts'+OR+1=1--

  • +在網址列為 %20 表示空白的意思

SQL語法的查詢

SELECT * FROM products WHERE category = 'Gifts' OR 1=1--' AND released = 1

不同資料庫的註解方法

影響應用程式邏輯

  • 假設一個可以利用帳號密碼登入的系統,輸入帳號密碼後 SQL 語句

    SELECT * FROM users WHERE username = 'wiener' AND password = 'bluecheese'

SELECT * FROM users WHERE username = 'administrator'--' AND password = ''

留言

這個網誌中的熱門文章

Superset 落地過程筆記

Django環境的MSSQL設定